PageRenderTime 64ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/SpecSharp/Microsoft.SpecSharp/Error.cs

#
C# | 2316 lines | 2238 code | 53 blank | 25 comment | 575 complexity | fd54e9cd51da3179763b2c0416b04a49 MD5 | raw file
  1. //-----------------------------------------------------------------------------
  2. //
  3. // Copyright (C) Microsoft Corporation. All Rights Reserved.
  4. //
  5. //-----------------------------------------------------------------------------
  6. //
  7. #if CCINamespace
  8. using Microsoft.Cci;
  9. using Cci = Microsoft.Cci;
  10. using SysError = Microsoft.Cci.Error;
  11. #else
  12. using System.Compiler;
  13. using Cci = System.Compiler;
  14. using SysError = System.Compiler.Error;
  15. #endif
  16. using System;
  17. using System.Collections;
  18. using System.Text;
  19. using System.Globalization;
  20. namespace Microsoft.SpecSharp{
  21. public sealed class PragmaInfo {
  22. internal readonly int LineNum;
  23. internal readonly bool Disable;
  24. internal readonly PragmaInfo Next;
  25. internal PragmaInfo(
  26. int lineNum,
  27. bool disable,
  28. PragmaInfo next
  29. ) {
  30. this.LineNum = lineNum;
  31. this.Disable = disable;
  32. this.Next = next;
  33. }
  34. }
  35. internal enum Error {
  36. None = 0,
  37. AbstractAndExtern = 180,
  38. AbstractAndSealed = 502,
  39. AbstractAttributeClass = 653,
  40. AbstractBaseCall = 205,
  41. AbstractEventInitializer = 74,
  42. AbstractHasBody = 500,
  43. AbstractInConcreteClass = 513,
  44. AbstractNotVirtual = 503,
  45. AbstractSealedStatic = 418,
  46. AddModuleAssembly = 1542,
  47. AddOrRemoveExpected = 1055,
  48. AddRemoveMustHaveBody = 73,
  49. AliasNotFound = 432,
  50. AlwaysNull = 458,
  51. AmbigBinaryOps = 34,
  52. AmbigCall = 121,
  53. AmbigContext = 104,
  54. AmbigQM = 172,
  55. AmbiguousAttribute = 1614,
  56. AnonMethNotAllowed = 1706,
  57. AnonMethToNonDel = 1660,
  58. ArrayElementCantBeRefAny = 611,
  59. ArrayInitInBadPlace = 623,
  60. ArrayInitToNonArrayType = 622,
  61. ArrayOfStaticClass = 719,
  62. AsMustHaveReferenceType = 77,
  63. AsWithTypeVar = 413,
  64. AssgLvalueExpected = 131,
  65. AssgReadonly = 191,
  66. AssgReadonlyLocal = 1604,
  67. AssgReadonlyLocalCause = 1656,
  68. AssgReadonlyProp = 200,
  69. AssgReadonlyStatic = 198,
  70. AttributeLocationOnBadDeclaration = 657,
  71. AttributeOnBadSymbolType = 592,
  72. AttributeUsageOnNonAttributeClass = 641,
  73. AutoResGen = 1567,
  74. BadAccess = 122,
  75. BadArgCount = 1501,
  76. BadArgExtraRef = 1615,
  77. BadArgumentToNameAttribute = 633,
  78. BadArity2 = 305,
  79. BadArraySyntax = 1552,
  80. BadAttributeParam = 182,
  81. BadBaseType = 1521,
  82. BadBinaryOps = 19,
  83. BadBinaryOperatorSignature = 563,
  84. BadBoolOp = 217,
  85. BadCastInFixed = 254,
  86. BadCodePage = 2021,
  87. BadDelArgCount = 1593,
  88. BadDelegateLeave = 1632,
  89. BadDirectivePlacement = 1040,
  90. BadEmbeddedStmt = 1023,
  91. BadEmptyThrow = 156,
  92. BadEmptyThrowInFinally = 724,
  93. BadEventUsage = 70,
  94. BadEventUsageNoField = 79,
  95. BadExceptionType = 155,
  96. BadFinallyLeave = 157,
  97. BadFixedInitType = 209,
  98. BadForeachDecl = 230,
  99. BadGetEnumerator = 202,
  100. BadIncDecSignature = 559,
  101. BadIndexCount = 22,
  102. BadIteratorReturn = 1624,
  103. BadModifierLocation = 1585,
  104. BadModifiersOnNamespace = 1671,
  105. BadNamedAttributeArgument = 617,
  106. BadNamedAttributeArgumentType = 655,
  107. BadNewExpr = 1526,
  108. BadOperatorSyntax = 1553,
  109. BadOperatorSyntax2 = 1554,
  110. BadProtectedAccess = 1540,
  111. BadRefCompareLeft = 252,
  112. BadRefCompareRight = 253,
  113. BadSKknown = 118,
  114. BadSKunknown = 119,
  115. BadStackAllocExpr = 1575,
  116. BadTokenInType = 1518,
  117. BadTypeReference = 572,
  118. BadVarDecl = 1528,
  119. BadVisBaseClass = 60,
  120. BadVisBaseInterface = 61,
  121. BadVisDelegateParam = 59,
  122. BadVisDelegateReturn = 58,
  123. BadVisFieldType = 52,
  124. BadVisIndexerParam = 55,
  125. BadVisIndexerReturn = 54,
  126. BadVisOpParam = 57,
  127. BadVisOpReturn = 56,
  128. BadVisParamType = 51,
  129. BadVisPropertyType = 53,
  130. BadVisReturnType = 50,
  131. BadUnaryOp = 23,
  132. BadUnaryOperatorSignature = 562,
  133. BadUseOfMethod = 654,
  134. BadWin32Res = 1583,
  135. BaseIllegal = 175,
  136. BaseInBadContext = 1512,
  137. BadIndexLHS = 21,
  138. BaseInStaticMeth = 1511,
  139. BatchFileNotRead = 2003,
  140. BitwiseOrSignExtend = 675,
  141. CallingBaseFinalizeDeprecated = 250,
  142. CallingFinalizeDeprecated = 245,
  143. CannotMarkOverrideMethodNewOrVirtual = 113,
  144. CantCallSpecialMethod = 571,
  145. CantChangeAccessOnOverride = 507,
  146. CantChangeReturnTypeOnOverride = 508,
  147. CantConvAnonMethParams = 1661,
  148. CantConvAnonMethNoParams = 1688,
  149. CantConvAnonMethReturns = 1662,
  150. CantDeriveFromSealedClass = 509,
  151. CantInferMethTypeArgs = 411,
  152. CantOverrideAccessor = 560,
  153. CantOverrideNonEvent = 72,
  154. CantOverrideNonFunction = 505,
  155. CantOverrideNonProperty = 544,
  156. CantOverrideNonVirtual = 506,
  157. CantOverrideSealed = 239,
  158. CantOverrideSpecialMethod = 561,
  159. CaseFallThrough = 163,
  160. CheckedOverflow = 220,
  161. CircConstValue = 110,
  162. CircularBase = 146,
  163. ClassDoesntImplementInterface = 540,
  164. CloseUnimplementedInterfaceMember = 536,
  165. CLSNotOnModules = 3012,
  166. ColColWithTypeAlias = 431,
  167. ComImportWithoutUuidAttribute = 596,
  168. ConcreteMissingBody = 501,
  169. ConditionalMustReturnVoid = 578,
  170. ConditionalOnInterfaceMethod = 582,
  171. ConditionalOnOverride = 243,
  172. ConditionalOnSpecialMethod = 577,
  173. ConflictAliasAndMember = 576,
  174. ConflictingProtectionModifier = 107,
  175. ConstantExpected = 150,
  176. ConstOutOfRange = 31,
  177. ConstOutOfRangeChecked = 221,
  178. ConstraintIsStaticClass = 717,
  179. ConstructorInStaticClass = 710,
  180. ConstValueRequired = 145,
  181. ConversionNotInvolvingContainedType = 556,
  182. ConversionWithBase = 553,
  183. ConversionWithDerived = 554,
  184. ConversionWithInterface = 552,
  185. ConvertToStaticClass = 716,
  186. CryptoFailed = 1548,
  187. CStyleArray = 650,
  188. CustomAttributeError = 647,
  189. CycleInInterfaceInheritance = 529,
  190. DebugInitFile = 42,
  191. DeprecatedSymbol = 612,
  192. DeprecatedSymbolError = 613,
  193. DeprecatedSymbolStr = 618,
  194. DeprecatedSymbolStrError = 619,
  195. DeriveFromEnumOrValueType = 644,
  196. DestructorInStaticClass = 711,
  197. DllImportOnInvalidMethod = 601,
  198. DontUseInvoke = 1533,
  199. DottedTypeNameNotFoundInAgg = 426,
  200. DuplicateAccessor = 1007,
  201. DuplicateAlias = 1537,
  202. DuplicateAttribute = 579,
  203. DuplicateCaseLabel = 152,
  204. DuplicateConversionInClass = 557,
  205. DuplicateInterfaceInBaseList = 528,
  206. DuplicateLabel = 140,
  207. DuplicateModifier = 1004,
  208. DuplicateNamedAttributeArgument = 643,
  209. DuplicateNameInClass = 102,
  210. DuplicateNameInNS = 101,
  211. DuplicateParamName = 100,
  212. DuplicateResponseFile = 2014,
  213. DuplicateUsing = 105,
  214. EmptyCharConst = 1011,
  215. EmptySwitch = 1522,
  216. EndifDirectiveExpected = 1027,
  217. EndOfPPLineExpected = 1025,
  218. EndRegionDirectiveExpected = 1038,
  219. EnumeratorOverflow = 543,
  220. EOFExpected = 1022,
  221. EqualityOpWithoutEquals = 660,
  222. EqualityOpWithoutGetHashCode = 661,
  223. ErrorDirective = 1029,
  224. EventNeedsBothAccessors = 65,
  225. EventNotDelegate = 66,
  226. EventPropertyInInterface = 69,
  227. ExpectedEndTry = 1524,
  228. ExpectedIdentifier = 1001,
  229. ExpectedLeftBrace = 1514,
  230. ExpectedRightBrace = 1513,
  231. ExpectedRightParenthesis = 1026,
  232. ExpectedSemicolon = 1002,
  233. ExplicitEventFieldImpl = 71,
  234. ExplicitInterfaceImplementationInNonClassOrStruct = 541,
  235. ExplicitInterfaceImplementationNotInterface = 538,
  236. ExplicitMethodImplAccessor = 683,
  237. ExplicitParamArray = 674,
  238. ExplicitPropertyAddingAccessor = 550,
  239. ExplicitPropertyMissingAccessor = 551,
  240. ExternAfterElements = 439,
  241. ExternHasBody = 179,
  242. ExternMethodNoImplementation = 626,
  243. FeatureNYI2 = 189,
  244. FieldInitRefNonstatic = 236,
  245. FieldInitializerInStruct = 573,
  246. FixedMustInit = 210,
  247. FixedNeeded = 212,
  248. FixedNotNeeded = 213,
  249. FloatOverflow = 594,
  250. ForEachMissingMember = 1579,
  251. GenericArgIsStaticClass = 718,
  252. GenericConstraintNotSatisfied = 309,
  253. GetOrSetExpected = 1014,
  254. GlobalSingleTypeNameNotFound = 400,
  255. HasNoTypeVars = 308,
  256. HidingAbstractMethod = 533,
  257. IdentityConversion = 555,
  258. IllegalEscape = 1009,
  259. IllegalPointerType=1005,
  260. IllegalQualifiedNamespace = 134,
  261. IllegalStatement = 201,
  262. IllegalUnsafe = 227,
  263. ImportNonAssembly = 1509,
  264. InconsistantIndexerNames = 668,
  265. IdentifierExpectedKW = 1041,
  266. IndexerInStaticClass = 720,
  267. IndexerNeedsParam = 1551,
  268. IndexerWithRefParam = 631,
  269. InExpected = 1515,
  270. InstanceMemberInStaticClass = 708,
  271. InstantiatingStaticClass = 712,
  272. IntDivByZero = 20,
  273. IntegralTypeExpected = 1008,
  274. IntegralTypeValueExpected = 151,
  275. InterfaceEventInitializer = 68,
  276. InterfaceImplementedByConditional = 629,
  277. InterfaceMemberHasBody = 531,
  278. InterfaceMemberNotFound = 539,
  279. InterfacesCantContainOperators = 567,
  280. InterfacesCannotContainConstructors = 526,
  281. InterfacesCannotContainFields = 525,
  282. InterfacesCannotContainTypes = 524,
  283. InternalCompilerError = 1,
  284. IntOverflow = 1021,
  285. InvalidArglistConstructContext = 190,
  286. InvalidArray = 178,
  287. InvalidAttributeArgument = 591,
  288. InvalidAttributeLocation = 658,
  289. InvalidCall = 123,
  290. InvalidGotoCase = 153,
  291. InvalidExprTerm = 1525,
  292. InvalidLineNumber = 1576,
  293. InvalidMainSig = 28,
  294. InvalidMemberDecl = 1519,
  295. InvalidModifier = 106,
  296. InvalidAddrOp = 211,
  297. InvalidPreprocExpr = 1517,
  298. InvalidQM = 173,
  299. IsAlwaysFalse = 184,
  300. IsAlwaysTrue = 183,
  301. IsBinaryFile = 2015,
  302. LabelNotFound = 159,
  303. LiteralDoubleCast = 664,
  304. LocalDuplicate = 128,
  305. LocalShadowsOuterDeclaration = 136,
  306. LockNeedsReference = 185,
  307. LowercaseEllSuffix = 78,
  308. MainCantBeGeneric = 402,
  309. ManagedAddr = 208,
  310. MemberAlreadyExists = 111,
  311. MemberNameSameAsType = 542,
  312. MemberNeedsType = 1520,
  313. MethodArgCantBeRefAny = 1601,
  314. MethodNameExpected = 149,
  315. MethodReturnCantBeRefAny = 1564,
  316. MissingArraySize = 1586,
  317. MissingPartial = 260,
  318. MissingPPFile = 1578,
  319. MissingStructOffset = 625,
  320. MultipleEntryPoints = 17,
  321. MultipleTypeDefs = 1595,
  322. MultiTypeInDeclaration = 1044,
  323. MustHaveOpTF = 218,
  324. NamedArgumentExpected = 1016,
  325. NamespaceUnexpected = 116,
  326. NameAttributeOnOverride = 609,
  327. NameNotInContext = 103,
  328. NegativeArraySize = 248,
  329. NegativeStackAllocSize = 247,
  330. NewBoundMustBeLast = 401,
  331. NewConstraintNotSatisfied=310,
  332. NewlineInConst = 1010,
  333. NewNotRequired = 109,
  334. NewOnNamespaceElement = 1530,
  335. NewOrOverrideExpected = 114,
  336. NewRequired = 108,
  337. NewVirtualInSealed = 549,
  338. NoArglistInIndexers = 237,
  339. NoArglistInDelegates = 235,
  340. NoBreakOrCont = 139,
  341. NoConstructors = 143,
  342. NoCommentEnd = 1035,
  343. NoDefaultArgs = 241,
  344. NoEntryPoint = 5001,
  345. NoExplicitBuiltinConv = 39,
  346. NoExplicitConversion = 30,
  347. NoGetToOverride = 545,
  348. NoImplicitConversion = 29,
  349. NoImplicitConvCast = 266,
  350. NoModifiersOnAccessor = 1609,
  351. NoNewAbstract = 144,
  352. NoSetToOverride = 546,
  353. NoSources = 2008,
  354. NoSuchFile = 2005,
  355. NoSuchMember = 117,
  356. NoSuchOperator = 187,
  357. NotAnAttributeClass = 616,
  358. NotConstantExpression = 133,
  359. NoVoidHere = 1547,
  360. NoVoidParameter = 1536,
  361. NonInterfaceInInterfaceList = 527,
  362. NonObsoleteOverridingObsolete = 672,
  363. NullNotValid = 186,
  364. ObjectProhibited = 176,
  365. ObjectRequired = 120,
  366. OnlyClassesCanContainDestructors = 575,
  367. OperatorCantReturnVoid = 590,
  368. OperatorInStaticClass = 715,
  369. OperatorNeedsMatch = 216,
  370. OperatorsMustBeStatic = 558,
  371. OpTFRetType = 215,
  372. OutputWriteFailed = 16,
  373. OverloadRefOut = 663,
  374. OverrideFinalizeDeprecated = 249,
  375. OverrideNotExpected = 115,
  376. OvlBinaryOperatorExpected = 1020,
  377. OvlUnaryOperatorExpected = 1019,
  378. ParameterIsStaticClass = 721,
  379. ParamsCantBeRefOut = 1611,
  380. ParamsMustBeArray = 225,
  381. ParamsOrVarargsMustBeLast = 231,
  382. ParamUnassigned = 0177,
  383. PartialMisplaced = 267,
  384. PartialModifierConflict = 262,
  385. PartialMultipleBases = 263,
  386. PartialTypeKindConflict = 261,
  387. PointerInAsOrIs = 244,
  388. PtrIndexSingle = 196,
  389. PossibleBadNegCast = 75,
  390. PossibleMistakenNullStatement = 642,
  391. PPDefFollowsToken = 1032,
  392. PPDirectiveExpected = 1024,
  393. PrivateOrProtectedNamespaceElement = 1527,
  394. PropertyCantHaveVoidType = 547,
  395. PropertyLacksGet = 154,
  396. PropertyWithNoAccessors = 548,
  397. ProtectedInSealed = 628,
  398. ProtectedInStruct = 666,
  399. PtrExpected = 193,
  400. RecursiveConstructorCall = 516,
  401. RefConstraintNotSatisfied = 452,
  402. RefLvalueExpected = 1510,
  403. RefReadonly = 192,
  404. RefReadonlyLocal = 1605,
  405. RefReadonlyLocalCause = 1657,
  406. RefReadonlyProperty = 206,
  407. RefReadonlyStatic = 199,
  408. RefValBoundMustBeFirst = 449,
  409. RelatedErrorLocation = 10002,
  410. RelatedErrorModule = 10003,
  411. RelatedWarningLocation = 10004,
  412. RelatedWarningModule = 10005,
  413. RetNoObjectRequired = 127,
  414. RetObjectRequired = 126,
  415. ReturnExpected = 0161,
  416. ReturnNotLValue = 1612,
  417. ReturnTypeIsStaticClass = 722,
  418. SealedNonOverride = 238,
  419. SealedStaticClass = 441,
  420. SingleTypeNameNotFound = 246,
  421. SizeofUnsafe = 233,
  422. SourceFileNotRead = 2001,
  423. StackallocInCatchFinally = 255,
  424. StaticBaseClass = 709,
  425. StaticClassInterfaceImpl = 714,
  426. StaticConstant = 504,
  427. StaticConstParam = 132,
  428. StaticConstructorWithAccessModifiers = 515,
  429. StaticConstructorWithExplicitConstructorCall = 514,
  430. StaticDerivedFromNonObject = 713,
  431. StaticNotVirtual = 112,
  432. StmtNotInCase = 1523,
  433. StructLayoutCycle = 523,
  434. StructOffsetOnBadStruct = 636,
  435. StructOffsetOnBadField = 637,
  436. StructsCantContainDefaultContructor = 568,
  437. StructWithBaseConstructorCall = 522,
  438. SyntaxError = 1003,
  439. ThisInBadContext = 27,
  440. ThisInStaticMeth = 26,
  441. ThisOrBaseExpected = 1018,
  442. TooManyArgumentsToAttribute = 580,
  443. TooManyCatches = 1017,
  444. TooManyCharsInConst = 1012,
  445. TypeArgsNotAllowed = 307,
  446. TypeExpected = 1031,
  447. TypeNameNotFound = 234,
  448. TypeVarCantBeNull = 403,
  449. UnassignedThis = 171,
  450. UnexpectedDirective = 1028,
  451. UnimplementedAbstractMethod = 534,
  452. UnimplementedInterfaceMember = 535,
  453. UnknownOption = 2007,
  454. UnreachableCatch = 160,
  455. UnreachableCode = 162,
  456. UnreferencedLabel = 164,
  457. UnreferencedVar = 0168,
  458. UnreferencedVarAssg = 219,
  459. UnsafeNeeded = 214,
  460. UseDefViolation = 165,
  461. UseDefViolationField = 170, // Not enforced yet.
  462. UseDefViolationOut = 269, // partially enforced. ( only usedef, no must-assign-before-exit)
  463. UseDefViolationThis = 188, // Not enforced yet.
  464. UseSwitchInsteadOfAttribute = 1699,
  465. UsingAfterElements = 1529,
  466. VacuousIntegralComp = 652,
  467. ValueCantBeNull = 37,
  468. ValConstraintNotSatisfied = 453,
  469. VarDeclIsStaticClass = 723,
  470. VirtualPrivate = 621,
  471. VoidError = 242,
  472. VolatileAndReadonly = 678,
  473. VolatileByRef = 420,
  474. VolatileStruct = 677,
  475. WarningDirective = 1030,
  476. Win32ResourceFileNotRead = 2002,
  477. WrongNameForDestructor = 574,
  478. WrongNestedThis = 38,
  479. WrongParsForBinOp = 1534,
  480. WrongParsForUnaryOp = 1535,
  481. InvalidAssemblyName = 1700,
  482. UnifyReferenceMajMin = 1701,
  483. UnifyReferenceBldRev = 1702,
  484. DuplicateImport = 1703,
  485. DuplicateImportSimple = 1704,
  486. AssemblyMatchBadVersion = 1705,
  487. DelegateNewMethBind = 1707,
  488. FixedNeedsLvalue = 1708,
  489. EmptyFileName = 1709,
  490. DuplicateTypeParamTag = 1710,
  491. UnmatchedTypeParamTag = 1711,
  492. MissingTypeParamTag = 1712,
  493. TypeNameBuilderError = 1713,
  494. ImportBadBase = 1714,
  495. CantChangeTypeOnOverride = 1715,
  496. DoNotUseFixedBufferAttr = 1716,
  497. AssignmentToSelf = 1717,
  498. ComparisonToSelf = 1718,
  499. CantOpenWin32Res = 1719,
  500. DotOnDefault = 1720,
  501. NoMultipleInheritance = 1721,
  502. BaseClassMustBeFirst = 1722,
  503. BadXMLRefTypeVar = 1723,
  504. InvalidDefaultCharSetValue = 1724,
  505. FriendAssemblyBadArgs = 1725,
  506. FriendAssemblySNReq = 1726,
  507. BadEscapeSequence = 4000,
  508. BadHexDigit,
  509. BadDecimalDigit,
  510. UnexpectedToken,
  511. AmbiguousAssignment = 2500,
  512. CannotMarkAbstractPropertyVirtual,
  513. CannotMarkOverridePropertyNewOrVitual,
  514. ClosingTagMismatch,
  515. DebugContentModel,
  516. DummyXXXXXXXXX,
  517. DuplicateAttributeSpecified,
  518. EntityOverflow,
  519. ExpectedDoubleQuote,
  520. ExpectedElement,
  521. ExpectedExpression,
  522. ExpectedSingleQuote,
  523. FactorySignatureHasBody,
  524. ForwardReferenceToLocal,
  525. IncompleteContentExpecting,
  526. InvalidAxisSpecifier,
  527. InvalidContentExpecting,
  528. InvalidElementContent,
  529. InvalidElementContentNone,
  530. InvalidElementInEmpty,
  531. InvalidElementInTextOnly,
  532. InvalidPathExpression,
  533. InvalidTextInElement,
  534. InvalidTextInElementExpecting,
  535. InvalidWhitespaceInEmpty,
  536. LocalConstDuplicate,
  537. NoDefaultConstructor,
  538. NonDeterministic,
  539. NonDeterministicAny,
  540. NonDeterministicAssign,
  541. NoSuchAttribute,
  542. NoSuchElement,
  543. RequiredAttribute,
  544. UnknownEntity,
  545. UnescapedSingleQuote,
  546. Error,
  547. FatalError,
  548. Warning,
  549. InvalidTextWithReason, // todo: merge this in above (causes error numbers to change)
  550. CannotInstantiateTypeConverter,
  551. DuplicateMemberInLiteral,
  552. AssignmentExpressionInTuple,
  553. TupleIndexExpected,
  554. SealedTypeIsAlreadyInvariant,
  555. ValueTypeIsAlreadyInvariant,
  556. ValueTypeIsAlreadyNonNull,
  557. RedundantBox,
  558. BadBox,
  559. BadStream,
  560. RedundantStream,
  561. BadNonNull,
  562. BadNonNullOnStream,
  563. RedundantNonNull,
  564. BadNonEmptyStream,
  565. BadStreamOnNonNullStream,
  566. InvalidElementExpression,
  567. ContentModelNotSupported,
  568. QueryNotSupported,
  569. QueryNoMatch,
  570. QueryAmbiguousContextName,
  571. QueryBadAggregate,
  572. QueryBadAggregateForm,
  573. QueryBadGroupByList,
  574. QueryBadOrderList,
  575. QueryBadProjectionList,
  576. QueryBadQuantifier,
  577. QueryBadQuantifiedExpression,
  578. QueryBadDifferenceTypes,
  579. QueryBadInsertList,
  580. QueryBadIntersectionTypes,
  581. QueryBadLimit,
  582. QueryBadOrderItem,
  583. QueryBadUnionTypes,
  584. QueryBadUpdateList,
  585. QueryBadTypeFilter,
  586. QueryMissingDefaultConstructor,
  587. QueryNoContext,
  588. QueryNotScalar,
  589. QueryNotStream,
  590. QueryNotAddStream,
  591. QueryNotDeleteStream,
  592. QueryNotInsertStream,
  593. QueryNotUpdateStream,
  594. QueryProjectThroughTypeUnion,
  595. QueryIsCyclic,
  596. TypeDeclarationInsideElementGroup,
  597. ConstDeclarationInsideElementGroup,
  598. AttributeInsideElementGroup,
  599. QueryNotTransacted,
  600. QueryNotTransactable,
  601. QueryNoNestedTransaction,
  602. FieldInitializerInElementGroup,
  603. CannotYieldFromCatchClause,
  604. QueryBadLimitForNotPercent,
  605. QueryBadLimitNotLiteral,
  606. BadTupleIndex,
  607. CannotYieldFromTryBlock,
  608. BadTypeInferenceToVoid,
  609. WrongReturnTypeForIterator,
  610. AttributeInElementGroup,
  611. AmbiguousLiteralExpression,
  612. ExpectedRightBracket,
  613. NotAType,
  614. AssemblyKeyFileMissing,
  615. InvalidData,
  616. Win32IconFileNotRead,
  617. AbstractMethodTemplate,
  618. AbstractInterfaceMethod,
  619. ExpectedLeftParenthesis,
  620. CheckedExceptionNotInThrowsClause,
  621. ThrowsEnsuresOnConstructor,
  622. ExpressionIsAlreadyOfThisType,
  623. // MB -- 08/11/2004 added because they had been added to the Framework and not here
  624. CannotCoerceNullToNonNullType,
  625. CoercionToNonNullTypeMightFail,
  626. ReceiverMightBeNull,
  627. OnlyStructsAndClassesCanHaveInvariants,
  628. UpToMustBeSuperType,
  629. UpToMustBeClass,
  630. // ExpectedLeftParenthesis,
  631. MustSupportComprehension,
  632. MustSupportReductionXXXXXXXXXXXX,
  633. MustResolveToType,
  634. // CheckedExceptionNotInThrowsClause,
  635. MemberMustBePureForMethodContract,
  636. RequiresNotAllowedInOverride,
  637. ContractNotAllowedInExplicitInterfaceImplementation,
  638. CannotAddThrowsSet,
  639. CannotWeakenThrowsSet,
  640. DuplicateThrowsType,
  641. UncheckedExceptionInThrowsClause,
  642. RequiresNotAllowedInInterfaceImplementation,
  643. EnsuresInInterfaceNotInMethod,
  644. ModelMemberUseNotAllowedInContext,
  645. MemberMustBePureForInvariant,
  646. TypeMustSupportIntCoercions,
  647. CannotInjectContractFromInterface,
  648. CheckedExceptionInRequiresOtherwiseClause,
  649. ContractInheritanceRulesViolated,
  650. // ThrowsEnsuresOnConstructor,
  651. // UseDefViolation,
  652. // UseDefViolationOut, // partially enforced. ( only usedef, no must-assign-before-exit)
  653. // UseDefViolationField, // Not enforced yet.
  654. // UseDefViolationThis, // Not enforced yet.
  655. // ReturnExpected,
  656. // ParamUnassigned,
  657. // UnreferencedVar,
  658. // UnreferencedVarAssg,
  659. TemplateTypeRequiresArgs,
  660. // Nonnull related messages.
  661. ReceiverCannotBeNull,
  662. UseOfPossiblyNullPointer,
  663. UseOfNullPointer,
  664. InvalidCompilerOptionArgument,
  665. TypeOfExprMustBeGuardedClass,
  666. CannotLoadShadowedAssembly,
  667. TypeMissingInShadowedAssembly,
  668. MethodMissingInShadowedAssembly,
  669. NonNullFieldNotInitializedBeforeConstructorCall,
  670. ModifiesNotAllowedInOverride,
  671. NoSuchMethod,
  672. CouldNotLoadPluginType,
  673. CouldNotInstantiatePluginType,
  674. PluginTypeMustAlreadyBeCompiled,
  675. PluginTypeMustImplementIPlugin,
  676. PluginCrash,
  677. OtherwiseExpressionMustBeNonNull,
  678. OtherwiseExpressionMustBeType,
  679. GeneralComprehensionsNotAllowedInMethodContracts,
  680. StrictReadonlyNotReadonly,
  681. StrictReadonlyStatic,
  682. StrictReadonlyAssignment,
  683. StrictReadonlyMultipleAssignment,
  684. WritingPackedObject,
  685. ExposingExposedObject,
  686. DontKnowIfCanExposeObject,
  687. GenericWarning,
  688. AccessThroughDelayedReference,
  689. StoreIntoLessDelayedLocation,
  690. NonNullFieldNotInitializedAtEndOfDelayedConstructor,
  691. BaseNotInitialized,
  692. BaseMultipleInitialization,
  693. ActualCannotBeDelayed,
  694. DelayedReferenceByReference,
  695. DelayedRefParameter,
  696. DelayedStructConstructor,
  697. ActualMustBeDelayed,
  698. ReceiverCannotBeDelayed,
  699. ReceiverMustBeDelayed,
  700. NonNullFieldNotInitializedByDefaultConstructor,
  701. AccessThroughDelayedThisInConstructor,
  702. MustOverrideMethodMissing,
  703. MustOverrideMethodNotMarkedAsMustOverride,
  704. MethodMarkedMustOverrideMustBeVirtual,
  705. MethodInheritingPurityMustBeMarked,
  706. StaticMethodCannotBeMarkedWithAttribute,
  707. OverrideMethodNotMarkedWithAttribute,
  708. MutableHasImmutableBase,
  709. ImmutableHasMutableBase,
  710. ImmutableIfaceImplementedByMutableClass,
  711. MutableIfaceExtendsImmutableIface,
  712. RepOrPeerFieldImmutable,
  713. ImmutableClassHasPeerField,
  714. ImmutableConstructorBaseNotLast,
  715. ImmutableConstructorLastStmtMustBeBaseOrThis,
  716. BadUseOfOwnedOnMethod,
  717. UseOfRepOnVirtualMethod,
  718. NotAdmissibleTargetNotAdmissibile,
  719. NotAdmissibleTargetNotThis,
  720. NotAdmissibleFirstNonRepChainNotEnded,
  721. NotAdmissibleNonRepOrPeerChainNotEnded,
  722. NotAdmissibleBoundCollArrayNotRep,
  723. NotAdmissibleBoundCollArrayNotOwned,
  724. NotAdmissibleStaticNonStateIndependent,
  725. NotAdmissibleFirstAccessOnNonAdditiveField,
  726. NotAdmissibleFirstAccessOnFieldDeclaredInSubtype,
  727. StateIndependentSpecNotAdmissible,
  728. ConfinedSpecContainsPureCall,
  729. StateIndependentSpecContainsPureOrConfinedCall,
  730. IsNewExprInPureEnsures, // deprecated
  731. DisallowedInConfinedOrStIndepSpec,
  732. NoReferenceComparisonAttrNotCopied,
  733. NonPureMarkedNoReferenceComparison,
  734. ViolatedNoReferenceComparison,
  735. ResultNotNewlyAllocatedAttrNotCopied,
  736. NonPureMarkedResultNotNewlyAllocated,
  737. NonRefTypeMethodMarkedResultNotNewlyAllocated,
  738. MethodShouldBeMarkedNoReferenceComparison,
  739. BothOperandsOfReferenceComparisonMightBeNewlyAllocated,
  740. AttributeAllowedOnlyOnReferenceTypeParameters,
  741. ConflictingAttributes,
  742. VirtualMethodWithNonVirtualMethodAttribute,
  743. AttributeNotAllowedOnInterfaceMethods,
  744. AttributeNotAllowedOnPrivateMember,
  745. AttributeNotAllowedOnConstructor,
  746. AttributeNotAllowedOnlyOnInParameters,
  747. UnnecessaryNonNullCoercion,
  748. SideEffectsNotAllowedInContracts,
  749. ShouldCommit,
  750. ParameterNoDelayAttribute,
  751. ParameterExtraDelayAttribute,
  752. ThisParameterNoDelayAttribute,
  753. ThisParameterExtraDelayAttribute,
  754. ReturnOfDelayedValue,
  755. ShouldCommitOnAllPaths,
  756. UnboxDelayedValue,
  757. ThrowsDelayedValue,
  758. CannotUseDelayedPointer,
  759. CannotUseDelayedTypedRef,
  760. //ModelField errors
  761. SatisfiesInInterface,
  762. AssignToModelfield,
  763. InternalFieldInOverridableModelfield,
  764. GenericError,
  765. InvalidModifiesClause,
  766. MemberCannotBeAnnotatedAsPure,
  767. CannotMatchArglist,
  768. PureMethodWithOutParamUsedInContract,
  769. PureMethodCannotHaveRefParam,
  770. ReadsWithoutPure,
  771. InconsistentPurityAttributes,
  772. PureOwnedNotAllowed,
  773. PureMethodCannotHaveModifies,
  774. }
  775. internal class SpecSharpErrorNode : ErrorNode{
  776. private static WeakReference resourceManager = new WeakReference(null);
  777. internal static System.Resources.ResourceManager ResourceManager {
  778. get {
  779. System.Resources.ResourceManager rMgr = (System.Resources.ResourceManager)resourceManager.Target;
  780. if (rMgr == null) {
  781. SpecSharpErrorNode.resourceManager =
  782. new WeakReference(rMgr = new System.Resources.ResourceManager("Microsoft.SpecSharp.ErrorMessages", typeof(SpecSharpErrorNode).Module.Assembly));
  783. }
  784. return rMgr;
  785. }
  786. }
  787. internal SpecSharpErrorNode(Error code, params string[] messageParameters)
  788. : base((int)code, messageParameters){
  789. }
  790. public override string GetErrorNumber(){
  791. return "CS"+this.Code.ToString("0000");
  792. }
  793. public override string GetMessage(System.Globalization.CultureInfo culture){
  794. return this.GetMessage(((Error)this.Code).ToString(), SpecSharpErrorNode.ResourceManager, culture);
  795. }
  796. public override int Severity{
  797. get{
  798. switch ((Error)this.Code){
  799. case Error.AlwaysNull: return 2;
  800. case Error.AttributeLocationOnBadDeclaration: return 1;
  801. case Error.BadBox: return 1;
  802. case Error.BadNonEmptyStream: return 1;
  803. case Error.BadNonNull: return 1;
  804. case Error.BadNonNullOnStream: return 1;
  805. case Error.BadRefCompareLeft: return 2;
  806. case Error.BadRefCompareRight: return 2;
  807. case Error.BadStream: return 1;
  808. case Error.BadStreamOnNonNullStream: return 1;
  809. case Error.BitwiseOrSignExtend: return 3;
  810. case Error.CLSNotOnModules: return 1;
  811. case Error.DeprecatedSymbol: return 2;
  812. case Error.DeprecatedSymbolStr: return 2;
  813. case Error.DuplicateUsing: return 3;
  814. case Error.EmptySwitch: return 1;
  815. case Error.EqualityOpWithoutEquals: return 3;
  816. case Error.EqualityOpWithoutGetHashCode: return 3;
  817. case Error.ExpressionIsAlreadyOfThisType: return 4;
  818. case Error.ExternMethodNoImplementation: return 1;
  819. case Error.InvalidAttributeLocation: return 1;
  820. case Error.InvalidMainSig: return 4;
  821. case Error.IsAlwaysFalse: return 1;
  822. case Error.IsAlwaysTrue: return 1;
  823. case Error.LowercaseEllSuffix: return 4;
  824. case Error.MainCantBeGeneric: return 4;
  825. case Error.MultipleTypeDefs: return 1;
  826. case Error.NewOrOverrideExpected: return 2;
  827. case Error.NewNotRequired: return 4;
  828. case Error.NewRequired: return 1;
  829. case Error.NonObsoleteOverridingObsolete: return 1;
  830. case Error.PossibleMistakenNullStatement: return 3;
  831. case Error.ProtectedInSealed: return 4;
  832. case Error.RedundantBox: return 1;
  833. case Error.RedundantNonNull: return 1;
  834. case Error.RedundantStream: return 1;
  835. case Error.RelatedErrorLocation: return -1;
  836. case Error.RelatedErrorModule: return -1;
  837. case Error.RelatedWarningLocation: return -1;
  838. case Error.RelatedWarningModule: return -1;
  839. case Error.SealedTypeIsAlreadyInvariant: return 1;
  840. case Error.UnknownEntity: return 2;
  841. case Error.UnreachableCode: return 2;
  842. case Error.UnreferencedLabel: return 2;
  843. case Error.UnreferencedVarAssg: return 2;
  844. case Error.UseDefViolationField: return 1;
  845. case Error.UseSwitchInsteadOfAttribute: return 1;
  846. case Error.VacuousIntegralComp: return 2;
  847. case Error.ValueTypeIsAlreadyInvariant: return 1;
  848. case Error.ValueTypeIsAlreadyNonNull: return 1;
  849. case Error.VolatileByRef: return 1;
  850. case Error.WarningDirective: return 2;
  851. case Error.CoercionToNonNullTypeMightFail: return 2;
  852. case Error.CannotCoerceNullToNonNullType: return 1;
  853. case Error.UnnecessaryNonNullCoercion: return 2;
  854. case Error.ReceiverMightBeNull: return 2;
  855. case Error.ReceiverCannotBeNull: return 1;
  856. case Error.UseOfNullPointer: return 1;
  857. case Error.UseOfPossiblyNullPointer: return 2;
  858. case Error.CannotLoadShadowedAssembly: return 2;
  859. case Error.TypeMissingInShadowedAssembly: return 2;
  860. case Error.MethodMissingInShadowedAssembly: return 2;
  861. case Error.NonNullFieldNotInitializedBeforeConstructorCall: return 2;
  862. case Error.AccessThroughDelayedReference: return 2;
  863. case Error.StoreIntoLessDelayedLocation : return 2;
  864. case Error.NonNullFieldNotInitializedAtEndOfDelayedConstructor : return 2;
  865. case Error.BaseNotInitialized : return 2;
  866. case Error.BaseMultipleInitialization : return 2;
  867. case Error.ActualCannotBeDelayed : return 2;
  868. case Error.DelayedReferenceByReference : return 2;
  869. case Error.DelayedRefParameter : return 2;
  870. case Error.DelayedStructConstructor : return 2;
  871. case Error.ActualMustBeDelayed : return 2;
  872. case Error.ReceiverCannotBeDelayed : return 2;
  873. case Error.ReceiverMustBeDelayed : return 2;
  874. case Error.NonNullFieldNotInitializedByDefaultConstructor : return 2;
  875. case Error.AccessThroughDelayedThisInConstructor : return 2;
  876. case Error.ShouldCommit: return 2;
  877. case Error.ShouldCommitOnAllPaths: return 2;
  878. case Error.UnboxDelayedValue: return 2;
  879. case Error.ThrowsDelayedValue: return 2;
  880. case Error.CannotUseDelayedPointer: return 2;
  881. case Error.CannotUseDelayedTypedRef: return 2;
  882. case Error.GenericWarning: return 4;
  883. }
  884. return 0;
  885. }
  886. }
  887. }
  888. public class ErrorHandler : Cci.ErrorHandler{
  889. internal Parameter currentParameter;
  890. public TypeNode currentType;
  891. public bool refOrOutAddress;
  892. public ErrorHandler(ErrorNodeList errors)
  893. : base(errors){
  894. }
  895. internal static Error MapError(SysError error){
  896. switch(error){
  897. case SysError.AbstractAndExtern: return Error.AbstractAndExtern;
  898. case SysError.AbstractAttributeClass: return Error.AbstractAttributeClass;
  899. case SysError.AbstractBaseCall: return Error.AbstractBaseCall;
  900. case SysError.AbstractEventInitializer: return Error.AbstractEventInitializer;
  901. case SysError.AbstractHasBody: return Error.AbstractHasBody;
  902. case SysError.AbstractInterfaceMethod: return Error.AbstractInterfaceMethod;
  903. case SysError.AbstractMethodInConcreteType: return Error.AbstractInConcreteClass;
  904. case SysError.AbstractMethodTemplate: return Error.AbstractMethodTemplate;
  905. case SysError.AbstractSealedArrayElementType: return Error.ArrayOfStaticClass;
  906. case SysError.AbstractSealedBaseClass: return Error.StaticBaseClass;
  907. case SysError.AbstractSealedClassInterfaceImpl: return Error.StaticClassInterfaceImpl;
  908. case SysError.AbstractSealedDerivedFromNonObject: return Error.StaticDerivedFromNonObject;
  909. case SysError.AbstractSealedFieldType: return Error.VarDeclIsStaticClass;
  910. case SysError.AbstractSealedLocalType: return Error.VarDeclIsStaticClass;
  911. case SysError.AbstractSealedParameterType: return Error.ParameterIsStaticClass;
  912. case SysError.AbstractSealedReturnType: return Error.ReturnTypeIsStaticClass;
  913. case SysError.AccessThroughDelayedReference: return Error.AccessThroughDelayedReference;
  914. case SysError.AccessThroughDelayedThisInConstructor: return Error.AccessThroughDelayedThisInConstructor;
  915. case SysError.AccessToNonStaticOuterMember: return Error.WrongNestedThis;
  916. case SysError.ActualCannotBeDelayed: return Error.ActualCannotBeDelayed;
  917. case SysError.ActualMustBeDelayed: return Error.ActualMustBeDelayed;
  918. case SysError.AliasNotFound: return Error.AliasNotFound;
  919. case SysError.AlwaysNull: return Error.AlwaysNull;
  920. case SysError.AmbiguousBinaryOperation: return Error.AmbigBinaryOps;
  921. case SysError.AmbiguousCall: return Error.AmbigCall;
  922. case SysError.AmbiguousConditional: return Error.AmbigQM;
  923. case SysError.AmbiguousTypeReference: return Error.AmbigContext;
  924. case SysError.AnonymousNestedFunctionNotAllowed: return Error.AnonMethNotAllowed;
  925. case SysError.ArrayElementCannotBeTypedReference: return Error.ArrayElementCantBeRefAny;
  926. case SysError.ArrayInitializerLengthMismatch: return Error.InvalidArray;
  927. case SysError.AsMustHaveReferenceType: return Error.AsMustHaveReferenceType;
  928. case SysError.AssemblyCouldNotBeSigned: return Error.CryptoFailed;
  929. case SysError.AssemblyKeyFileMissing: return Error.AssemblyKeyFileMissing;
  930. case SysError.AssignmentHasNoEffect: return Error.AssgLvalueExpected;
  931. case SysError.AssignmentToBase: return Error.BaseIllegal;
  932. case SysError.AssignmentToEvent: return Error.BadEventUsageNoField;
  933. case SysError.AssignmentToFixedVariable: return Error.AssgReadonlyLocalCause;
  934. case SysError.AssignmentToLiteral: return Error.AssgLvalueExpected;
  935. case SysError.AssignmentToReadOnlyInstanceField: return Error.AssgReadonly;
  936. case SysError.AssignmentToReadOnlyLocal: return Error.AssgReadonlyLocal;
  937. case SysError.AssignmentToReadOnlyStaticField: return Error.AssgReadonlyStatic;
  938. case SysError.AssignmentToType: return Error.BadSKknown;
  939. case SysError.AsWithTypeVar: return Error.AsWithTypeVar;
  940. case SysError.AttributeOnBadTarget: return Error.AttributeOnBadSymbolType;
  941. case SysError.AttributeHasBadTarget: return Error.AttributeLocationOnBadDeclaration;
  942. case SysError.AttributeUsageOnNonAttributeClass: return Error.AttributeUsageOnNonAttributeClass;
  943. case SysError.AutoWin32ResGenFailed: return Error.AutoResGen;
  944. case SysError.BadAttributeParam: return Error.BadAttributeParam;
  945. case SysError.BadBinaryOperatorSignature: return Error.BadBinaryOperatorSignature;
  946. case SysError.BadBinaryOps: return Error.BadBinaryOps;
  947. case SysError.BadBox: return Error.BadBox;
  948. case SysError.BadBoolOp: return Error.BadBoolOp;
  949. case SysError.BadCallToEventHandler: return Error.BadEventUsageNoField;
  950. case SysError.BadExplicitCoercionInFixed: return Error.BadCastInFixed;
  951. case SysError.BadEmptyThrow: return Error.BadEmptyThrow;
  952. case SysError.BadExceptionType: return Error.BadExceptionType;
  953. case SysError.BadExitOrContinue: return Error.NoBreakOrCont;
  954. case SysError.BadFinallyLeave: return Error.BadFinallyLeave;
  955. case SysError.BadFixedVariableType: return Error.BadFixedInitType;
  956. case SysError.BadForeachCollection: return Error.ForEachMissingMember;
  957. case SysError.BadGetEnumerator: return Error.BadGetEnumerator;
  958. case SysError.BadIncDecSignature: return Error.BadIncDecSignature;
  959. case SysError.BadNamedAttributeArgument: return Error.BadNamedAttributeArgument;
  960. case SysError.BadNamedAttributeArgumentType: return Error.BadNamedAttributeArgumentType;
  961. case SysError.BadNestedTypeReference: return Error.BadTypeReference;
  962. case SysError.BadNonEmptyStream: return Error.BadNonEmptyStream;
  963. case SysError.BadNonNull: return Error.BadNonNull;
  964. case SysError.BadNonNullOnStream: return Error.BadNonNullOnStream;
  965. case SysError.BadRefCompareLeft: return Error.BadRefCompareLeft;
  966. case SysError.BadRefCompareRight: return Error.BadRefCompareRight;
  967. case SysError.BadStream: return Error.BadStream;
  968. case SysError.BadStreamOnNonNullStream: return Error.BadStreamOnNonNullStream;
  969. case SysError.BadTupleIndex : return Error.BadTupleIndex;
  970. case SysError.BadUnaryOp: return Error.BadUnaryOp;
  971. case SysError.BadUnaryOperatorSignature: return Error.BadUnaryOperatorSignature;
  972. case SysError.BadUseOfEvent: return Error.BadEventUsageNoField;
  973. case SysError.BadUseOfMethod: return Error.BadUseOfMethod;
  974. case SysError.BaseClassLessAccessible: return Error.BadVisBaseClass;
  975. case SysError.BaseInBadContext: return Error.BaseInBadContext;
  976. case SysError.BaseInStaticCode: return Error.BaseInStaticMeth;
  977. case SysError.BaseInterfaceLessAccessible: return Error.BadVisBaseInterface;
  978. case SysError.BaseMultipleInitialization: return Error.BaseMultipleInitialization;
  979. case SysError.BaseNotInitialized: return Error.BaseNotInitialized;
  980. case SysError.BatchFileNotRead: return Error.BatchFileNotRead;
  981. case SysError.BitwiseOrSignExtend: return Error.BitwiseOrSignExtend;
  982. case SysError.CannotCallSpecialMethod: return Error.CantCallSpecialMethod;
  983. case SysError.CannotCoerceNullToValueType: return Error.ValueCantBeNull;
  984. case SysError.CannotDeferenceNonPointerType: return Error.PtrExpected;
  985. case SysError.CannotDeriveFromSealedType: return Error.CantDeriveFromSealedClass;
  986. case SysError.CannotDeriveFromSpecialType: return Error.DeriveFromEnumOrValueType;
  987. case SysError.CannotExplicitlyImplementAccessor: return Error.ExplicitMethodImplAccessor;
  988. case SysError.CannotInferMethTypeArgs: return Error.CantInferMethTypeArgs;
  989. case SysError.CannotMatchArglist: return Error.CannotMatchArglist;
  990. case SysError.CannotOverrideAccessor: return Error.CantOverrideAccessor;
  991. case SysError.CannotOverrideFinal: return Error.CantOverrideSealed;
  992. case SysError.CannotOverrideNonEvent: return Error.CantOverrideNonEvent;
  993. case SysError.CannotOverrideNonVirtual: return Error.CantOverrideNonVirtual;
  994. case SysError.CannotOverrideSpecialMethod: return Error.CantOverrideSpecialMethod;
  995. case SysError.CannotReturnTypedReference: return Error.MethodReturnCantBeRefAny;
  996. case SysError.CannotReturnValue: return Error.RetNoObjectRequired;
  997. case SysError.CannotYieldFromCatchClause: return Error.CannotYieldFromCatchClause;
  998. case SysError.CannotYieldFromTryBlock: return Error.CannotYieldFromTryBlock;
  999. case SysError.CaseFallThrough: return Error.CaseFallThrough;
  1000. case SysError.CheckedExceptionNotInThrowsClause: return Error.CheckedExceptionNotInThrowsClause;
  1001. case SysError.CircularBase: return Error.CircularBase;
  1002. case SysError.CircularConstantDefinition: return Error.CircConstValue;
  1003. case SysError.ClashWithLocalConstant: return Error.LocalConstDuplicate;
  1004. case SysError.ClashWithLocalVariable: return Error.LocalDuplicate;
  1005. case SysError.CloseUnimplementedInterfaceMember: return Error.CloseUnimplementedInterfaceMember;
  1006. case SysError.CLSNotOnModules: return Error.CLSNotOnModules;
  1007. case SysError.ComImportWithoutGuidAttribute: return Error.ComImportWithoutUuidAttribute;
  1008. case SysError.ConcreteMissingBody: return Error.ConcreteMissingBody;
  1009. case SysError.ConditionalMustReturnVoid: return Error.ConditionalMustReturnVoid;
  1010. case SysError.ConditionalOnInterfaceMethod: return Error.ConditionalOnInterfaceMethod;
  1011. case SysError.ConditionalOnOverride: return Error.ConditionalOnOverride;
  1012. case SysError.ConditionalOnSpecialMethod: return Error.ConditionalOnSpecialMethod;
  1013. case SysError.ConflictBetweenAliasAndType: return Error.ConflictAliasAndMember;
  1014. case SysError.ConstantExpected: return Error.ConstantExpected;
  1015. case SysError.ConstraintIsAbstractSealedClass: return Error.ConstraintIsStaticClass;
  1016. case SysError.ConstructsAbstractClass: return Error.NoNewAbstract;
  1017. case SysError.ConstructsAbstractSealedClass: return Error.InstantiatingStaticClass;
  1018. case SysError.ConstructorInAbstractSealedClass: return Error.ConstructorInStaticClass;
  1019. case SysError.ContainingTypeDoesNotImplement: return Error.ClassDoesntImplementInterface;
  1020. case SysError.ConversionNotInvolvingContainedType: return Error.ConversionNotInvolvingContainedType;
  1021. case SysError.ConversionWithBase: return Error.ConversionWithBase;
  1022. case SysError.ConversionWithDerived: return Error.ConversionWithDerived;
  1023. case SysError.ConversionWithInterface: return Error.ConversionWithInterface;
  1024. case SysError.CTOverflow: return Error.CheckedOverflow;
  1025. case SysError.CustomAttributeError: return Error.CustomAttributeError;
  1026. case SysError.CycleInInterfaceInheritance: return Error.CycleInInterfaceInheritance;
  1027. case SysError.DestructorInAbstractSealedClass: return Error.DestructorInStaticClass;
  1028. case SysError.DefaultContructorConstraintNotSatisfied: return Error.NewConstraintNotSatisfied;
  1029. case SysError.DelayedReferenceByReference: return Error.DelayedReferenceByReference;
  1030. case SysError.DelayedRefParameter: return Error.DelayedRefParameter;
  1031. case SysError.DelayedStructConstructor: return Error.DelayedStructConstructor;
  1032. case SysError.DllImportOnInvalidMethod: return Error.DllImportOnInvalidMethod;
  1033. case SysError.DuplicateAliasDefinition: return Error.DuplicateAlias;
  1034. case SysError.DuplicateAssemblyReference: return Error.None;
  1035. case SysError.DuplicateAttribute: return Error.DuplicateAttribute;
  1036. case SysError.DuplicateCaseLabel: return Error.DuplicateCaseLabel;
  1037. case SysError.DuplicateConversion: return Error.DuplicateConversionInClass;
  1038. case SysError.DuplicateIndexer: return Error.MemberAlreadyExists;
  1039. case SysError.DuplicateInterfaceInBaseList: return Error.DuplicateInterfaceInBaseList;
  1040. case SysError.DuplicateMethod: return Error.MemberAlreadyExists;
  1041. case SysError.DuplicateModuleReference: return Error.None;
  1042. case SysError.DuplicateNamedAttributeArgument: return Error.DuplicateNamedAttributeArgument;
  1043. case SysError.DuplicateParameterName: return Error.DuplicateParamName;
  1044. case SysError.DuplicateResponseFile: return Error.DuplicateResponseFile;
  1045. case SysError.DuplicateType: return Error.DuplicateNameInNS;
  1046. case SysError.DuplicateTypeMember: return Error.DuplicateNameInClass;
  1047. case SysError.DuplicateUsedNamespace: return Error.DuplicateUsing;
  1048. case SysError.EnumerationValueOutOfRange: return Error.EnumeratorOverflow;
  1049. case SysError.EventNotDelegate: return Error.EventNotDelegate;
  1050. case SysError.EqualityOpWithoutEquals: return Error.EqualityOpWithoutEquals;
  1051. case SysError.EqualityOpWithoutGetHashCode: return Error.EqualityOpWithoutGetHashCode;
  1052. case SysError.Error: return Error.Error;
  1053. case SysError.ExplicitDefaultConstructorForValueType: return Error.StructsCantContainDefaultContructor;
  1054. case SysError.ExplicitlyImplementedTypeNotInterface: return Error.ExplicitInterfaceImplementationNotInterface;
  1055. case SysError.ExplicitPropertyAddingAccessor: return Error.ExplicitPropertyAddingAccessor;
  1056. case SysError.ExplicitPropertyMissingAccessor: return Error.ExplicitPropertyMissingAccessor;
  1057. case SysError.ExpressionIsAlreadyOfThisType: return Error.ExpressionIsAlreadyOfThisType;
  1058. case SysError.FamilyInSealed: return Error.ProtectedInSealed;
  1059. case SysError.FamilyInStruct: return Error.ProtectedInStruct;
  1060. case SysError.FatalError: return Error.FatalError;
  1061. case SysError.FieldOffsetNotAllowed: return Error.StructOffsetOnBadStruct;
  1062. case SysError.FieldOffsetNotAllowedOnStaticField: return Error.StructOffsetOnBadField;
  1063. case SysError.FieldTypeLessAccessibleThanField: return Error.BadVisFieldType;
  1064. case SysError.FixedMustInit: return Error.FixedMustInit;
  1065. case SysError.FixedNeeded: return Error.FixedNeeded;
  1066. case SysError.FixedNotNeeded: return Error.FixedNotNeeded;
  1067. case SysError.GeneralComprehensionsNotAllowedInMethodContracts: return Error.GeneralComprehensionsNotAllowedInMethodContracts;
  1068. case SysError.GenericWarning: return Error.GenericWarning;
  1069. case SysError.GlobalSingleTypeNameNotFound: return Error.GlobalSingleTypeNameNotFound;
  1070. case SysError.GotoLeavesNestedMethod: return Error.BadDelegateLeave;
  1071. case SysError.HidesAbstractMethod: return Error.HidingAbstractMethod;
  1072. case SysError.IntegerDivisionByConstantZero: return Error.IntDivByZero;
  1073. case SysError.IdentifierNotFound: return Error.NameNotInContext;
  1074. case SysError.IdentityConversion: return Error.IdentityConversion;
  1075. case SysError.IllegalPointerType: return Error.IllegalPointerType;
  1076. case SysError.ImpossibleCast: return Error.NoExplicitBuiltinConv;
  1077. case SysError.InaccessibleEventBackingField: return Error.BadEventUsage;
  1078. case SysError.InconsistantIndexerNames: return Error.InconsistantIndexerNames;
  1079. case SysError.IndexerInAbstractSealedClass: return Error.IndexerInStaticClass;
  1080. case SysError.IndexerNameAttributeOnOverride: return Error.NameAttributeOnOverride;
  1081. case SysError.IndexerNameNotIdentifier: return Error.BadArgumentToNameAttribute;
  1082. case SysError.InstanceFieldInitializerInStruct: return Error.FieldInitializerInStruct;
  1083. case SysError.InstanceMemberInAbstractSealedClass: return Error.InstanceMemberInStaticClass;
  1084. case SysError.IntegralTypeValueExpected: return Error.IntegralTypeValueExpected;
  1085. case SysError.InterfaceHasConstructor: return Error.InterfacesCannotContainConstructors;
  1086. case SysError.InterfaceHasField: return Error.InterfacesCannotContainFields;
  1087. case SysError.InterfaceImplementedByConditional: return Error.InterfaceImplementedByConditional;
  1088. case SysError.InterfaceMemberHasBody: return Error.InterfaceMemberHasBody;
  1089. case SysError.InterfaceMemberNotFound: return Error.InterfaceMemberNotFound;
  1090. case SysError.InternalCompilerError: return Error.InternalCompilerError;
  1091. case SysError.InvalidAddressOf: return Error.InvalidAddrOp;
  1092. case SysError.InvalidAttributeArgument: return Error.InvalidAttributeArgument;
  1093. case SysError.InvalidCodePage: return Error.BadCodePage;
  1094. case SysError.InvalidCompilerOption: return Error.UnknownOption;
  1095. case SysError.InvalidCompilerOptionArgument: return Error.InvalidCompilerOptionArgument;
  1096. case SysError.InvalidConditional: return Error.InvalidQM;
  1097. case SysError.InvalidData: return Error.InvalidData;
  1098. case SysError.InvalidDebugInformationFile: return Error.DebugInitFile;
  1099. case SysError.InvalidGotoCase: return Error.InvalidGotoCase;
  1100. case SysError.InvalidMainMethodSignature: return Error.InvalidMainSig;
  1101. case SysError.InvalidOutputFile: return Error.OutputWriteFailed;
  1102. case SysError.InvalidWin32ResourceFileContent: return Error.BadWin32Res;
  1103. case SysError.IsAlwaysOfType: return Error.IsAlwaysTrue;
  1104. case SysError.IsBinaryFile: return Error.IsBinaryFile;
  1105. case SysError.IsNeverOfType: return Error.IsAlwaysFalse;
  1106. case SysError.LabelIdentiferAlreadyInUse: return Error.DuplicateLabel;
  1107. case SysError.LabelNotFound: return Error.LabelNotFound;
  1108. case SysError.LockNeedsReference: return Error.LockNeedsReference;
  1109. case SysError.MainCantBeGeneric: return Error.MainCantBeGeneric;
  1110. case SysError.ManagedAddr: return Error.ManagedAddr;
  1111. case SysError.MemberDoesNotHideBaseClassMember: return Error.NewNotRequired;
  1112. case SysError.MemberHidesBaseClassMember: return Error.NewRequired;
  1113. case SysError.MemberHidesBaseClassOverridableMember: return Error.NewOrOverrideExpected;
  1114. case SysError.MemberNotVisible: return Error.BadAccess;
  1115. case SysError.MethodNameExpected: return Error.MethodNameExpected;
  1116. case SysError.MissingStructOffset: return Error.MissingStructOffset;
  1117. case SysError.MultipleMainMethods: return Error.MultipleEntryPoints;
  1118. case SysError.MultipleTypeImport: return Error.MultipleTypeDefs;
  1119. case SysError.MustHaveOpTF: return Error.MustHaveOpTF;
  1120. case SysError.NegativeArraySize: return Error.NegativeArraySize;
  1121. case SysError.NegativeStackAllocSize: return Error.NegativeStackAllocSize;
  1122. case SysError.NestedFunctionDelegateParameterMismatch: return Error.CantConvAnonMethParams;
  1123. case SysError.NestedFunctionDelegateParameterMismatchBecauseOfOutParameter: return Error.CantConvAnonMethNoParams;
  1124. case SysError.NestedFunctionDelegateReturnTypeMismatch: return Error.CantConvAnonMethReturns;
  1125. case SysError.NoExplicitCoercion: return Error.NoExplicitConversion;
  1126. case SysError.NoImplicitCoercion: return Error.NoImplicitConversion;
  1127. case SysError.NoImplicitCoercionFromConstant: return Error.ConstOutOfRange;
  1128. case SysError.NoGetter: return Error.PropertyLacksGet;
  1129. case SysError.NoGetterToOverride: return Error.NoGetToOverride;
  1130. case SysError.NoMainMethod: return Error.NoEntryPoint;
  1131. case SysError.NoMethodMatchesDelegate: return Error.InvalidCall;
  1132. case SysError.NoMethodToOverride: return Error.CantOverrideNonFunction;
  1133. case SysError.NonNullFieldNotInitializedBeforeConstructorCall: return Error.NonNullFieldNotInitializedBeforeConstructorCall;
  1134. case SysError.NonNullFieldNotInitializedAtEndOfDelayedConstructor: return Error.NonNullFieldNotInitializedAtEndOfDelayedConstructor;
  1135. case SysError.NonNullFieldNotInitializedByDefaultConstructor: return Error.NonNullFieldNotInitializedByDefaultConstructor;
  1136. case SysError.NoOverloadWithMatchingArgumentCount: return Error.BadArgCount;
  1137. case SysError.NoPropertyToOverride: return Error.CantOverrideNonProperty;
  1138. case SysError.NoSetter: return Error.AssgReadonlyProp;
  1139. case SysError.NoSetterToOverride: return Error.NoSetToOverride;
  1140. case SysError.NoSourceFiles: return Error.NoSources;
  1141. case SysError.NoSuchConstructor: return Error.NoConstructors;
  1142. case SysError.NoSuchFile: return Error.NoSuchFile;
  1143. case SysError.NoSuchLabel: return Error.LabelNotFound;
  1144. case SysError.NoSuchMember: return Error.NoSuchMember;
  1145. case SysError.NoSuchMethod: return Error.NoSuchMethod;
  1146. case SysError.NoSuchNestedType: return Error.DottedTypeNameNotFoundInAgg;
  1147. case SysError.NoSuchOperator: return Error.NoSuchOperator;
  1148. case SysError.NoSuchQualifiedType: return Error.TypeNameNotFound;
  1149. case SysError.NoSuchType: return Error.SingleTypeNameNotFound;
  1150. case SysError.NonObsoleteOverridingObsolete: return Error.NonObsoleteOverridingObsolete;
  1151. case SysError.NotAnAssembly: return Error.ImportNonAssembly;
  1152. case SysError.NotAnAttribute: return Error.NotAnAttributeClass;
  1153. case SysError.NotAnInterface: return Error.NonInterfaceInInterfaceList;
  1154. case SysError.NotAModule: return Error.AddModuleAssembly;
  1155. case SysError.NotAssignable: return Error.AssgLvalueExpected;
  1156. case SysError.NotATemplateType : return Error.HasNoTypeVars;
  1157. case SysError.NotAType: return Error.NotAType;
  1158. case SysError.NotConstantExpression: return Error.NotConstantExpression;
  1159. case SysError.NotIndexable: return Error.BadIndexLHS;
  1160. case SysError.NotVisibleViaBaseType: return Error.BadProtectedAccess;
  1161. case SysError.NotYetImplemented: return Error.FeatureNYI2;
  1162. case SysError.NullNotAllowed: return Error.NullNotValid;
  1163. case SysError.ObjectRequired: return Error.ObjectRequired;
  1164. case SysError.ObsoleteError: return Error.DeprecatedSymbolError;
  1165. case SysError.ObsoleteErrorWithMessage: return Error.DeprecatedSymbolStrError;
  1166. case SysError.ObsoleteWarning: return Error.DeprecatedSymbol;
  1167. case SysError.ObsoleteWarningWithMessage: return Error.DeprecatedSymbolStr;
  1168. case SysError.OperatorInAbstractSealedClass: return Error.OperatorInStaticClass;
  1169. case SysError.OperatorNeedsMatch: return Error.OperatorNeedsMatch;
  1170. case SysError.OpTrueFalseMustResultInBool: return Error.OpTFRetType;
  1171. case SysError.OverloadRefOut: return Error.OverloadRefOut;
  1172. case SysError.OverrideChangesAccess: return Error.CantChangeAccessOnOverride;
  1173. case SysError.OverrideChangesReturnType: return Error.CantChangeReturnTypeOnOverride;
  1174. case SysError.OverrideNotExpected: return Error.OverrideNotExpected;
  1175. case SysError.ParamArrayMustBeLast: return Error.ParamsOrVarargsMustBeLast;
  1176. case SysError.ParamArrayParameterMustBeArrayType: return Error.ParamsMustBeArray;
  1177. case SysError.ParameterLessAccessibleThanDelegate: return Error.BadVisDelegateParam;
  1178. case SysError.ParameterLessAccessibleThanIndexedProperty: return Error.BadVisIndexerParam;
  1179. case SysError.ParameterLessAccessibleThanMethod: return Error.BadVisParamType;
  1180. case SysError.ParameterLessAccessibleThanOperator: return Error.BadVisOpParam;
  1181. case SysError.ParameterTypeCannotBeTypedReference: return Error.MethodArgCantBeRefAny;
  1182. case SysError.PartialClassesSpecifyMultipleBases: return Error.PartialMultipleBases;
  1183. case SysError.PInvokeHasBody: return Error.ExternHasBody;
  1184. case SysError.PInvokeWithoutModuleOrImportName: return Error.ExternMethodNoImplementation;
  1185. case SysError.PointerInAsOrIs: return Error.PointerInAsOrIs;
  1186. case SysError.PointerMustHaveSingleIndex: return Error.PtrIndexSingle;
  1187. case SysError.PossibleBadNegCast: return Error.PossibleBadNegCast;
  1188. case SysError.PropertyCantHaveVoidType: return Error.PropertyCantHaveVoidType;
  1189. case SysError.PropertyTypeLessAccessibleThanIndexedProperty: return Error.BadVisIndexerReturn;
  1190. case SysError.PropertyTypeLessAccessibleThanProperty: return Error.BadVisPropertyType;
  1191. case SysError.PropertyWithNoAccessors: return Error.PropertyWithNoAccessors;
  1192. case SysError.QueryNotSupported: return Error.QueryNotSupported;
  1193. case SysError.QueryNoMatch: return Error.QueryNoMatch;
  1194. case SysError.QueryAmbiguousContextName: return Error.QueryAmbiguousContextName;
  1195. case SysError.QueryBadAggregate: return Error.QueryBadAggregate;
  1196. case SysError.QueryBadAggregateForm: return Error.QueryBadAggregateForm;
  1197. case SysError.QueryBadGroupByList: return Error.QueryBadGroupByList;
  1198. case SysError.QueryBadOrderList: return Error.QueryBadOrderList;
  1199. case SysError.QueryBadProjectionList: return Error.QueryBadProjectionList;
  1200. case SysError.QueryBadQuantifier: return Error.QueryBadQuantifier;
  1201. case SysError.QueryBadQuantifiedExpression: return Error.QueryBadQuantifiedExpression;
  1202. case SysError.QueryBadDifferenceTypes: return Error.QueryBadDifferenceTypes;
  1203. case SysError.QueryBadInsertList: return Error.QueryBadInsertList;
  1204. case SysError.QueryBadIntersectionTypes: return Error.QueryBadIntersectionTypes;
  1205. case SysError.QueryBadLimit: return Error.QueryBadLimit;
  1206. case SysError.QueryBadLimitNotLiteral: return Error.QueryBadLimitNotLiteral;
  1207. case SysError.QueryBadLimitForNotPercent: return Error.QueryBadLimitForNotPercent;
  1208. case SysError.QueryBadOrderItem: return Error.QueryBadOrderItem;
  1209. case SysError.QueryBadUnionTypes: return Error.QueryBadUnionTypes;
  1210. case SysError.QueryBadUpdateList: return Error.QueryBadUpdateList;
  1211. case SysError.QueryBadTypeFilter: return Error.QueryBadTypeFilter;
  1212. case SysError.QueryMissingDefaultConstructor: return Error.QueryMissingDefaultConstructor;
  1213. case SysError.QueryNoContext: return Error.QueryNoContext;
  1214. case SysError.QueryNotAddStream: return Error.QueryNotAddStream;
  1215. case SysError.QueryNotDeleteStream: return Error.QueryNotDeleteStream;
  1216. case SysError.QueryNotInsertStream: return Error.QueryNotInsertStream;
  1217. case SysError.QueryNotScalar: return Error.QueryNotScalar;
  1218. case SysError.QueryNotStream: return Error.QueryNotStream;
  1219. case SysError.QueryNotTransactable: return Error.QueryNotTransactable;
  1220. case SysError.QueryNotTransacted: return Error.QueryNotTransacted;
  1221. case SysError.QueryNoNestedTransaction: return Error.QueryNoNestedTransaction;
  1222. case SysError.QueryNotUpdateStream: return Error.QueryNotUpdateStream;
  1223. case SysError.QueryProjectThroughTypeUnion: return Error.QueryProjectThroughTypeUnion;
  1224. case SysError.QueryIsCyclic: return Error.QueryIsCyclic;
  1225. case SysError.ReceiverCannotBeDelayed: return Error.ReceiverCannotBeDelayed;
  1226. case SysError.ReceiverMustBeDelayed: return Error.ReceiverMustBeDelayed;
  1227. case SysError.RecursiveConstructorCall: return Error.RecursiveConstructorCall;
  1228. case SysError.RefConstraintNotSatisfied: return Error.RefConstraintNotSatisfied;
  1229. case SysError.RedundantBox: return Error.RedundantBox;
  1230. case SysError.RedundantNonNull: return Error.RedundantNonNull;
  1231. case SysError.RedundantStream: return Error.RedundantStream;
  1232. case SysError.RelatedErrorLocation: return Error.RelatedErrorLocation;
  1233. case SysError.RelatedErrorModule: return Error.RelatedErrorModule;
  1234. case SysError.RelatedWarningLocation: return Error.RelatedWarningLocation;
  1235. case SysError.RelatedWarningModule: return Error.RelatedWarningModule;
  1236. case SysError.ResultIsNotReference: return Error.ReturnNotLValue;
  1237. case SysError.ReturnTypeLessAccessibleThanDelegate: return Error.BadVisDelegateReturn;
  1238. case SysError.ReturnOfDelayedValue: return Error.ReturnOfDelayedValue;
  1239. case SysError.ReturnTypeLessAccessibleThanMethod: return Error.BadVisReturnType;
  1240. case SysError.ReturnTypeLessAccessibleThanOperator: return Error.BadVisOpReturn;
  1241. case SysError.ReturnValueRequired: return Error.RetObjectRequired;
  1242. case SysError.SealedTypeIsAlreadyInvariant: return Error.SealedTypeIsAlreadyInvariant;
  1243. case SysError.SourceFileNotRead: return Error.SourceFileNotRead;
  1244. case SysError.SizeofUnsafe: return Error.SizeofUnsafe;
  1245. case SysError.StackallocInCatchFinally: return Error.StackallocInCatchFinally;
  1246. case SysError.StaticNotVirtual: return Error.StaticNotVirtual;
  1247. case SysError.TemplateTypeRequiresArgs: return Error.BadArity2;
  1248. case SysError.ThisInBadContext: return Error.ThisInBadContext;
  1249. case SysError.ThisInStaticCode: return Error.ThisInStaticMeth;
  1250. case SysError.ThisReferenceFromFieldInitializer: return Error.FieldInitRefNonstatic;
  1251. case SysError.ThrowsEnsuresOnConstructor: return Error.ThrowsEnsuresOnConstructor;
  1252. case SysError.TooManyArgumentsToAttribute: return Error.TooManyArgumentsToAttribute;
  1253. case SysError.TypeAliasUsedAsNamespacePrefix: return Error.ColColWithTypeAlias;
  1254. case SysError.TypeArgsNotAllowed: return Error.TypeArgsNotAllowed;
  1255. case SysError.TypeInBadContext: return Error.BadSKunknown;
  1256. case SysError.TypeInVariableContext: return Error.BadSKknown;
  1257. case SysError.TypeMissingInShadowedAssembly: return Error.TypeMissingInShadowedAssembly;
  1258. case SysError.MethodMissingInShadowedAssembly: return Error.MethodMissingInShadowedAssembly;
  1259. case SysError.TypeNameRequired: return Error.ObjectProhibited;
  1260. case SysError.TypeNotAccessible: return Error.BadAccess;
  1261. case SysError.TypeParameterNotCompatibleWithConstraint: return Error.GenericConstraintNotSatisfied;
  1262. case SysError.TypeVarCantBeNull: return Error.TypeVarCantBeNull;
  1263. case SysError.UnassignedThis: return Error.UnassignedThis;
  1264. case SysError.UnimplementedAbstractMethod: return Error.UnimplementedAbstractMethod;
  1265. case SysError.UnimplementedInterfaceMember: return Error.UnimplementedInterfaceMember;
  1266. case SysError.UnreachableCatch: return Error.UnreachableCatch;
  1267. case SysError.UnreachableCode: return Error.UnreachableCode;
  1268. case SysError.UnreferencedLabel: return Error.UnreferencedLabel;
  1269. case SysError.UselessComparisonWithIntegerLiteral: return Error.VacuousIntegralComp;
  1270. case SysError.UseOfNullPointer: return Error.UseOfNullPointer;
  1271. case SysError.UseOfPossiblyNullPointer: return Error.UseOfPossiblyNullPointer;
  1272. case SysError.UseSwitchInsteadOfAttribute: return Error.UseSwitchInsteadOfAttribute;
  1273. case SysError.ValConstraintNotSatisfied: return Error.ValConstraintNotSatisfied;
  1274. case SysError.ValueTypeLayoutCycle: return Error.StructLayoutCycle;
  1275. case SysError.ValueTypeIsAlreadyInvariant: return Error.ValueTypeIsAlreadyInvariant;
  1276. case SysError.ValueTypeIsAlreadyNonNull: return Error.ValueTypeIsAlreadyNonNull;
  1277. case SysError.VoidError: return Error.VoidError;
  1278. case SysError.VolatileAndReadonly: return Error.VolatileAndReadonly;
  1279. case SysError.VolatileByRef: return Error.VolatileByRef;
  1280. case SysError.VolatileNonWordSize: return Error.VolatileStruct;
  1281. case SysError.Warning: return Error.Warning;
  1282. case SysError.Win32ResourceFileNotRead: return Error.Win32ResourceFileNotRead;
  1283. case SysError.Win32IconFileNotRead: return Error.Win32IconFileNotRead;
  1284. case SysError.WrongKindOfMember: return Error.BadSKknown;
  1285. case SysError.WrongNumberOfArgumentsForDelegate: return Error.BadDelArgCount;
  1286. case SysError.WrongNumberOfIndices: return Error.BadIndexCount;
  1287. case SysError.WrongReturnTypeForIterator: return Error.BadIteratorReturn;
  1288. case SysError.UseDefViolation: return Error.UseDefViolation;
  1289. case SysError.UseDefViolationOut: return Error.UseDefViolationOut;
  1290. case SysError.UseDefViolationField: return Error.UseDefViolationField;
  1291. case SysError.UseDefViolationThis: return Error.UseDefViolationThis;
  1292. case SysError.ReturnExpected: return Error.ReturnExpected;
  1293. case SysError.ParamUnassigned: return Error.ParamUnassigned;
  1294. case SysError.UnreferencedVar: return Error.UnreferencedVar;
  1295. case SysError.UnreferencedVarAssg: return Error.UnreferencedVarAssg;
  1296. case SysError.StoreIntoLessDelayedLocation: return Error.StoreIntoLessDelayedLocation;
  1297. // MB -- 09/11/2004
  1298. case SysError.CannotCoerceNullToNonNullType: return Error.CannotCoerceNullToNonNullType;
  1299. case SysError.CoercionToNonNullTypeMightFail: return Error.CoercionToNonNullTypeMightFail;
  1300. case SysError.ReceiverMightBeNull: return Error.ReceiverMightBeNull;
  1301. case SysError.UnnecessaryNonNullCoercion: return Error.UnnecessaryNonNullCoercion;
  1302. case SysError.OnlyStructsAndClassesCanHaveInvariants: return Error.OnlyStructsAndClassesCanHaveInvariants;
  1303. case SysError.UpToMustBeSuperType: return Error.UpToMustBeSuperType;
  1304. case SysError.UpToMustBeClass: return Error.UpToMustBeClass;
  1305. case SysError.ExpectedLeftParenthesis: return Error.ExpectedLeftParenthesis;
  1306. case SysError.MustSupportComprehension: return Error.MustSupportComprehension;
  1307. case SysError.MustSupportReductionXXXXXXXXXXXX: return Error.MustSupportReductionXXXXXXXXXXXX;
  1308. case SysError.MustResolveToType: return Error.MustResolveToType;
  1309. case SysError.MemberMustBePureForMethodContract: return Error.MemberMustBePureForMethodContract;
  1310. case SysError.RequiresNotAllowedInOverride: return Error.RequiresNotAllowedInOverride;
  1311. case SysError.ContractNotAllowedInExplicitInterfaceImplementation: return Error.ContractNotAllowedInExplicitInterfaceImplementation;
  1312. case SysError.CannotAddThrowsSet: return Error.CannotAddThrowsSet;
  1313. case SysError.CannotWeakenThrowsSet: return Error.CannotWeakenThrowsSet;
  1314. case SysError.DuplicateThrowsType: return Error.DuplicateThrowsType;
  1315. case SysError.UncheckedExceptionInThrowsClause: return Error.UncheckedExceptionInThrowsClause;
  1316. case SysError.RequiresNotAllowedInInterfaceImplementation: return Error.RequiresNotAllowedInInterfaceImplementation;
  1317. case SysError.EnsuresInInterfaceNotInMethod: return Error.EnsuresInInterfaceNotInMethod;
  1318. case SysError.ModelMemberUseNotAllowedInContext: return Error.ModelMemberUseNotAllowedInContext;
  1319. case SysError.MemberMustBePureForInvariant: return Error.MemberMustBePureForInvariant;
  1320. case SysError.TypeMustSupportIntCoercions: return Error.TypeMustSupportIntCoercions;
  1321. case SysError.CannotInjectContractFromInterface: return Error.CannotInjectContractFromInterface;
  1322. case SysError.CheckedExceptionInRequiresOtherwiseClause: return Error.CheckedExceptionInRequiresOtherwiseClause;
  1323. case SysError.ContractInheritanceRulesViolated: return Error.ContractInheritanceRulesViolated;
  1324. case SysError.ModifiesNotAllowedInOverride: return Error.ModifiesNotAllowedInOverride;
  1325. case SysError.GenericError: return Error.GenericError;
  1326. case SysError.ReceiverCannotBeNull: return Error.ReceiverCannotBeNull;
  1327. case SysError.OtherwiseExpressionMustBeNonNull : return Error.OtherwiseExpressionMustBeNonNull;
  1328. case SysError.OtherwiseExpressionMustBeType : return Error.OtherwiseExpressionMustBeType;
  1329. case SysError.StrictReadonlyNotReadonly: return Error.StrictReadonlyNotReadonly;
  1330. case SysError.StrictReadonlyStatic: return Error.StrictReadonlyStatic;
  1331. case SysError.StrictReadonlyAssignment: return Error.StrictReadonlyAssignment;
  1332. case SysError.StrictReadonlyMultipleAssignment: return Error.StrictReadonlyMultipleAssignment;
  1333. case SysError.ShouldCommit: return Error.ShouldCommit;
  1334. case SysError.ShouldCommitOnAllPaths: return Error.ShouldCommitOnAllPaths;
  1335. case SysError.UnboxDelayedValue: return Error.UnboxDelayedValue;
  1336. case SysError.ThrowsDelayedValue: return Error.ThrowsDelayedValue;
  1337. case SysError.CannotUseDelayedPointer: return Error.CannotUseDelayedPointer;
  1338. case SysError.CannotUseDelayedTypedRef: return Error.CannotUseDelayedTypedRef;
  1339. case SysError.InvalidModifiesClause: return Error.InvalidModifiesClause;
  1340. case SysError.PureMethodWithOutParamUsedInContract: return Error.PureMethodWithOutParamUsedInContract;
  1341. case SysError.PureMethodCannotHaveRefParam: return Error.PureMethodCannotHaveRefParam;
  1342. case SysError.ReadsWithoutPure: return Error.ReadsWithoutPure;
  1343. case SysError.InconsistentPurityAttributes: return Error.InconsistentPurityAttributes;
  1344. case SysError.PureOwnedNotAllowed: return Error.PureOwnedNotAllowed;
  1345. }
  1346. return Error.UnexpectedToken;
  1347. }
  1348. public override string GetIndexerName(Method meth){
  1349. if (meth == null) return "";
  1350. string methName = "this";
  1351. if (meth.ImplementedTypes != null && meth.ImplementedTypes.Count > 0 && meth.ImplementedTypes[0] != null)
  1352. methName = this.GetTypeName(meth.ImplementedTypes[0])+"."+methName;
  1353. string decTypeName = this.GetTypeName(meth.DeclaringType);
  1354. if (decTypeName == null || decTypeName.Length == 0) return methName;
  1355. return decTypeName+"."+methName;
  1356. }
  1357. public override string GetMemberAccessString(Member mem){
  1358. if (mem == null || mem is Namespace) return "";
  1359. if (mem.IsAssembly) return "internal";
  1360. if (mem.IsFamily) return "protected";
  1361. if (mem.IsFamilyAndAssembly) return "protected and internal";
  1362. if (mem.IsFamilyOrAssembly) return "protected internal";
  1363. if (mem.IsPrivate) return "private";
  1364. if (mem.IsPublic) return "public";
  1365. if (mem.IsCompilerControlled){
  1366. if (mem is Field && mem.DeclaringType is BlockScope) return "(local variable)";
  1367. if (mem is ParameterField) return "(parameter)";
  1368. return null;
  1369. }
  1370. return "";
  1371. }
  1372. public override string GetMemberName(Member mem){
  1373. if (mem == null) return "";
  1374. string memName = mem.Name == null ? "" : mem.Name.ToString();
  1375. switch (mem.NodeType){
  1376. case NodeType.Property:
  1377. Property prop = (Property)mem;
  1378. ParameterList pars = prop.Parameters;
  1379. if (pars != null && pars.Count > 0)
  1380. return this.GetTypeName(mem.DeclaringType)+".this";
  1381. if (prop.ImplementedTypes != null && prop.ImplementedTypes.Count > 0 && prop.ImplementedTypes[0] != null)
  1382. memName = this.GetTypeName(prop.ImplementedTypes[0])+"."+memName;
  1383. goto default;
  1384. case NodeType.Method:
  1385. Method meth = (Method)mem;
  1386. if (meth.IsSpecialName){
  1387. string opName = meth.Name == null ? null : (string)Cci.Checker.OperatorName[meth.Name.UniqueIdKey];
  1388. if (opName != null){
  1389. string name = this.GetTypeName(meth.DeclaringType)+"."+opName;
  1390. if (meth.Name.UniqueIdKey == StandardIds.opExplicit.UniqueIdKey || meth.Name.UniqueIdKey == StandardIds.opImplicit.UniqueIdKey)
  1391. name = name + " "+this.GetTypeName(meth.ReturnType);
  1392. return name;
  1393. }
  1394. }
  1395. if (meth.HasCompilerGeneratedSignature){
  1396. if (meth.Name.UniqueIdKey == StandardIds.Finalize.UniqueIdKey)
  1397. return this.GetTypeName(meth.DeclaringType) + ".~" + meth.DeclaringType.Name;
  1398. if (meth.Name.UniqueIdKey == StandardIds.Invoke.UniqueIdKey)
  1399. return this.GetTypeName(meth.DeclaringType);
  1400. }
  1401. if (meth.ImplementedTypes != null && meth.ImplementedTypes.Count > 0 && meth.ImplementedTypes[0] != null)
  1402. memName = this.GetTypeName(meth.ImplementedTypes[0])+"."+memName;
  1403. if (meth.TemplateParameters != null && meth.TemplateParameters.Count > 0){
  1404. StringBuilder sb = new StringBuilder(memName);
  1405. sb.Append('<');
  1406. for (int i = 0, n = meth.TemplateParameters == null ? 0 : meth.TemplateParameters.Count; i < n; i++){
  1407. sb.Append(ErrorHandler.GetTypeNameFor(meth.TemplateParameters[i]));
  1408. if (i < n-1) sb.Append(',');
  1409. }
  1410. sb.Append('>');
  1411. memName = sb.ToString();
  1412. }else if (meth.Template != null && meth.TemplateArguments != null && meth.TemplateArguments.Count > 0){
  1413. StringBuilder sb = new StringBuilder(meth.Template.Name == null ? memName : meth.Template.Name.Name);
  1414. sb.Append('<');
  1415. for (int i = 0, n = meth.TemplateArguments == null ? 0 : meth.TemplateArguments.Count; i < n; i++) {
  1416. sb.Append(ErrorHandler.GetTypeNameFor(meth.TemplateArguments[i]));
  1417. if (i < n-1) sb.Append(',');
  1418. }
  1419. sb.Append('>');
  1420. memName = sb.ToString();
  1421. }
  1422. goto default;
  1423. case NodeType.InstanceInitializer:
  1424. return this.GetTypeName(mem.DeclaringType) + "." + mem.DeclaringType.GetUnmangledNameWithoutTypeParameters();
  1425. case NodeType.Namespace:
  1426. return ((Namespace)mem).FullName;
  1427. default:
  1428. TypeNode typ = mem as TypeNode;
  1429. if (typ != null) return this.GetTypeName(typ);
  1430. if (mem.DeclaringType != null && !mem.DeclaringType.IsStructural){
  1431. string decTypeName = ErrorHandler.GetTypeNameFor(mem.DeclaringType);
  1432. if (decTypeName == null || decTypeName.Length == 0) return memName;
  1433. return decTypeName+"."+memName;
  1434. }else if (mem.DeclaringType != null && mem.DeclaringType.Template != null){
  1435. string decTypeName = ErrorHandler.GetTypeNameFor(mem.DeclaringType);
  1436. if (mem.DeclaringType.Template == SystemTypes.GenericNullable &&
  1437. mem.DeclaringType.TemplateArguments != null && mem.DeclaringType.TemplateArguments.Count == 1){
  1438. decTypeName = "System.Nullable<"+ErrorHandler.GetTypeNameFor(mem.DeclaringType.TemplateArguments[0])+">";
  1439. }
  1440. if (decTypeName == null || decTypeName.Length == 0) return memName;
  1441. return decTypeName+"."+memName;
  1442. }
  1443. return memName;
  1444. }
  1445. }
  1446. public override string GetUnqualifiedMemberName(Member mem){
  1447. if (mem == null) return "";
  1448. string memName = mem.Name == null ? "" : mem.Name.ToString();
  1449. switch (mem.NodeType){
  1450. case NodeType.Property:
  1451. Property prop = (Property)mem;
  1452. ParameterList pars = prop.Parameters;
  1453. if (pars != null && pars.Count > 0)
  1454. return "this";
  1455. if (prop.ImplementedTypes != null && prop.ImplementedTypes.Count > 0 && prop.ImplementedTypes[0] != null)
  1456. memName = this.GetTypeName(prop.ImplementedTypes[0])+"."+memName;
  1457. goto default;
  1458. case NodeType.Method:
  1459. Method meth = (Method)mem;
  1460. if (meth.IsSpecialName){
  1461. string opName = (string)Cci.Checker.OperatorName[meth.Name.UniqueIdKey];
  1462. if (opName != null){
  1463. string name = opName;
  1464. if (meth.Name.UniqueIdKey == StandardIds.opExplicit.UniqueIdKey || meth.Name.UniqueIdKey == StandardIds.opImplicit.UniqueIdKey)
  1465. name = name + " "+this.GetTypeName(meth.ReturnType);
  1466. return name;
  1467. }
  1468. }
  1469. if (meth.HasCompilerGeneratedSignature && meth.Name.UniqueIdKey == StandardIds.Finalize.UniqueIdKey)
  1470. return "~" + meth.DeclaringType.Name;
  1471. if (meth.ImplementedTypes != null && meth.ImplementedTypes.Count > 0 && meth.ImplementedTypes[0] != null)
  1472. return this.GetTypeName(meth.ImplementedTypes[0])+"."+meth.GetUnmangledNameWithTypeParameters(true);
  1473. return meth.GetUnmangledNameWithTypeParameters(true);
  1474. case NodeType.InstanceInitializer:
  1475. case NodeType.StaticInitializer:
  1476. return mem.DeclaringType.Name.ToString();
  1477. default:
  1478. TypeNode typ = mem as TypeNode;
  1479. if (typ != null) return this.GetTypeName(typ);
  1480. return memName;
  1481. }
  1482. }
  1483. public override string GetMethodSignature(Method method, bool noAccessor, bool withFullInformation){
  1484. if (method == null) return "";
  1485. if (method is InstanceInitializer && withFullInformation){
  1486. if (method.DeclaringType is DelegateNode) return this.GetDelegateConstructorSignature(method);
  1487. return this.GetSignatureString(this.GetMemberName(method.DeclaringType), method.Parameters, "(", ")", ", ", withFullInformation);
  1488. }
  1489. if (method.IsSpecialName){
  1490. string methName = method.Name == null ? "" : method.Name.ToString();
  1491. if (methName.StartsWith("get_")){
  1492. if ((method.Parameters != null && method.Parameters.Count > 0))
  1493. return this.GetIndexerGetterName(method)+(noAccessor?"":".get");
  1494. methName = methName.Substring(4)+(noAccessor?"":".get");
  1495. }else if (methName.StartsWith("set_")){
  1496. if (method.Parameters != null && method.Parameters.Count > 1)
  1497. return this.GetIndexerSetterName(method)+(noAccessor?"":".set");
  1498. methName = methName.Substring(4)+(noAccessor?"":".set");
  1499. }else if (methName.StartsWith("add_") && method.Parameters != null && method.Parameters.Count == 1)
  1500. methName = methName.Substring(4)+(noAccessor?"":".add");
  1501. else if (methName.StartsWith("remove_") && method.Parameters != null && method.Parameters.Count == 1)
  1502. methName = methName.Substring(7)+(noAccessor?"":".remove");
  1503. else
  1504. goto nonAccessorCase;
  1505. if (method.ImplementedTypes != null && method.ImplementedTypes.Count > 0 && method.ImplementedTypes[0] != null)
  1506. methName = this.GetTypeName(method.ImplementedTypes[0])+"."+methName;
  1507. string decTypeName = this.GetTypeName(method.DeclaringType);
  1508. if (decTypeName == null || decTypeName.Length == 0) return methName;
  1509. return decTypeName+"."+methName;
  1510. }
  1511. nonAccessorCase:
  1512. return this.GetSignatureString(this.GetMemberName(method), method.Parameters, "(", ")", ", ", withFullInformation);
  1513. }
  1514. public virtual string GetDelegateConstructorSignature(Method method){
  1515. if (method == null) return "";
  1516. DelegateNode del = method.DeclaringType as DelegateNode;
  1517. if (del == null) return "";
  1518. StringBuilder sb = new StringBuilder();
  1519. sb.Append(this.GetMemberName(del));
  1520. sb.Append('(');
  1521. sb.Append(this.GetMemberName(del.ReturnType));
  1522. sb.Append(this.GetSignatureString(" ", del.Parameters, "(", ")", ", ", false));
  1523. sb.Append(") target)");
  1524. return sb.ToString();
  1525. }
  1526. public override void HandleDirectCallOfFinalize(MethodCall call){
  1527. if (call == null) return;
  1528. if (call.SourceContext.Document != null){
  1529. if (call.Callee != null && call.Callee is MemberBinding && ((MemberBinding)call.Callee).TargetObject is Base)
  1530. this.HandleError(call, Error.CallingBaseFinalizeDeprecated);
  1531. else
  1532. this.HandleError(call, Error.CallingFinalizeDeprecated);
  1533. }
  1534. }
  1535. public override void HandleNonOverrideAndNonHide(Method meth, Member bmem, Method bmeth){
  1536. if (meth.Name.UniqueIdKey == StandardIds.Finalize.UniqueIdKey && bmem.DeclaringType == SystemTypes.Object){
  1537. meth.HidesBaseClassMember = true;
  1538. return;
  1539. }
  1540. base.HandleNonOverrideAndNonHide(meth, bmem, bmeth);
  1541. }
  1542. public override void HandleOverrideOfObjectFinalize(Method method){
  1543. this.HandleError(method.Name, Error.OverrideFinalizeDeprecated);
  1544. }
  1545. internal void HandleError(Node offendingNode, Error error, params string[] messageParameters){
  1546. if (offendingNode == null || (offendingNode is Literal && offendingNode.SourceContext.Document == null)) return;
  1547. PragmaInfo pragmaInfo = null;
  1548. PragmaInfo matchingPragmaInfo = null;
  1549. if (this.PragmaWarnInformation != null) {
  1550. pragmaInfo = (PragmaInfo)this.PragmaWarnInformation[(int)error];
  1551. if (pragmaInfo != null) {
  1552. int lineNum = offendingNode.SourceContext.StartLine;
  1553. while (pragmaInfo != null) {
  1554. if (pragmaInfo.LineNum < lineNum) {
  1555. matchingPragmaInfo = pragmaInfo;
  1556. break;
  1557. }
  1558. pragmaInfo = pragmaInfo.Next;
  1559. }
  1560. if (matchingPragmaInfo != null && matchingPragmaInfo.Disable)
  1561. return;
  1562. }
  1563. }
  1564. SpecSharpErrorNode enode = new SpecSharpErrorNode(error, messageParameters);
  1565. if (pragmaInfo != null && !pragmaInfo.Disable && pragmaInfo == matchingPragmaInfo)
  1566. enode.DoNotSuppress = true;
  1567. enode.SourceContext = offendingNode.SourceContext;
  1568. this.Errors.Add(enode);
  1569. }
  1570. public override void HandleError(Node offendingNode, SysError error, params string[] messageParameters){
  1571. Error e = ErrorHandler.MapError(error);
  1572. if (e == Error.None) return;
  1573. if (e == Error.UnexpectedToken){
  1574. base.HandleError(offendingNode, error, messageParameters);
  1575. return;
  1576. }
  1577. if (e == Error.NameNotInContext){
  1578. if (messageParameters != null && messageParameters.Length == 1){
  1579. string[] mpars = new string[2];
  1580. mpars[0] = messageParameters[0];
  1581. if (this.currentType != null)
  1582. mpars[1] = this.GetTypeName(this.currentType);
  1583. else
  1584. mpars[1] = "";
  1585. messageParameters = mpars;
  1586. }
  1587. }
  1588. if (e == Error.AssgReadonlyLocalCause){
  1589. string[] mpars = new string[2];
  1590. mpars[0] = messageParameters[0];
  1591. if (error == SysError.AssignmentToFixedVariable)
  1592. mpars[1] = "fixed variable"; //TODO: this string should be localized
  1593. else
  1594. mpars[1] = "";
  1595. messageParameters = mpars;
  1596. }
  1597. if (this.refOrOutAddress){
  1598. switch (e){
  1599. case Error.AssgLvalueExpected: e = Error.RefLvalueExpected; break;
  1600. case Error.AssgReadonly: e = Error.RefReadonly; break;
  1601. case Error.AssgReadonlyLocal: e = Error.RefReadonlyLocal; break;
  1602. case Error.AssgReadonlyLocalCause: e = Error.RefReadonlyLocalCause; break;
  1603. case Error.AssgReadonlyProp: e = Error.RefReadonlyProperty; break;
  1604. case Error.AssgReadonlyStatic: e = Error.RefReadonlyStatic; break;
  1605. }
  1606. }
  1607. this.HandleError(offendingNode, e, messageParameters);
  1608. }
  1609. public override string GetDelegateSignature(DelegateNode del){
  1610. if (del == null) return "";
  1611. string delName = del.Name.ToString();
  1612. if (del.DeclaringType != null)
  1613. delName = this.GetTypeName(del.DeclaringType)+"."+delName;
  1614. return this.GetTypeName(del.ReturnType)+" "+this.GetSignatureString(delName, del.Parameters, "(", ")", ", ");
  1615. }
  1616. public override string GetTypeName(TypeNode type){
  1617. if (type is Reference && this.currentParameter != null && (this.currentParameter.Flags & ParameterFlags.Out) != 0)
  1618. return "out "+ErrorHandler.GetTypeNameFor(((Reference)type).ElementType);
  1619. return ErrorHandler.GetTypeNameFor(type);
  1620. }
  1621. public override string GetUnqualifiedTypeName(TypeNode type){
  1622. if (type is Reference && this.currentParameter != null && (this.currentParameter.Flags & ParameterFlags.Out) != 0)
  1623. return "out "+ErrorHandler.GetTypeNameFor(((Reference)type).ElementType, false, false);
  1624. return ErrorHandler.GetTypeNameFor(type, false, false);
  1625. }
  1626. public override string GetParameterSignature(ParameterField f){
  1627. if (f == null) return "";
  1628. StringBuilder result = new StringBuilder("(parameter) "); //REVIEW: localize the (parameter) part?
  1629. this.currentParameter = f.Parameter;
  1630. result.Append(this.GetTypeName(f.Type)+" "+f.Name.ToString());
  1631. return result.ToString();
  1632. }
  1633. private static Identifier elementNameId = Identifier.For("ElementName");
  1634. public static string GetTypeNameFor(TypeNode type){
  1635. return ErrorHandler.GetTypeNameFor(type, false, true);
  1636. }
  1637. public static string GetTypeNameFor(TypeNode type, bool suppressTemplateParameters, bool fullName){
  1638. if (type == null || type.Name == Looker.NotFound) return "";
  1639. switch(type.TypeCode){
  1640. case TypeCode.Boolean: return "bool";
  1641. case TypeCode.Byte: return "byte";
  1642. case TypeCode.Char: return "char";
  1643. case TypeCode.Decimal: return "decimal";
  1644. case TypeCode.Double: return "double";
  1645. case TypeCode.Int16: return "short";
  1646. case TypeCode.Int32: return "int";
  1647. case TypeCode.Int64: return "long";
  1648. case TypeCode.SByte: return "sbyte";
  1649. case TypeCode.Single: return "float";
  1650. case TypeCode.String: return "string";
  1651. case TypeCode.UInt16: return "ushort";
  1652. case TypeCode.UInt32: return "uint";
  1653. case TypeCode.UInt64: return "ulong";
  1654. }
  1655. if (type == SystemTypes.Object) return "object";
  1656. if (type == SystemTypes.Void) return "void";
  1657. if (type.Template == SystemTypes.GenericNullable){
  1658. if (type.TemplateArguments != null && type.TemplateArguments.Count > 0)
  1659. return ErrorHandler.GetTypeNameFor(type.TemplateArguments[0]) + "?";
  1660. }
  1661. switch (type.NodeType){
  1662. case NodeType.ArrayType:
  1663. ArrayType aType = (ArrayType)type;
  1664. StringBuilder sb = new StringBuilder(ErrorHandler.GetTypeNameFor(aType.ElementType));
  1665. sb.Append('[');
  1666. for (int i = 0, n = aType.Rank; i < n; i++){
  1667. if (i == 0 && n > 1) sb.Append('*');
  1668. if (i < n-1){
  1669. sb.Append(',');
  1670. if (n > 1) sb.Append('*');
  1671. }
  1672. }
  1673. sb.Append(']');
  1674. return sb.ToString();
  1675. case NodeType.Class:
  1676. FunctionType fType = type as FunctionType;
  1677. if (fType != null){
  1678. ErrorHandler eh = new ErrorHandler(new ErrorNodeList(0));
  1679. return "delegate " + eh.GetTypeName(fType.ReturnType)+" "+eh.GetSignatureString("", fType.Parameters, "(", ")", ", ");
  1680. }
  1681. ClosureClass cClass = type as ClosureClass;
  1682. if (cClass != null){
  1683. MemberList mems = cClass.Members;
  1684. for (int i = 0, n = mems == null ? 0 : mems.Count; i < n; i++){
  1685. Method meth = mems[i] as Method;
  1686. if (meth == null || meth is InstanceInitializer || (meth.Parameters != null && meth.Parameters.Count != 0)) continue;
  1687. return ErrorHandler.GetTypeNameFor(meth.ReturnType);
  1688. }
  1689. }
  1690. if (type.Template != null && type.TemplateArguments != null && type.TemplateArguments.Count > 0){
  1691. sb = new StringBuilder(ErrorHandler.GetTypeNameFor(type.Template, true, fullName));
  1692. for (int i = 0, n = type.TemplateArguments == null ? 0 : type.TemplateArguments.Count; i < n; i++){
  1693. if (i == 0) sb.Append('<');
  1694. sb.Append(ErrorHandler.GetTypeNameFor(type.TemplateArguments[i]));
  1695. if (i < n - 1) sb.Append(','); else sb.Append('>');
  1696. }
  1697. return sb.ToString();
  1698. }
  1699. if (type.DeclaringType != null)
  1700. sb = new StringBuilder(ErrorHandler.GetTypeNameFor(type.DeclaringType)+"."+type.GetUnmangledNameWithoutTypeParameters());
  1701. else
  1702. sb = new StringBuilder(type.GetFullUnmangledNameWithoutTypeParameters());
  1703. if (!suppressTemplateParameters && type.TemplateParameters != null){
  1704. for (int i = 0, n = type.TemplateParameters == null ? 0 : type.TemplateParameters.Count; i < n; i++){
  1705. if (i == 0) sb.Append('<');
  1706. sb.Append(ErrorHandler.GetTypeNameFor(type.TemplateParameters[i], false, fullName));
  1707. if (i < n - 1) sb.Append(','); else sb.Append('>');
  1708. }
  1709. return sb.ToString();
  1710. }
  1711. return sb.ToString();
  1712. case NodeType.ConstrainedType:
  1713. case NodeType.DelegateNode:
  1714. case NodeType.EnumNode:
  1715. case NodeType.Interface:
  1716. case NodeType.TypeAlias:
  1717. goto case NodeType.Class;
  1718. case NodeType.OptionalModifier:
  1719. if (((OptionalModifier)type).Modifier == SystemTypes.NonNullType)
  1720. return ErrorHandler.GetTypeNameFor(((OptionalModifier)type).ModifiedType)+"!";
  1721. if (((OptionalModifier)type).Modifier == SystemTypes.NullableType)
  1722. return ErrorHandler.GetTypeNameFor(((OptionalModifier)type).ModifiedType) + "?";
  1723. goto case NodeType.RequiredModifier;
  1724. case NodeType.RequiredModifier:
  1725. return ErrorHandler.GetTypeNameFor(((TypeModifier)type).ModifiedType);
  1726. case NodeType.Pointer:
  1727. return ErrorHandler.GetTypeNameFor(((Pointer)type).ElementType)+"*";
  1728. case NodeType.Reference:
  1729. return "ref "+ErrorHandler.GetTypeNameFor(((Reference)type).ElementType);
  1730. case NodeType.Refanytype:
  1731. case NodeType.Struct:
  1732. goto case NodeType.Class;
  1733. case NodeType.ClassParameter:
  1734. case NodeType.TypeParameter:
  1735. return type.Name.ToString();
  1736. case NodeType.ClassExpression :
  1737. case NodeType.InterfaceExpression :
  1738. case NodeType.TypeExpression :
  1739. case NodeType.ArrayTypeExpression:
  1740. case NodeType.FlexArrayTypeExpression:
  1741. case NodeType.FunctionTypeExpression:
  1742. case NodeType.PointerTypeExpression:
  1743. case NodeType.ReferenceTypeExpression:
  1744. case NodeType.StreamTypeExpression:
  1745. case NodeType.NonEmptyStreamTypeExpression:
  1746. case NodeType.NonNullTypeExpression:
  1747. case NodeType.NonNullableTypeExpression:
  1748. case NodeType.BoxedTypeExpression:
  1749. case NodeType.NullableTypeExpression:
  1750. case NodeType.InvariantTypeExpression:
  1751. case NodeType.TupleTypeExpression:
  1752. case NodeType.TypeIntersectionExpression:
  1753. case NodeType.TypeUnionExpression:
  1754. return type.SourceContext.SourceText;
  1755. }
  1756. if (fullName) return type.FullName;
  1757. if (type.Name == null) return "";
  1758. return type.Name.ToString();
  1759. }
  1760. public static string[] GetSortedTypeNames(TypeNodeList types){
  1761. int n = types == null ? 0 : types.Count;
  1762. string[] result = new string[n];
  1763. for (int i = 0; i < n; i++)
  1764. result[i] = ErrorHandler.GetTypeNameFor(types[i]);
  1765. Array.Sort(result);
  1766. return result;
  1767. }
  1768. }
  1769. // Over time move to unified way of naming.
  1770. // Use this class from other places by setting proper options.
  1771. enum MemberNameOptions: uint{
  1772. Namespace = 0x00000001,
  1773. EnclosingType = Namespace << 1,
  1774. ImplementInterface = EnclosingType << 1,
  1775. Keywords = ImplementInterface << 1, // takes highest precedence
  1776. AtPrefix = Keywords << 1, // TODO..
  1777. TemplateParameters = AtPrefix << 1, // List<T>
  1778. TemplateArguments = TemplateParameters << 1, // Foo<int, List<K>>
  1779. TemplateInfo = TemplateArguments << 1, // just <> not <T,U>
  1780. ExpandNullable = TemplateInfo << 1, // System.Nullable<int> not int?
  1781. SmartNamespaceName = ExpandNullable << 1, // TODO: This should be honored for the Enclosing type also...
  1782. SupressAttributeSuffix = SmartNamespaceName << 1,
  1783. PutSignature = SupressAttributeSuffix << 1, // Parameter info etc for methos and properties...
  1784. PutParameterName = PutSignature << 1,
  1785. PutParameterModifiers = PutParameterName << 1,
  1786. PutReturnType = PutParameterModifiers << 1,
  1787. Access = PutReturnType << 1,
  1788. Modifiers = Access << 1,
  1789. PutMethodConstraints = Modifiers << 1,
  1790. SmartClassName = PutMethodConstraints << 1,
  1791. }
  1792. class MemberNameBuilder {
  1793. internal static bool IsOptionActive(MemberNameOptions givenOpt, MemberNameOptions opt) {
  1794. return (givenOpt & opt) == opt;
  1795. }
  1796. internal static string GetAtPrefixedIfRequired(string name, MemberNameOptions opt) {
  1797. if (name == null)
  1798. return name;
  1799. if ((opt & MemberNameOptions.AtPrefix) == MemberNameOptions.AtPrefix && Scanner.IsKeyword(name, false)) {
  1800. return "@" + name;
  1801. }
  1802. return name;
  1803. }
  1804. internal static bool IsNamespaceImportedByScope(Identifier nspName, Scope scope) {
  1805. if (scope == null) return false;
  1806. if (nspName == null) return true;
  1807. while (scope != null && !(scope is NamespaceScope)) {
  1808. scope = scope.OuterScope;
  1809. }
  1810. for (NamespaceScope nsScope = scope as NamespaceScope; nsScope != null; nsScope = nsScope.OuterScope as NamespaceScope) {
  1811. Namespace ns = nsScope.AssociatedNamespace;
  1812. if (ns != null) {
  1813. if (ns.Name == null) continue;
  1814. if (ns.Name.UniqueIdKey == nspName.UniqueIdKey) return true;
  1815. UsedNamespaceList nsList = ns.UsedNamespaces;
  1816. if (nsList == null || nsList.Count == 0) continue;
  1817. for (int i = 0; i < nsList.Count; ++i) {
  1818. if (nsList[i] == null) continue;
  1819. if (nsList[i].Namespace == null) continue;
  1820. if (nsList[i].Namespace.UniqueIdKey == nspName.UniqueIdKey) {
  1821. return true;
  1822. }
  1823. }
  1824. }
  1825. }
  1826. return false;
  1827. }
  1828. internal static bool IsAggregateVisibleIn(TypeNode typeNode, Scope scope) {
  1829. if (scope == null) return false;
  1830. if (typeNode == null) return true;
  1831. while (scope != null && !(scope is TypeScope)) {
  1832. scope = scope.OuterScope;
  1833. }
  1834. for (TypeScope tScope = scope as TypeScope; tScope != null; tScope = tScope.OuterScope as TypeScope) {
  1835. if (tScope.Type == null) continue;
  1836. if (typeNode == tScope.Type || tScope.Type.IsDerivedFrom(typeNode)) {
  1837. return true;
  1838. }
  1839. }
  1840. return false;
  1841. }
  1842. internal static string GetDelegateConstructorSignature(Method method, MemberNameOptions givenOptions, Scope scope) {
  1843. DelegateNode del = method.DeclaringType as DelegateNode;
  1844. if (del == null) return "";
  1845. StringBuilder sb = new StringBuilder();
  1846. sb.Append(MemberNameBuilder.GetMemberNameRaw(del, givenOptions, scope));
  1847. MemberNameOptions mask = MemberNameOptions.Keywords | MemberNameOptions.TemplateInfo | MemberNameOptions.TemplateArguments | MemberNameOptions.TemplateParameters | MemberNameOptions.Namespace | MemberNameOptions.EnclosingType;
  1848. string methName = MemberNameBuilder.GetMemberNameRaw(method.DeclaringType, givenOptions & ~mask, scope);
  1849. sb.Append('.');
  1850. sb.Append(methName);
  1851. sb.Append('(');
  1852. sb.Append(MemberNameBuilder.GetMemberNameRaw(del.ReturnType, givenOptions, scope));
  1853. sb.Append(MemberNameBuilder.GetSignatureString(del.Parameters, "(", ")", ", ", givenOptions&~MemberNameOptions.PutParameterName, scope, false));
  1854. sb.Append(") target)");
  1855. return sb.ToString();
  1856. }
  1857. internal static string GetMemberAccessString(Member mem) {
  1858. if (mem == null || mem is Namespace) return "";
  1859. if (mem.IsAssembly) return "internal";
  1860. if (mem.IsFamily) return "protected";
  1861. if (mem.IsFamilyAndAssembly) return "protected and internal";
  1862. if (mem.IsFamilyOrAssembly) return "protected internal";
  1863. if (mem.IsPrivate) return "private";
  1864. if (mem.IsPublic) return "public";
  1865. if (mem.IsCompilerControlled) {
  1866. if (mem is Field && mem.DeclaringType is BlockScope) return "(local variable)";
  1867. if (mem is ParameterField) return "(parameter)";
  1868. return null;
  1869. }
  1870. return "";
  1871. }
  1872. public static string GetParameterTypeName(Parameter parameter, MemberNameOptions givenOptions, Scope scope) {
  1873. if (parameter == null) return "";
  1874. Reference r = parameter.Type as Reference;
  1875. TypeNode typeNode = null;
  1876. StringBuilder sb = new StringBuilder();
  1877. string backUpName = null;
  1878. if (r != null) {
  1879. if ((parameter.Flags & ParameterFlags.Out) != 0) {
  1880. if ( IsOptionActive(givenOptions, MemberNameOptions.PutParameterModifiers) ) sb.Append("out ");
  1881. typeNode = r.ElementType;
  1882. } else {
  1883. if (IsOptionActive(givenOptions, MemberNameOptions.PutParameterModifiers)) sb.Append("ref ");
  1884. typeNode = r.ElementType;
  1885. }
  1886. } else if (parameter.GetParamArrayElementType() != null) {
  1887. if (IsOptionActive(givenOptions, MemberNameOptions.PutParameterModifiers)) sb.Append("params ");
  1888. typeNode = parameter.Type;
  1889. } else {
  1890. typeNode = parameter.Type;
  1891. if (typeNode == null && parameter.TypeExpression != null)
  1892. backUpName = parameter.TypeExpression.SourceContext.SourceText;
  1893. }
  1894. sb.Append(backUpName != null ? MemberNameBuilder.GetAtPrefixedIfRequired(backUpName, givenOptions) : GetMemberNameRaw(typeNode, givenOptions, scope));
  1895. if (IsOptionActive(givenOptions, MemberNameOptions.PutParameterName) && parameter.Name!= null) {
  1896. sb.Append(' ');
  1897. sb.Append(MemberNameBuilder.GetAtPrefixedIfRequired(parameter.Name.ToString(), givenOptions));
  1898. }
  1899. return sb.ToString();
  1900. }
  1901. internal static string GetSignatureString(ParameterList parameters, string startPars, string endPars, string parSep, MemberNameOptions givenOpts, Scope scope, bool addNamedParameters) {
  1902. StringBuilder sb = new StringBuilder(256);
  1903. sb.Append(startPars);
  1904. int n = parameters == null ? 0 : parameters.Count;
  1905. for (int i = 0; i < n; i++) {
  1906. Parameter p = parameters[i];
  1907. sb.Append(GetParameterTypeName(p, givenOpts, scope));
  1908. if (i < n - 1) sb.Append(parSep);
  1909. }
  1910. if (addNamedParameters) {
  1911. string namedParamters = SpecSharpErrorNode.ResourceManager.GetString("NamedParameters", CultureInfo.CurrentCulture);
  1912. if ( n > 0 ){
  1913. sb.Append(parSep);
  1914. sb.Append(namedParamters);
  1915. }else{
  1916. sb.Append(namedParamters);
  1917. }
  1918. }
  1919. sb.Append(endPars);
  1920. return sb.ToString();
  1921. }
  1922. internal static string GetMethodName(Method method, MemberNameOptions givenOptions, Scope scope, out bool isIndexer) {
  1923. string methName = null;
  1924. isIndexer = false;
  1925. if ( method.Template != null)
  1926. methName = MemberNameBuilder.GetAtPrefixedIfRequired(method.Template.GetUnmangledNameWithoutTypeParameters(true), givenOptions);
  1927. else
  1928. methName = MemberNameBuilder.GetAtPrefixedIfRequired(method.GetUnmangledNameWithoutTypeParameters(true), givenOptions);
  1929. if (method is InstanceInitializer) {
  1930. MemberNameOptions mask = MemberNameOptions.Keywords | MemberNameOptions.TemplateInfo | MemberNameOptions.TemplateArguments | MemberNameOptions.TemplateParameters | MemberNameOptions.Namespace | MemberNameOptions.EnclosingType;
  1931. methName = MemberNameBuilder.GetMemberNameRaw(method.DeclaringType, givenOptions & ~mask, scope);
  1932. } else if (method.IsSpecialName) {
  1933. if (methName.StartsWith("get_") || methName.StartsWith("set_")) {
  1934. if ((method.Parameters != null && method.Parameters.Count > 0)) {
  1935. // In this case enclosing type is not really an option. its part of name.
  1936. methName = MemberNameBuilder.GetMemberNameRaw(method.DeclaringType, givenOptions, scope);
  1937. if (methName == null)
  1938. methName = "";
  1939. isIndexer = true;
  1940. }
  1941. methName = methName.Substring(4);
  1942. } else if (methName.StartsWith("add_") && method.Parameters != null && method.Parameters.Count == 1)
  1943. methName = methName.Substring(4);
  1944. else if (methName.StartsWith("remove_") && method.Parameters != null && method.Parameters.Count == 1)
  1945. methName = methName.Substring(7);
  1946. else {
  1947. string opName = method.Name == null ? null : (string)Cci.Checker.OperatorName[method.Name.UniqueIdKey];
  1948. if (opName != null) {
  1949. // In this case Enclosing type is not really an option. its part of name.
  1950. string name = MemberNameBuilder.GetMemberNameRaw(method.DeclaringType, givenOptions, scope) + "." + opName;
  1951. if (method.Name.UniqueIdKey == StandardIds.opExplicit.UniqueIdKey || method.Name.UniqueIdKey == StandardIds.opImplicit.UniqueIdKey)
  1952. name = name + " " + MemberNameBuilder.GetMemberNameRaw(method.ReturnType, givenOptions, scope);
  1953. return name;
  1954. }
  1955. }
  1956. } else {
  1957. if (method.HasCompilerGeneratedSignature) {
  1958. if (method.Name.UniqueIdKey == StandardIds.Finalize.UniqueIdKey)
  1959. methName = "~" + MemberNameBuilder.GetAtPrefixedIfRequired(method.DeclaringType.Name.Name, givenOptions);
  1960. }
  1961. }
  1962. if (method.ImplementedTypes != null && method.ImplementedTypes.Count > 0 && method.ImplementedTypes[0] != null && IsOptionActive(givenOptions, MemberNameOptions.ImplementInterface))
  1963. methName = MemberNameBuilder.GetMemberNameRaw(method.ImplementedTypes[0], givenOptions, scope) + "." + methName;
  1964. if (IsOptionActive(givenOptions, MemberNameOptions.EnclosingType) && !isIndexer) {
  1965. string decTypeName = null;
  1966. if (!IsOptionActive(givenOptions, MemberNameOptions.SmartClassName) || !MemberNameBuilder.IsAggregateVisibleIn(method.DeclaringType, scope))
  1967. decTypeName = MemberNameBuilder.GetMemberNameRaw(method.DeclaringType, givenOptions, scope); ;
  1968. if (decTypeName != null)
  1969. methName = decTypeName + "." + methName;
  1970. }
  1971. return methName;
  1972. }
  1973. static bool HasConstraints(TypeNode templateParameter, ITypeParameter iTypeParameter) {
  1974. if (templateParameter == null || iTypeParameter == null || templateParameter.Name == null)
  1975. return false;
  1976. if ((iTypeParameter.TypeParameterFlags & TypeParameterFlags.SpecialConstraintMask) != TypeParameterFlags.NoSpecialConstraint)
  1977. return true;
  1978. if (templateParameter.BaseType != null && templateParameter.BaseType != SystemTypes.Object)
  1979. return true;
  1980. InterfaceList interfaceList = templateParameter.Interfaces;
  1981. if (interfaceList != null && interfaceList.Count > 0)
  1982. return true;
  1983. return false;
  1984. }
  1985. internal static string GetMemberNameRaw(Member m, MemberNameOptions givenOptions, Scope scope) {
  1986. TypeNode typeNode = m as TypeNode;
  1987. if (typeNode != null) {
  1988. if (typeNode.Name == Looker.NotFound) return "";
  1989. if (IsOptionActive(givenOptions, MemberNameOptions.ExpandNullable) && typeNode.Template == SystemTypes.GenericNullable && typeNode.TemplateArguments != null
  1990. && typeNode.TemplateArguments.Count > 0) {
  1991. return MemberNameBuilder.GetMemberNameRaw(typeNode.TemplateArguments[0], givenOptions, scope) + "?";
  1992. }
  1993. if (IsOptionActive(givenOptions, MemberNameOptions.Keywords)) {
  1994. switch (typeNode.TypeCode) {
  1995. case TypeCode.Boolean: return "bool";
  1996. case TypeCode.Byte: return "byte";
  1997. case TypeCode.Char: return "char";
  1998. case TypeCode.Decimal: return "decimal";
  1999. case TypeCode.Double: return "double";
  2000. case TypeCode.Int16: return "short";
  2001. case TypeCode.Int32: return "int";
  2002. case TypeCode.Int64: return "long";
  2003. case TypeCode.SByte: return "sbyte";
  2004. case TypeCode.Single: return "float";
  2005. case TypeCode.String: return "string";
  2006. case TypeCode.UInt16: return "ushort";
  2007. case TypeCode.UInt32: return "uint";
  2008. case TypeCode.UInt64: return "ulong";
  2009. }
  2010. if (typeNode == SystemTypes.Object) return "object";
  2011. if (typeNode == SystemTypes.Void) return "void";
  2012. }
  2013. switch (typeNode.NodeType) {
  2014. case NodeType.ArrayType: {
  2015. ArrayType aType = (ArrayType)typeNode;
  2016. StringBuilder sb = new StringBuilder(MemberNameBuilder.GetMemberNameRaw(aType.ElementType, givenOptions, scope));
  2017. sb.Append('[');
  2018. for (int i = 0, n = aType.Rank; i < n; i++) {
  2019. if (i == 0 && n > 1) sb.Append('*');
  2020. if (i < n - 1) {
  2021. sb.Append(',');
  2022. if (n > 1) sb.Append('*');
  2023. }
  2024. }
  2025. sb.Append(']');
  2026. return sb.ToString();
  2027. }
  2028. case NodeType.ConstrainedType:
  2029. case NodeType.DelegateNode:
  2030. case NodeType.EnumNode:
  2031. case NodeType.Interface:
  2032. case NodeType.TypeAlias:
  2033. case NodeType.Class:{
  2034. FunctionType fType = typeNode as FunctionType;
  2035. if (fType != null) {
  2036. return "delegate " + MemberNameBuilder.GetMemberNameRaw(fType.ReturnType, givenOptions, scope)
  2037. + " " + MemberNameBuilder.GetSignatureString(fType.Parameters, "(", ")", ", ", givenOptions, scope, false);
  2038. }
  2039. ClosureClass cClass = typeNode as ClosureClass;
  2040. if (cClass != null) {
  2041. MemberList mems = cClass.Members;
  2042. for (int i = 0, n = mems == null ? 0 : mems.Count; i < n; i++) {
  2043. Method meth = mems[i] as Method;
  2044. if (meth == null || meth is InstanceInitializer || (meth.Parameters != null && meth.Parameters.Count != 0)) continue;
  2045. return MemberNameBuilder.GetMemberNameRaw(meth.ReturnType, givenOptions, scope);
  2046. }
  2047. }
  2048. StringBuilder sb = new StringBuilder();
  2049. if (IsOptionActive(givenOptions, MemberNameOptions.Namespace) && typeNode.Namespace != null) {
  2050. string prefix = typeNode.Namespace.Name + ".";
  2051. if (IsOptionActive(givenOptions, MemberNameOptions.SmartNamespaceName) && MemberNameBuilder.IsNamespaceImportedByScope(typeNode.Namespace, scope))
  2052. prefix = "";
  2053. sb.Append(MemberNameBuilder.GetAtPrefixedIfRequired(prefix, givenOptions));
  2054. }
  2055. if (IsOptionActive(givenOptions, MemberNameOptions.EnclosingType) && m.DeclaringType != null) {
  2056. string prefix = "";
  2057. if (!IsOptionActive(givenOptions, MemberNameOptions.SmartClassName) || !MemberNameBuilder.IsAggregateVisibleIn(m.DeclaringType, scope))
  2058. prefix = MemberNameBuilder.GetMemberNameRaw(typeNode.DeclaringType, givenOptions, scope) + "."; ;
  2059. sb.Append(MemberNameBuilder.GetAtPrefixedIfRequired(prefix, givenOptions));
  2060. }
  2061. string typeName = MemberNameBuilder.GetAtPrefixedIfRequired(typeNode.GetUnmangledNameWithoutTypeParameters(), givenOptions);
  2062. if (IsOptionActive(givenOptions, MemberNameOptions.SupressAttributeSuffix) && typeName.EndsWith("Attribute")) {
  2063. typeName = MemberNameBuilder.GetAtPrefixedIfRequired(typeName.Substring(0, typeName.Length - 9), givenOptions);
  2064. }
  2065. sb.Append(typeName);
  2066. if (typeNode.TemplateParameters != null && typeNode.TemplateParameters.Count > 0) {
  2067. if (IsOptionActive(givenOptions, MemberNameOptions.TemplateInfo))
  2068. sb.Append("<>");
  2069. else if(IsOptionActive(givenOptions, MemberNameOptions.TemplateParameters)){
  2070. sb.Append('<');
  2071. int n = typeNode.TemplateParameters.Count;
  2072. for (int i = 0; i < n; i++) {
  2073. sb.Append(MemberNameBuilder.GetMemberNameRaw(typeNode.TemplateParameters[i], givenOptions, scope));
  2074. if (i < n - 1) sb.Append(',');
  2075. }
  2076. sb.Append('>');
  2077. }
  2078. } else if (typeNode.Template != null && typeNode.TemplateArguments != null && typeNode.TemplateArguments.Count > 0
  2079. && IsOptionActive(givenOptions, MemberNameOptions.TemplateArguments)) {
  2080. sb.Append('<');
  2081. int n = typeNode.TemplateArguments.Count;
  2082. for (int i = 0; i < n; i++) {
  2083. sb.Append(MemberNameBuilder.GetMemberNameRaw(typeNode.TemplateArguments[i], givenOptions | MemberNameOptions.Keywords, scope));
  2084. if (i < n - 1) sb.Append(',');
  2085. }
  2086. sb.Append('>');
  2087. }
  2088. return sb.ToString();
  2089. }
  2090. case NodeType.OptionalModifier:
  2091. if (((OptionalModifier)typeNode).Modifier == SystemTypes.NonNullType)
  2092. return MemberNameBuilder.GetMemberNameRaw(((OptionalModifier)typeNode).ModifiedType, givenOptions, scope) + "!";
  2093. goto case NodeType.RequiredModifier;
  2094. case NodeType.RequiredModifier:
  2095. return MemberNameBuilder.GetMemberNameRaw(((TypeModifier)typeNode).ModifiedType, givenOptions, scope);
  2096. case NodeType.Pointer:
  2097. return MemberNameBuilder.GetMemberNameRaw(((Pointer)typeNode).ElementType, givenOptions, scope) + "*";
  2098. case NodeType.Reference:
  2099. return "ref " + MemberNameBuilder.GetMemberNameRaw(((Reference)typeNode).ElementType, givenOptions, scope);
  2100. case NodeType.Refanytype:
  2101. case NodeType.Struct:
  2102. goto case NodeType.Class;
  2103. case NodeType.ClassParameter:
  2104. case NodeType.TypeParameter:
  2105. return MemberNameBuilder.GetAtPrefixedIfRequired(typeNode.Name.ToString(), givenOptions);
  2106. case NodeType.ClassExpression:
  2107. case NodeType.InterfaceExpression:
  2108. case NodeType.TypeExpression:
  2109. case NodeType.ArrayTypeExpression:
  2110. case NodeType.FlexArrayTypeExpression:
  2111. case NodeType.FunctionTypeExpression:
  2112. case NodeType.PointerTypeExpression:
  2113. case NodeType.ReferenceTypeExpression:
  2114. case NodeType.StreamTypeExpression:
  2115. case NodeType.NonEmptyStreamTypeExpression:
  2116. case NodeType.NonNullTypeExpression:
  2117. case NodeType.NonNullableTypeExpression:
  2118. case NodeType.BoxedTypeExpression:
  2119. case NodeType.NullableTypeExpression:
  2120. case NodeType.InvariantTypeExpression:
  2121. case NodeType.TupleTypeExpression:
  2122. case NodeType.TypeIntersectionExpression:
  2123. case NodeType.TypeUnionExpression:
  2124. return typeNode.SourceContext.SourceText;
  2125. }
  2126. }
  2127. Method method = m as Method;
  2128. if (method != null) {
  2129. if (method is InstanceInitializer && method.DeclaringType is DelegateNode) return MemberNameBuilder.GetDelegateConstructorSignature(method, givenOptions, scope);
  2130. StringBuilder sb = new StringBuilder();
  2131. if (IsOptionActive(givenOptions, MemberNameOptions.PutReturnType) && !(method is InstanceInitializer)) {
  2132. sb.Append(MemberNameBuilder.GetMemberNameRaw(method.ReturnType, givenOptions, scope));
  2133. sb.Append(' ');
  2134. }
  2135. bool isIndexer;
  2136. sb.Append(MemberNameBuilder.GetMethodName(method, givenOptions, scope, out isIndexer));
  2137. if (method.TemplateParameters != null && method.TemplateParameters.Count > 0) {
  2138. if (IsOptionActive(givenOptions, MemberNameOptions.TemplateInfo))
  2139. sb.Append("<>");
  2140. else if (IsOptionActive(givenOptions, MemberNameOptions.TemplateParameters)) {
  2141. sb.Append('<');
  2142. int n = method.TemplateParameters.Count;
  2143. for (int i = 0; i < n; i++) {
  2144. sb.Append(MemberNameBuilder.GetMemberNameRaw(method.TemplateParameters[i], givenOptions, scope));
  2145. if (i < n - 1) sb.Append(',');
  2146. }
  2147. sb.Append('>');
  2148. }
  2149. } else if (method.Template != null && method.TemplateArguments != null && method.TemplateArguments.Count > 0
  2150. && IsOptionActive(givenOptions, MemberNameOptions.TemplateArguments)) {
  2151. sb.Append('<');
  2152. int n = method.TemplateArguments.Count;
  2153. for (int i = 0; i < n; i++) {
  2154. sb.Append(MemberNameBuilder.GetMemberNameRaw(method.TemplateArguments[i], givenOptions | MemberNameOptions.Keywords, scope));
  2155. if (i < n - 1) sb.Append(',');
  2156. }
  2157. sb.Append('>');
  2158. }
  2159. if (IsOptionActive(givenOptions, MemberNameOptions.PutSignature)) {
  2160. InstanceInitializer ctor = method as InstanceInitializer;
  2161. bool addNamedParameters = false;
  2162. if (ctor != null) {
  2163. MemberList ml = ctor.GetAttributeConstructorNamedParameters();
  2164. addNamedParameters = ml != null && ml.Count > 0;
  2165. }
  2166. sb.Append(MemberNameBuilder.GetSignatureString(method.Parameters, isIndexer ? "[" : "(", isIndexer ? "]" : ")", ", ", givenOptions, scope, addNamedParameters));
  2167. }
  2168. if (IsOptionActive(givenOptions, MemberNameOptions.PutMethodConstraints) && method.TemplateParameters != null && method.TemplateParameters.Count > 0) {
  2169. TypeNodeList templParameterList = method.TemplateParameters;
  2170. int n = templParameterList.Count;
  2171. for (int i = 0; i < n; i++) {
  2172. TypeNode templParameter = templParameterList[i];
  2173. ITypeParameter tpar = templParameter as ITypeParameter;
  2174. if (!HasConstraints(templParameter, tpar) ) continue;
  2175. sb.AppendFormat(" where {0} :", templParameter.Name.Name);
  2176. bool isFirst = true;
  2177. switch (tpar.TypeParameterFlags & TypeParameterFlags.SpecialConstraintMask) {
  2178. case TypeParameterFlags.DefaultConstructorConstraint:
  2179. sb.Append(" new()");
  2180. isFirst = false;
  2181. break;
  2182. case TypeParameterFlags.ReferenceTypeConstraint:
  2183. sb.Append(" class");
  2184. isFirst = false;
  2185. break;
  2186. case TypeParameterFlags.ValueTypeConstraint:
  2187. sb.Append(" struct");
  2188. isFirst = false;
  2189. break;
  2190. }
  2191. if (templParameter.BaseType != null && templParameter.BaseType != SystemTypes.Object) {
  2192. if (isFirst)
  2193. sb.Append(' ');
  2194. else
  2195. sb.Append(", ");
  2196. sb.Append(MemberNameBuilder.GetMemberNameRaw(templParameterList[i].BaseType, givenOptions, scope));
  2197. isFirst = false;
  2198. }
  2199. if (templParameter.Interfaces != null && templParameter.Interfaces.Count > 0) {
  2200. InterfaceList interfaceList = templParameter.Interfaces;
  2201. int n2 = interfaceList.Count;
  2202. for (int j = 0; j < n2; ++j) {
  2203. if (interfaceList[i] == null) continue;
  2204. if (isFirst)
  2205. sb.Append(' ');
  2206. else
  2207. sb.Append(", ");
  2208. sb.Append(MemberNameBuilder.GetMemberNameRaw(interfaceList[i], givenOptions, scope));
  2209. isFirst = false;
  2210. }
  2211. }
  2212. }
  2213. }
  2214. return sb.ToString();
  2215. }
  2216. Property p = m as Property;
  2217. if (p != null) {
  2218. StringBuilder sb = new StringBuilder();
  2219. if (IsOptionActive(givenOptions, MemberNameOptions.PutReturnType)) {
  2220. sb.Append(MemberNameBuilder.GetMemberNameRaw(p.Type, givenOptions, scope));
  2221. sb.Append(' ');
  2222. }
  2223. string name = null;
  2224. bool isIndexer = false;
  2225. if (p.DeclaringType.DefaultMembers.Contains(p)) {
  2226. name = MemberNameBuilder.GetMemberNameRaw(p.DeclaringType, givenOptions, scope);
  2227. isIndexer = true;
  2228. } else
  2229. name = MemberNameBuilder.GetAtPrefixedIfRequired(p.Name.ToString(), givenOptions);
  2230. if (IsOptionActive(givenOptions, MemberNameOptions.EnclosingType) && !isIndexer) {
  2231. string decTypeName = null;
  2232. if (!IsOptionActive(givenOptions, MemberNameOptions.SmartClassName) || !MemberNameBuilder.IsAggregateVisibleIn(p.DeclaringType, scope))
  2233. decTypeName = MemberNameBuilder.GetMemberNameRaw(p.DeclaringType, givenOptions, scope); ;
  2234. if (decTypeName != null) {
  2235. sb.Append(decTypeName);
  2236. sb.Append(".");
  2237. }
  2238. }
  2239. sb.Append(name);
  2240. if (IsOptionActive(givenOptions, MemberNameOptions.PutSignature))
  2241. sb.Append(MemberNameBuilder.GetSignatureString(p.Parameters, isIndexer ? "[" : "(", isIndexer ? "]" : ")", ", ", givenOptions, scope, false));
  2242. return sb.ToString();
  2243. }
  2244. if (m==null || m.Name == null) return " ";
  2245. return MemberNameBuilder.GetAtPrefixedIfRequired(m.Name.ToString(), givenOptions);
  2246. }
  2247. public static string GetMemberName(Member m, MemberNameOptions givenOptions, Scope scope) {
  2248. if (m is KeywordCompletion)
  2249. return m.Name.Name;
  2250. StringBuilder sb = new StringBuilder();
  2251. if (IsOptionActive(givenOptions, MemberNameOptions.Access)){
  2252. sb.Append(MemberNameBuilder.GetMemberAccessString(m));
  2253. sb.Append(' ');
  2254. }
  2255. if (IsOptionActive(givenOptions, MemberNameOptions.Modifiers)) {
  2256. if (m.IsStatic)
  2257. sb.Append("static ");
  2258. }
  2259. sb.Append(MemberNameBuilder.GetMemberNameRaw(m, givenOptions, scope));
  2260. return sb.ToString();
  2261. }
  2262. }
  2263. }