Changeset 1158

Show
Ignore:
Timestamp:
05/08/08 17:50:07 (2 months ago)
Author:
asterite
Message:

mtype.c ported to DMD 1.028

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/descent.core/src/descent/core/compiler/IProblem.java

    r1157 r1158  
    490490    int OnlyOneOrTwoArgumentsForArrayForeach = 279; 
    491491    int ForeachTargetIsNotAnArrayOf = 280; 
    492     int ForeachValueCannotBeOutAndTypeBit = 281; 
    493     int ForeachKeyCannotBeInout = 282; 
    494     int ForeachValueOfUTFConversionCannotBeInout = 283; 
    495     int CannotInferTypeForSymbol = 284; 
    496     int CannotInferTypeFromInitializer = 285; 
    497     int NoStorageClassForSymbol = 286; 
    498     int OnlyOneValueOrTwoKeyValueArgumentsForTupleForeach = 287; 
    499     int CannotUniquelyInferForeachArgumentTypes = 288; 
    500     int InvalidForeachAggregate = 289; 
    501     int NotAnAssociativeArrayInitializer = 290; 
    502     int ArrayInitializersAsExpressionsNotAllowed = 291; 
    503     int IftypeConditionCannotBeAtGlobalScope = 292; 
    504     int SymbolIsNotAFieldOfSymbol = 293; 
    505     int RecursiveTemplateExpansion = 294; 
    506     int RecursiveTemplateExpansionForTemplateArgument = 295; 
    507     int IndexIsNotATypeOrExpression = 296; 
    508     int CannotHavePointerToSymbol = 297; 
    509     int SizeOfTypeIsNotKnown = 298; 
    510     int CanOnlySliceTupleTypes = 299; 
    511     int NoPropertyForTuple = 300; 
    512     int CannotResolveDotProperty = 301; 
    513     int CannotTakeAddressOfBitInArray = 302; 
    514     int OnlyOneIndexAllowedToIndex = 303; 
    515     int NoOpIndexOperatorOverloadForType = 304; 
    516     int ArrayDimensionOverflow = 305; 
    517     int OperatorAssignmentOverloadWithOpIndexIllegal = 306; 
    518     int CannotHaveOutOrInoutArgumentOfBitInArray = 307; 
    519     int SymbolIsAliasedToAFunction = 308; 
    520     int LinkageDoesNotMatchInterfaceFunction = 309; 
    521     int InterfaceFunctionIsNotImplemented = 310; 
    522     int ExpectedKeyAsArgumentToRemove = 311; 
    523     int CyclicConstructorCall = 312; 
    524     int MissingOrCurruptObjectDotD = 313; 
    525     int CannotContinueOutOfFinallyBlock = 314; 
    526     int ForwardDeclaration = 315; 
    527     int CannotFormDelegateDueToCovariantReturnType = 316; 
    528     int ForeachRangeKeyCannotHaveStorageClass = 317; 
    529     int MultipleOverridesOfSameFunction = 318; 
    530     int IdentityAssignmentOperatorOverloadIsIllegal = 319; 
    531     int LiteralsCannotBeClassMembers = 320; 
    532     int NoMatchForImplicitSuperCallInConstructor = 321; 
    533     int NoReturnAtEndOfFunction = 322; 
    534     int CanOnlyDeclareTypeAliasesWithinStaticIfConditionals = 323; 
    535     int PackageAndModuleHaveTheSameName = 324; 
    536     int StringLiteralsAreImmutable = 325; 
    537     int ExpressionDotNewIsOnlyForAllocatingNestedClasses = 326; 
    538     int TooManyArgumentsForArray = 327; 
    539     int ReturnExpressionExpected = 328; 
    540     int ReturnWithoutCallingConstructor = 329; 
    541     int ModuleIsInMultiplePackages = 330; 
    542     int ModuleIsInMultipleDefined = 331; 
    543     int NeedUpperAndLowerBoundToSlicePointer = 332; 
    544     int NeedUpperAndLowerBoundToSliceTuple = 333; 
    545     int CannotConvertStringLiteralToVoidPointer = 334; 
    546     int SymbolIsNotAPreInstanceInitializableField = 335; 
    547     int NoCaseStatementFollowingGoto = 336; 
    548     int SwitchStatementHasNoDefault = 337; 
    549     int SymbolIsNotAFunctionTemplate = 338; 
    550     int TupleIsNotAValidTemplateValueArgument = 339; 
    551     int IncompatibleArgumentsForTemplateInstantiation = 340; 
    552     int ThrowStatementsCannotBeInContracts = 341; 
    553     int CanOnlyThrowClassObjects = 342; 
    554     int StringExpectedAsSecondArgument = 343; 
    555     int WrongNumberOfArguments = 344; 
    556     int StringMustBeChars = 345; 
    557     int InvalidFirstArgument = 346; 
    558     int FirstArgumentIsNotAClass = 347; 
    559     int ArgumentHasNoMembers = 348; 
    560     int SymbolHasNoMembers = 349; 
    561     int KindSymbolHasNoMembers = 350; 
    562     int DotOffsetDeprecated = 351; 
    563     int NoClassInfoForComInterfaceObjects = 352; 
    564     int CannotMakeReferenceToABit = 353; 
    565     int CannotFormTupleOfTuples = 354; 
    566     int MissingInitializerInStaticConstructorForConstVariable = 355; 
    567     int GlobalsStaticsFieldsRefAndAutoParametersCannotBeAuto = 356; 
    568     int ReferenceToScopeClassMustBeScope = 357; 
    569     int NumberOfKeysMustMatchNumberOfValues = 358; 
    570     int ExpectedNumberArguments = 359; 
    571     int ArraySliceIfOutOfBounds = 360; 
    572     int InvalidUCS32Char = 361; 
    573     int TupleIndexExceedsBounds = 362; 
    574     int SliceIsOutOfRange = 363; 
    575     int CannotTakeAddressOf = 364; 
    576     int VariableIsUsedBeforeInitialization = 365; 
    577     int EscapingReferenceToLocal = 366; 
    578     int EscapingReferenceToAutoLocal = 367; 
    579     int EscapingReferenceToLocalVariable = 368; 
    580     int EscapingReferenceToVariadicParameter = 369; 
    581     int CanOnlyCatchClassObjects = 370; 
    582     int BaseClassIsForwardReferenced = 371; 
    583     int BaseIsForwardReferenced = 372; 
    584     int CannotInheritFromFinalClass = 373; 
    585     int StaticClassCannotInheritFromNestedClass = 374; 
    586     int SuperClassIsNestedWithin = 375; 
    587     int ArrayComparisonTypeMismatch = 376; 
    588     int ConditionalExpressionIsNotAModifiableLvalue = 377; 
    589     int CannotCastSymbolToSymbol = 378; 
    590     int CannotDeleteInstanceOfComInterface = 379; 
    591     int TemplateIsNotAMemberOf = 380; 
    592     int TemplateIdentifierIsNotAMemberOf = 381; 
    593     int CanOnlyInitiailizeConstMemberInsideConstructor = 382; 
    594     int SymbolIsNotAMember = 383; 
    595     int SymbolIsNotATemplate = 384; 
    596     int DSymbolHasNoSize = 385; 
    597     int ExpressionOfTypeDoesNotHaveABooleanValue = 386; 
    598     int ImplicitConversionCanCauseLossOfData = 387; 
    599     int ForwardReferenceToType = 388; 
    600     int FloatingPointConstantExpressionExpected = 389; 
    601     int ExpressionIsNotAValidTemplateValueArgument = 390; 
    602     int InvalidRangeLowerBound = 391; 
    603     int InvalidRangeUpperBound = 392; 
    604     int SymbolIsNotAScalarType = 393; 
    605     int ForeachIndexMustBeType = 394; 
    606     int ForeachValueMustBeType = 395; 
    607     int OpApplyFunctionMustReturnAnInt = 396; 
    608     int FunctionOfTypeOverridesButIsNotCovariant = 397; 
    609     int CannotOverrideFinalFunction = 398; 
    610     int IncompatibleCovariantTypes = 399; 
    611     int CannotUseTemplateToAddVirtualFunctionToClass = 400; 
    612     int OutResultIsAlreadyDefined = 401; 
    613     int MissingInitializerForConstField = 402; 
    614     int ImportNotFound = 403; 
    615     int SymbolMustBeAnArrayOfPointerType = 404; 
    616     int RvalueOfInExpressionMustBeAnAssociativeArray = 405; 
    617     int InterfaceInheritsFromDuplicateInterface = 406; 
    618     int LabelIsAlreadyDefined = 407; 
    619     int CannotSubtractPointerFromSymbol = 408; 
    620     int ThisForNestedClassMustBeAClassType = 409; 
    621     int CanOnlyDereferenceAPointer = 410; 
    622     int OuterClassThisNeededToNewNestedClass = 411; 
    623     int ThisForNestedClassMustBeOfType = 412; 
    624     int NoConstructorForSymbol = 413; 
    625     int NoAllocatorForSymbol = 414; 
    626     int NegativeArrayIndex = 415; 
    627     int NewCanOnlyCreateStructsDynamicArraysAndClassObjects = 416; 
    628     int MismatchedFunctionReturnTypeInference = 417; 
    629     int ShiftLeftExceeds = 418; 
    630     int SymbolCannotBeSlicedWithBrackets = 419; 
    631     int SliceExpressionIsNotAModifiableLvalue = 420; 
    632     int SymbolIsNotAMemberOf = 421; 
    633     int MoreInitiailizersThanFields = 422; 
    634     int OverlappingInitiailization = 423; 
    635     int CannotMakeExpressionOutOfInitializer = 424; 
    636     int NoDefaultOrCaseInSwitchStatement = 425; 
    637     int SymbolIsNotASymbol = 426; 
    638     int ForwardReferenceToTemplate = 427; 
    639     int ForwardReferenceToTemplateDeclaration = 428; 
    640     int SpecializationNotAllowedForDeducedParameter = 429; 
    641     int CannotDeclareTemplateAtFunctionScope = 430; 
    642     int TemplateHasNoValue = 431; 
    643     int CannotUseLocalAsTemplateParameter = 432; 
    644     int NoSizeForType = 433; 
    645     int SymbolDotSymbolIsNotADeclaration = 434; 
    646     int ThisIsRequiredButIsNotABaseClassOf = 435; 
    647     int ForwardReferenceToSymbol = 436; 
    648     int IdentifierOfSymbolIsNotDefined = 437; 
    649     int StructIsForwardReferenced = 438; 
    650     int CannotUseTemplateToAddFieldToAggregate = 439; 
    651     int CannotModifyFinalVariable = 440; 
    652     int InvalidUtf8Sequence2 = 441; 
    653     int Utf16HighValuePastEndOfString = 442; 
    654     int Utf16LowValueOutOfRange = 443; 
    655     int UnpairedUtf16Value = 444; 
    656     int IllegalUtf16Value = 445; 
    657     int StaticConstructorCanOnlyBePartOfStructClassModule = 446; 
    658     int ShiftAssignIsOutsideTheRange = 447; 
    659     int TemplateTupleParameterMustBeLastOne = 448; 
    660     int SymbolIsNestedInBoth = 449; 
    661     int FunctionIsAbstract = 450; 
    662     int KindSymbolDoesNotOverload = 451; 
    663     int MismatchedTupleLengths = 452; 
    664     int DoNotUseNullWhenComparingClassTypes = 453; 
    665     int UseTokenInsteadOfTokenWhenComparingWithNull = 454; 
     492    int ForeachKeyCannotBeInout = 281; 
     493    int ForeachValueOfUTFConversionCannotBeInout = 282; 
     494    int CannotInferTypeForSymbol = 283; 
     495    int CannotInferTypeFromInitializer = 284; 
     496    int NoStorageClassForSymbol = 285; 
     497    int OnlyOneValueOrTwoKeyValueArgumentsForTupleForeach = 286; 
     498    int CannotUniquelyInferForeachArgumentTypes = 287; 
     499    int InvalidForeachAggregate = 288; 
     500    int NotAnAssociativeArrayInitializer = 289; 
     501    int ArrayInitializersAsExpressionsNotAllowed = 290; 
     502    int IftypeConditionCannotBeAtGlobalScope = 291; 
     503    int SymbolIsNotAFieldOfSymbol = 292; 
     504    int RecursiveTemplateExpansion = 293; 
     505    int RecursiveTemplateExpansionForTemplateArgument = 294; 
     506    int IndexIsNotATypeOrExpression = 295; 
     507    int CannotHavePointerToSymbol = 296; 
     508    int SizeOfTypeIsNotKnown = 297; 
     509    int CanOnlySliceTupleTypes = 298; 
     510    int NoPropertyForTuple = 299; 
     511    int CannotResolveDotProperty = 300; 
     512    int CannotTakeAddressOfBitInArray = 301; 
     513    int OnlyOneIndexAllowedToIndex = 302; 
     514    int NoOpIndexOperatorOverloadForType = 303; 
     515    int ArrayDimensionOverflow = 304; 
     516    int OperatorAssignmentOverloadWithOpIndexIllegal = 305; 
     517    int CannotHaveOutOrInoutArgumentOfBitInArray = 306; 
     518    int SymbolIsAliasedToAFunction = 307; 
     519    int LinkageDoesNotMatchInterfaceFunction = 308; 
     520    int InterfaceFunctionIsNotImplemented = 309; 
     521    int ExpectedKeyAsArgumentToRemove = 310; 
     522    int CyclicConstructorCall = 311; 
     523    int MissingOrCurruptObjectDotD = 312; 
     524    int CannotContinueOutOfFinallyBlock = 313; 
     525    int ForwardDeclaration = 314; 
     526    int CannotFormDelegateDueToCovariantReturnType = 315; 
     527    int ForeachRangeKeyCannotHaveStorageClass = 316; 
     528    int MultipleOverridesOfSameFunction = 317; 
     529    int IdentityAssignmentOperatorOverloadIsIllegal = 318; 
     530    int LiteralsCannotBeClassMembers = 319; 
     531    int NoMatchForImplicitSuperCallInConstructor = 320; 
     532    int NoReturnAtEndOfFunction = 321; 
     533    int CanOnlyDeclareTypeAliasesWithinStaticIfConditionals = 322; 
     534    int PackageAndModuleHaveTheSameName = 323; 
     535    int StringLiteralsAreImmutable = 324; 
     536    int ExpressionDotNewIsOnlyForAllocatingNestedClasses = 325; 
     537    int TooManyArgumentsForArray = 326; 
     538    int ReturnExpressionExpected = 327; 
     539    int ReturnWithoutCallingConstructor = 328; 
     540    int ModuleIsInMultiplePackages = 329; 
     541    int ModuleIsInMultipleDefined = 330; 
     542    int NeedUpperAndLowerBoundToSlicePointer = 331; 
     543    int NeedUpperAndLowerBoundToSliceTuple = 332; 
     544    int CannotConvertStringLiteralToVoidPointer = 333; 
     545    int SymbolIsNotAPreInstanceInitializableField = 334; 
     546    int NoCaseStatementFollowingGoto = 335; 
     547    int SwitchStatementHasNoDefault = 336; 
     548    int SymbolIsNotAFunctionTemplate = 337; 
     549    int TupleIsNotAValidTemplateValueArgument = 338; 
     550    int IncompatibleArgumentsForTemplateInstantiation = 339; 
     551    int ThrowStatementsCannotBeInContracts = 340; 
     552    int CanOnlyThrowClassObjects = 341; 
     553    int StringExpectedAsSecondArgument = 342; 
     554    int WrongNumberOfArguments = 343; 
     555    int StringMustBeChars = 344; 
     556    int InvalidFirstArgument = 345; 
     557    int FirstArgumentIsNotAClass = 346; 
     558    int ArgumentHasNoMembers = 347; 
     559    int SymbolHasNoMembers = 348; 
     560    int KindSymbolHasNoMembers = 349; 
     561    int DotOffsetDeprecated = 350; 
     562    int NoClassInfoForComInterfaceObjects = 351; 
     563    int CannotMakeReferenceToABit = 352; 
     564    int CannotFormTupleOfTuples = 353; 
     565    int MissingInitializerInStaticConstructorForConstVariable = 354; 
     566    int GlobalsStaticsFieldsRefAndAutoParametersCannotBeAuto = 355; 
     567    int ReferenceToScopeClassMustBeScope = 356; 
     568    int NumberOfKeysMustMatchNumberOfValues = 357; 
     569    int ExpectedNumberArguments = 358; 
     570    int ArraySliceIfOutOfBounds = 359; 
     571    int InvalidUCS32Char = 360; 
     572    int TupleIndexExceedsBounds = 361; 
     573    int SliceIsOutOfRange = 362; 
     574    int CannotTakeAddressOf = 363; 
     575    int VariableIsUsedBeforeInitialization = 364; 
     576    int EscapingReferenceToLocal = 365; 
     577    int EscapingReferenceToAutoLocal = 366; 
     578    int EscapingReferenceToLocalVariable = 367; 
     579    int EscapingReferenceToVariadicParameter = 368; 
     580    int CanOnlyCatchClassObjects = 369; 
     581    int BaseClassIsForwardReferenced = 370; 
     582    int BaseIsForwardReferenced = 371; 
     583    int CannotInheritFromFinalClass = 372; 
     584    int StaticClassCannotInheritFromNestedClass = 373; 
     585    int SuperClassIsNestedWithin = 374; 
     586    int ArrayComparisonTypeMismatch = 375; 
     587    int ConditionalExpressionIsNotAModifiableLvalue = 376; 
     588    int CannotCastSymbolToSymbol = 377; 
     589    int CannotDeleteInstanceOfComInterface = 378; 
     590    int TemplateIsNotAMemberOf = 379; 
     591    int TemplateIdentifierIsNotAMemberOf = 380; 
     592    int CanOnlyInitiailizeConstMemberInsideConstructor = 381; 
     593    int SymbolIsNotAMember = 382; 
     594    int SymbolIsNotATemplate = 383; 
     595    int DSymbolHasNoSize = 384; 
     596    int ExpressionOfTypeDoesNotHaveABooleanValue = 385; 
     597    int ImplicitConversionCanCauseLossOfData = 386; 
     598    int ForwardReferenceToType = 387; 
     599    int FloatingPointConstantExpressionExpected = 388; 
     600    int ExpressionIsNotAValidTemplateValueArgument = 389; 
     601    int InvalidRangeLowerBound = 390; 
     602    int InvalidRangeUpperBound = 391; 
     603    int SymbolIsNotAScalarType = 392; 
     604    int ForeachIndexMustBeType = 393; 
     605    int ForeachValueMustBeType = 394; 
     606    int OpApplyFunctionMustReturnAnInt = 395; 
     607    int FunctionOfTypeOverridesButIsNotCovariant = 396; 
     608    int CannotOverrideFinalFunction = 397; 
     609    int IncompatibleCovariantTypes = 398; 
     610    int CannotUseTemplateToAddVirtualFunctionToClass = 399; 
     611    int OutResultIsAlreadyDefined = 400; 
     612    int MissingInitializerForConstField = 401; 
     613    int ImportNotFound = 402; 
     614    int SymbolMustBeAnArrayOfPointerType = 403; 
     615    int RvalueOfInExpressionMustBeAnAssociativeArray = 404; 
     616    int InterfaceInheritsFromDuplicateInterface = 405; 
     617    int LabelIsAlreadyDefined = 406; 
     618    int CannotSubtractPointerFromSymbol = 407; 
     619    int ThisForNestedClassMustBeAClassType = 408; 
     620    int CanOnlyDereferenceAPointer = 409; 
     621    int OuterClassThisNeededToNewNestedClass = 410; 
     622    int ThisForNestedClassMustBeOfType = 411; 
     623    int NoConstructorForSymbol = 412; 
     624    int NoAllocatorForSymbol = 413; 
     625    int NegativeArrayIndex = 414; 
     626    int NewCanOnlyCreateStructsDynamicArraysAndClassObjects = 415; 
     627    int MismatchedFunctionReturnTypeInference = 416; 
     628    int ShiftLeftExceeds = 417; 
     629    int SymbolCannotBeSlicedWithBrackets = 418; 
     630    int SliceExpressionIsNotAModifiableLvalue = 419; 
     631    int SymbolIsNotAMemberOf = 420; 
     632    int MoreInitiailizersThanFields = 421; 
     633    int OverlappingInitiailization = 422; 
     634    int CannotMakeExpressionOutOfInitializer = 423; 
     635    int NoDefaultOrCaseInSwitchStatement = 424; 
     636    int SymbolIsNotASymbol = 425; 
     637    int ForwardReferenceToTemplate = 426; 
     638    int ForwardReferenceToTemplateDeclaration = 427; 
     639    int SpecializationNotAllowedForDeducedParameter = 428; 
     640    int CannotDeclareTemplateAtFunctionScope = 429; 
     641    int TemplateHasNoValue = 430; 
     642    int CannotUseLocalAsTemplateParameter = 431; 
     643    int NoSizeForType = 432; 
     644    int SymbolDotSymbolIsNotADeclaration = 433; 
     645    int ThisIsRequiredButIsNotABaseClassOf = 434; 
     646    int ForwardReferenceToSymbol = 435; 
     647    int IdentifierOfSymbolIsNotDefined = 436; 
     648    int StructIsForwardReferenced = 437; 
     649    int CannotUseTemplateToAddFieldToAggregate = 438; 
     650    int CannotModifyFinalVariable = 439; 
     651    int InvalidUtf8Sequence2 = 440; 
     652    int Utf16HighValuePastEndOfString = 441; 
     653    int Utf16LowValueOutOfRange = 442; 
     654    int UnpairedUtf16Value = 443; 
     655    int IllegalUtf16Value = 444; 
     656    int StaticConstructorCanOnlyBePartOfStructClassModule = 445; 
     657    int ShiftAssignIsOutsideTheRange = 446; 
     658    int TemplateTupleParameterMustBeLastOne = 447; 
     659    int SymbolIsNestedInBoth = 448; 
     660    int FunctionIsAbstract = 449; 
     661    int KindSymbolDoesNotOverload = 450; 
     662    int MismatchedTupleLengths = 451; 
     663    int DoNotUseNullWhenComparingClassTypes = 452; 
     664    int UseTokenInsteadOfTokenWhenComparingWithNull = 453; 
     665    int VoidDoesNotHaveAnInitializer = 454; 
    666666 
    667667} 
  • trunk/descent.core/src/descent/internal/compiler/lookup/ModuleBuilder.java

    r1155 r1158  
    135135     * Currently doesn't work. 
    136136     */ 
    137     public boolean LAZY_VARS = LAZY & true; 
     137    public boolean LAZY_VARS = LAZY & false; 
    138138     
    139139    /* 
  • trunk/descent.core/src/descent/internal/compiler/parser/ASTDmdNode.java

    r1157 r1158  
    11011101    } 
    11021102 
    1103     public static void argsToCBuffer(OutBuffer buf, HdrGenState hgs, 
    1104             List<Argument> arguments, int varargs, SemanticContext context) { 
    1105         buf.writeByte('('); 
    1106         if (arguments != null) { 
    1107             int i; 
    1108             OutBuffer argbuf = new OutBuffer(); 
    1109  
    1110             for (i = 0; i < arguments.size(); i++) { 
    1111                 Argument arg; 
    1112  
    1113                 if (i != 0) { 
    1114                     buf.writestring(", "); 
    1115                 } 
    1116                 arg = arguments.get(i); 
    1117                 if ((arg.storageClass & STCout) != 0) { 
    1118                     buf.writestring("out "); 
    1119                 } else if ((arg.storageClass & STCref) != 0) { 
    1120                     buf 
    1121                             .writestring((context.global.params.Dversion == 1) ? "inout " 
    1122                                     : "ref "); 
    1123                 } else if ((arg.storageClass & STClazy) != 0) { 
    1124                     buf.writestring("lazy "); 
    1125                 } 
    1126                 argbuf.reset(); 
    1127                 arg.type.toCBuffer2(argbuf, arg.ident, hgs, context); 
    1128                 if (arg.defaultArg != null) { 
    1129                     argbuf.writestring(" = "); 
    1130                     arg.defaultArg.toCBuffer(argbuf, hgs, context); 
    1131                 } 
    1132                 buf.write(argbuf); 
    1133             } 
    1134             if (varargs != 0) { 
    1135                 if (i != 0 && varargs == 1) { 
    1136                     buf.writeByte(','); 
    1137                 } 
    1138                 buf.writestring("..."); 
    1139             } 
    1140         } 
    1141         buf.writeByte(')'); 
    1142     } 
    1143  
    11441103    public static void arrayExpressionScanForNestedRef(Scope sc, Expressions a, 
    11451104            SemanticContext context) { 
  • trunk/descent.core/src/descent/internal/compiler/parser/Argument.java

    r1037 r1158  
    1414 
    1515// DMD 1.020 
    16 public class Argument extends ASTDmdNode
     16public class Argument extends ASTDmdNode implements Cloneable
    1717 
    1818    public static void argsToCBuffer(OutBuffer buf, HdrGenState hgs, 
     
    4040                } 
    4141                argbuf.reset(); 
    42                 arg.type.toCBuffer2(argbuf, arg.ident, hgs, context); 
     42                arg.type.toCBuffer(argbuf, arg.ident, hgs, context); 
    4343                if (arg.defaultArg != null) { 
    4444                    argbuf.writestring(" = "); 
     
    8989                arg = args.get(i); 
    9090                argbuf.reset(); 
    91                 arg.type.toCBuffer2(argbuf, null, hgs, context); 
     91                arg.type.toCBuffer2(argbuf, hgs, 0, context); 
    9292                buf.write(argbuf); 
    9393            } 
     
    258258        type.toDecoBuffer(buf, context); 
    259259    } 
     260     
     261    public Argument copy() { 
     262        try { 
     263            return (Argument) clone(); 
     264        } catch (CloneNotSupportedException e) { 
     265            throw new RuntimeException(e); 
     266        } 
     267    } 
    260268 
    261269    public String getSignature() { 
  • trunk/descent.core/src/descent/internal/compiler/parser/CtorDeclaration.java

    r1154 r1158  
    142142            SemanticContext context) { 
    143143        buf.writestring("this"); 
    144         argsToCBuffer(buf, hgs, arguments, varargs, context); 
     144        Argument.argsToCBuffer(buf, hgs, arguments, varargs, context); 
    145145        bodyToCBuffer(buf, hgs, context); 
    146146    } 
  • trunk/descent.core/src/descent/internal/compiler/parser/DeleteDeclaration.java

    r1154 r1158  
    124124            SemanticContext context) { 
    125125        buf.writestring("delete"); 
    126         argsToCBuffer(buf, hgs, arguments, 0, context); 
     126        Argument.argsToCBuffer(buf, hgs, arguments, 0, context); 
    127127        bodyToCBuffer(buf, hgs, context); 
    128128    } 
  • trunk/descent.core/src/descent/internal/compiler/parser/DoStatement.java

    r1118 r1158  
    130130        condition = condition.semantic(sc, context); 
    131131        condition = resolveProperties(sc, condition, context); 
     132        condition = condition.optimize(WANTvalue, context); 
    132133 
    133134        condition = condition.checkToBoolean(context); 
  • trunk/descent.core/src/descent/internal/compiler/parser/EqualExp.java

    r1157 r1158  
    105105                (e1.type.toBasetype(context).ty == Tclass && e2.op == TOKnull || 
    106106                e2.type.toBasetype(context).ty == Tclass && e1.op == TOKnull)) { 
    107             context.acceptProblem(Problem.newSemanticTypeError(IProblem.UseTokenInsteadOfTokenWhenComparingWithNull, this, new String[] { op == TOKequal ? TOKidentity.toString() : TOKnotidentity.toString(), op.toString() })); 
     107            context.acceptProblem(Problem.newSemanticTypeError(IProblem.UseTokenInsteadOfTokenWhenComparingWithNull, this, new String[] { op == TOKequal ? "is" : "!is", op.toString() })); 
    108108        } 
    109109 
  • trunk/descent.core/src/descent/internal/compiler/parser/ForStatement.java

    r1118 r1158  
    166166        condition = condition.semantic(sc, context); 
    167167        condition = resolveProperties(sc, condition, context); 
     168        condition = condition.optimize(WANTvalue, context); 
     169 
    168170        condition = condition.checkToBoolean(context); 
    169171        if (increment != null) { 
  • trunk/descent.core/src/descent/internal/compiler/parser/ForeachStatement.java

    r1154 r1158  
    2929import static descent.internal.compiler.parser.TY.Taarray; 
    3030import static descent.internal.compiler.parser.TY.Tarray; 
    31 import static descent.internal.compiler.parser.TY.Tbit; 
    3231import static descent.internal.compiler.parser.TY.Tchar; 
    3332import static descent.internal.compiler.parser.TY.Tdchar; 
     
    396395             * array. 
    397396             */ 
    398             tn = tab.next.toBasetype(context); 
     397            tn = tab.nextOf().toBasetype(context); 
    399398            if (tn.ty == Tchar || tn.ty == Twchar || tn.ty == Tdchar) { 
    400399                Argument arg; 
     
    464463                        context.acceptProblem(Problem.newSemanticTypeError(IProblem.ForeachTargetIsNotAnArrayOf, sourceAggr, new String[] { tab.toChars(context), value.type.toChars(context) })); 
    465464                    } 
    466                 } 
    467             } 
    468  
    469             if ((value.storage_class & STCout) != 0 
    470                     && value.type.toBasetype(context).ty == Tbit) { 
    471                 if (context.acceptsProblems()) { 
    472                     context.acceptProblem(Problem.newSemanticTypeError(IProblem.ForeachValueCannotBeOutAndTypeBit, this)); 
    473465                } 
    474466            } 
     
    544536        Type tret; 
    545537 
    546         tret = func.type.next
     538        tret = func.type.nextOf()
    547539 
    548540        // Need a variable to hold value from any return statements in body. 
     
    623615                    } 
    624616                } 
    625                 if (!arg.type.equals(taa.index)) { 
     617                if (!arg.type.equals(taa.nextOf())) { 
    626618                    if (context.acceptsProblems()) { 
    627619                        context.acceptProblem(Problem.newSemanticTypeError( 
  • trunk/descent.core/src/descent/internal/compiler/parser/Problem.java

    r1157 r1158  
    688688        case ForeachTargetIsNotAnArrayOf: 
    689689            return String.format(ProblemMessages.ForeachTargetIsNotAnArrayOf, arguments[0], arguments[1]); 
    690         case ForeachValueCannotBeOutAndTypeBit: 
    691             return String.format(ProblemMessages.ForeachValueCannotBeOutAndTypeBit); 
    692690        case ForeachKeyCannotBeInout: 
    693691            return String.format(ProblemMessages.ForeachKeyCannotBeInout); 
     
    10361034        case UseTokenInsteadOfTokenWhenComparingWithNull: 
    10371035            return String.format(ProblemMessages.UseTokenInsteadOfTokenWhenComparingWithNull, arguments[0], arguments[1]); 
     1036        case VoidDoesNotHaveAnInitializer: 
     1037            return String.format(ProblemMessages.VoidDoesNotHaveAnInitializer); 
    10381038        default: 
    10391039            return ""; 
  • trunk/descent.core/src/descent/internal/compiler/parser/ProblemMessages.java

    r1157 r1158  
    291291    public static String OnlyOneOrTwoArgumentsForArrayForeach; 
    292292    public static String ForeachTargetIsNotAnArrayOf; 
    293     public static String ForeachValueCannotBeOutAndTypeBit; 
    294293    public static String ForeachKeyCannotBeInout; 
    295294    public static String ForeachValueOfUTFConversionCannotBeInout; 
     
    465464    public static String DoNotUseNullWhenComparingClassTypes; 
    466465    public static String UseTokenInsteadOfTokenWhenComparingWithNull; 
     466    public static String VoidDoesNotHaveAnInitializer; 
    467467     
    468468    static { 
  • trunk/descent.core/src/descent/internal/compiler/parser/ProblemMessages.properties

    r1157 r1158  
    279279OnlyOneOrTwoArgumentsForArrayForeach=Only one or two arguments for array foreach 
    280280ForeachTargetIsNotAnArrayOf=foreach: %1$s is not an array of %2$s 
    281 ForeachValueCannotBeOutAndTypeBit=foreach: value cannot be out and type bit 
    282281ForeachKeyCannotBeInout=foreach: key cannot be inout 
    283282ForeachValueOfUTFConversionCannotBeInout=foreach: value of UTF conversion cannot be inout 
     
    453452DoNotUseNullWhenComparingClassTypes=Do not use null when comparing class types 
    454453UseTokenInsteadOfTokenWhenComparingWithNull=Use '%1$s' instead of '%2$s' when comparing with null 
     454VoidDoesNotHaveAnInitializer=void does not have an initializer 
  • trunk/descent.core/src/descent/internal/compiler/parser/ReturnStatement.java

    r1154 r1158  
    9797        } 
    9898 
    99         Type tret = fd.type.next
     99        Type tret = fd.type.nextOf()
    100100        if (fd.tintro != null) { 
    101             tret = fd.tintro.next
     101            tret = fd.tintro.nextOf()
    102102        } 
    103103        Type tbret = null; 
     
    169169            if (fd.returnLabel != null && tbret.ty != Tvoid) { 
    170170            } else if (fd.inferRetType) { 
    171                 if (fd.type.next != null) { 
    172                     if (!exp.type.equals(fd.type.next)) { 
     171                if (fd.type.nextOf() != null) { 
     172                    if (!exp.type.equals(fd.type.nextOf())) { 
    173173                        if (context.acceptsProblems()) { 
    174174                            context.acceptProblem(Problem.newSemanticTypeError( 
    175                                     IProblem.MismatchedFunctionReturnTypeInference, sourceExp, new String[] { exp.type.toChars(context), fd.type.next.toChars(context) })); 
     175                                    IProblem.MismatchedFunctionReturnTypeInference, sourceExp, new String[] { exp.type.toChars(context), fd.type.nextOf().toChars(context) })); 
    176176                        } 
    177177                    } 
     
    180180                    fd.type = fd.type.semantic(loc, sc, context); 
    181181                    if (fd.tintro == null) { 
    182                         tret = fd.type.next
     182                        tret = fd.type.nextOf()
    183183                        tbret = tret.toBasetype(context); 
    184184                    } 
     
    188188            } 
    189189        } else if (fd.inferRetType) { 
    190             if (fd.type.next != null) { 
    191                 if (fd.type.next.ty != Tvoid) { 
     190            if (fd.type.nextOf() != null) { 
     191                if (fd.type.nextOf().ty != Tvoid) { 
    192192                    if (context.acceptsProblems()) { 
    193193                        context.acceptProblem(Problem.newSemanticTypeError( 
    194                                 IProblem.MismatchedFunctionReturnTypeInference, this, new String[] { "void", fd.type.next.toChars(context) })); 
     194                                IProblem.MismatchedFunctionReturnTypeInference, this, new String[] { "void", fd.type.nextOf().toChars(context) })); 
    195195                    } 
    196196                } 
     
    226226                s = new ReturnStatement(loc, new IntegerExp(loc, sc.fes.cases 
    227227                        .size() + 1)); 
    228             } else if (fd.type.next.toBasetype(context) == Type.tvoid) { 
     228            } else if (fd.type.nextOf().toBasetype(context) == Type.tvoid) { 
    229229                Statement s1; 
    230230                Statement s2; 
  • trunk/descent.core/src/descent/internal/compiler/parser/SwitchStatement.java

    r1154 r1158  
    131131            // If it's not an array, cast it to one 
    132132            if (condition.type.ty != Tarray) { 
    133                 condition = condition.implicitCastTo(sc, condition.type.next 
     133                condition = condition.implicitCastTo(sc, condition.type.nextOf() 
    134134                        .arrayOf(context), context); 
    135135            } 
     
    138138            condition.checkIntegral(context); 
    139139        } 
     140        condition = condition.optimize(WANTvalue, context); 
    140141 
    141142        sc = sc.push(); 
  • trunk/descent.core/src/descent/internal/compiler/parser/TryFinallyStatement.java

    r1118 r1158  
    3636    public boolean fallOffEnd(SemanticContext context) { 
    3737        boolean result; 
    38         result = body.fallOffEnd(context)
     38        result = body != null ? body.fallOffEnd(context) : true
    3939        return result; 
    4040    } 
  • trunk/descent.core/src/descent/internal/compiler/parser/Type.java

    r1157 r1158  
    674674    } 
    675675 
    676     public Expression defaultInit(SemanticContext context) { 
     676    public final Expression defaultInit(SemanticContext context) { 
     677        return defaultInit(Loc.ZERO, context); 
     678    } 
     679     
     680    public Expression defaultInit(Loc loc, SemanticContext context) { 
    677681        return null; 
    678682    } 
     
    708712            e = getTypeInfo(null, context); 
    709713        } else if (equals(ident, Id.init)) { 
    710             e = defaultInit(context); 
     714            if (ty == Tvoid) { 
     715                if (context.acceptsProblems()) { 
     716                    context.acceptProblem(Problem.newSemanticTypeError(IProblem.VoidDoesNotHaveAnInitializer, lineNumber, start, length)); 
     717                } 
     718            } 
     719            e = defaultInit(loc, context); 
    711720        } else if (equals(ident, Id.mangleof)) { 
    712721            Assert.isNotNull(deco); 
     
    780789                } 
    781790            } else if (equals(ident, Id.init)) { 
    782                 return defaultInit(context); 
     791                Expression ex = defaultInit(e.loc, context); 
     792                return ex; 
    783793            } 
    784794        } 
     
    988998        OutBuffer buf = new OutBuffer(); 
    989999        HdrGenState hgs = new HdrGenState(); 
    990         toCBuffer2(buf, null, hgs, context); 
     1000        toCBuffer(buf, null, hgs, context); 
    9911001        return buf.toChars(); 
    9921002    } 
     
    9941004    public void toCBuffer(OutBuffer buf, IdentifierExp ident, HdrGenState hgs, 
    9951005            SemanticContext context) { 
    996         OutBuffer tbuf = new OutBuffer(); 
    997         toCBuffer2(tbuf, ident, hgs, context); 
    998         buf.write(tbuf); 
    999     } 
    1000  
    1001     public boolean hasPointers(SemanticContext context) { 
    1002         return false; 
    1003     } 
    1004  
    1005     public char[] getTypeInfoIdent(int internal) { 
    1006         // TODO semantic 
    1007         return null; 
    1008     } 
    1009  
    1010     public void toCBuffer2(OutBuffer buf, IdentifierExp ident, HdrGenState hgs, 
    1011             SemanticContext context) { 
    1012         buf.prependstring(toChars(context)); 
     1006        toCBuffer2(buf, hgs, 0, context); 
    10131007        if (ident != null) { 
    10141008            buf.writeByte(' '); 
    1015             buf.writestring(ident.ident); 
    1016         } 
    1017     } 
    1018      
    1019     public void toCBuffer2(OutBuffer buf, HdrGenState hgs, int mod, 
    1020             SemanticContext context) { 
     1009            buf.writestring(ident.toChars()); 
     1010        } 
     1011    } 
     1012