tsets.nim 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. discard """
  2. file: "tsets.nim"
  3. output: '''Ha ein F ist in s!
  4. false'''
  5. """
  6. # Test the handling of sets
  7. import
  8. strutils
  9. proc testSets(s: var set[char]) =
  10. s = {'A', 'B', 'C', 'E'..'G'} + {'Z'} + s
  11. # test sets if the first element is different from 0:
  12. type
  13. TAZ = range['a'..'z']
  14. TAZset = set[TAZ]
  15. TTokType* = enum
  16. tkInvalid, tkEof,
  17. tkSymbol,
  18. tkAddr, tkAnd, tkAs, tkAsm, tkBlock, tkBreak, tkCase, tkCast, tkConst,
  19. tkContinue, tkConverter, tkDiscard, tkDiv, tkElif, tkElse, tkEnd, tkEnum,
  20. tkExcept, tkException, tkFinally, tkFor, tkFrom, tkGeneric, tkIf, tkImplies,
  21. tkImport, tkIn, tkInclude, tkIs, tkIsnot, tkIterator, tkLambda, tkMacro,
  22. tkMethod, tkMod, tkNil, tkNot, tkNotin, tkObject, tkOf, tkOr, tkOut, tkProc,
  23. tkPtr, tkRaise, tkRecord, tkRef, tkReturn, tkShl, tkShr, tkTemplate, tkTry,
  24. tkType, tkVar, tkWhen, tkWhere, tkWhile, tkWith, tkWithout, tkXor, tkYield,
  25. tkIntLit, tkInt8Lit, tkInt16Lit, tkInt32Lit, tkInt64Lit, tkFloatLit,
  26. tkFloat32Lit, tkFloat64Lit, tkStrLit, tkRStrLit, tkTripleStrLit, tkCharLit,
  27. tkRCharLit, tkParLe, tkParRi, tkBracketLe, tkBracketRi, tkCurlyLe,
  28. tkCurlyRi, tkBracketDotLe, tkBracketDotRi,
  29. tkCurlyDotLe, tkCurlyDotRi,
  30. tkParDotLe, tkParDotRi,
  31. tkComma, tkSemiColon, tkColon, tkEquals, tkDot, tkDotDot, tkHat, tkOpr,
  32. tkComment, tkAccent, tkInd, tkSad, tkDed,
  33. tkSpaces, tkInfixOpr, tkPrefixOpr, tkPostfixOpr
  34. TTokTypeRange = range[tkSymbol..tkDed]
  35. TTokTypes* = set[TTokTypeRange]
  36. const
  37. toktypes: TTokTypes = {TTokTypeRange(tkSymbol)..pred(tkIntLit),
  38. tkStrLit..tkTripleStrLit}
  39. var
  40. s: set[char]
  41. a: TAZset
  42. s = {'0'..'9'}
  43. testSets(s)
  44. if 'F' in s: write(stdout, "Ha ein F ist in s!\n")
  45. else: write(stdout, "BUG: F ist nicht in s!\n")
  46. a = {} #{'a'..'z'}
  47. for x in low(TAZ) .. high(TAZ):
  48. incl(a, x)
  49. if x in a: discard
  50. else: write(stdout, "BUG: something not in a!\n")
  51. for x in low(TTokTypeRange) .. high(TTokTypeRange):
  52. if x in tokTypes:
  53. discard
  54. #writeLine(stdout, "the token '$1' is in the set" % repr(x))
  55. #OUT Ha ein F ist in s!
  56. type
  57. TMsgKind* = enum
  58. errUnknown, errIllFormedAstX, errInternal, errCannotOpenFile, errGenerated,
  59. errXCompilerDoesNotSupportCpp, errStringLiteralExpected,
  60. errIntLiteralExpected, errInvalidCharacterConstant,
  61. errClosingTripleQuoteExpected, errClosingQuoteExpected,
  62. errTabulatorsAreNotAllowed, errInvalidToken, errLineTooLong,
  63. errInvalidNumber, errNumberOutOfRange, errNnotAllowedInCharacter,
  64. errClosingBracketExpected, errMissingFinalQuote, errIdentifierExpected,
  65. errNewlineExpected,
  66. errInvalidModuleName,
  67. errOperatorExpected, errTokenExpected, errStringAfterIncludeExpected,
  68. errRecursiveDependencyX, errOnOrOffExpected, errNoneSpeedOrSizeExpected,
  69. errInvalidPragma, errUnknownPragma, errInvalidDirectiveX,
  70. errAtPopWithoutPush, errEmptyAsm, errInvalidIndentation,
  71. errExceptionExpected, errExceptionAlreadyHandled,
  72. errYieldNotAllowedHere, errYieldNotAllowedInTryStmt,
  73. errInvalidNumberOfYieldExpr, errCannotReturnExpr, errAttemptToRedefine,
  74. errStmtInvalidAfterReturn, errStmtExpected, errInvalidLabel,
  75. errInvalidCmdLineOption, errCmdLineArgExpected, errCmdLineNoArgExpected,
  76. errInvalidVarSubstitution, errUnknownVar, errUnknownCcompiler,
  77. errOnOrOffExpectedButXFound, errNoneBoehmRefcExpectedButXFound,
  78. errNoneSpeedOrSizeExpectedButXFound, errGuiConsoleOrLibExpectedButXFound,
  79. errUnknownOS, errUnknownCPU, errGenOutExpectedButXFound,
  80. errArgsNeedRunOption, errInvalidMultipleAsgn, errColonOrEqualsExpected,
  81. errExprExpected, errUndeclaredIdentifier, errUseQualifier, errTypeExpected,
  82. errSystemNeeds, errExecutionOfProgramFailed, errNotOverloadable,
  83. errInvalidArgForX, errStmtHasNoEffect, errXExpectsTypeOrValue,
  84. errXExpectsArrayType, errIteratorCannotBeInstantiated, errExprXAmbiguous,
  85. errConstantDivisionByZero, errOrdinalTypeExpected,
  86. errOrdinalOrFloatTypeExpected, errOverOrUnderflow,
  87. errCannotEvalXBecauseIncompletelyDefined, errChrExpectsRange0_255,
  88. errDynlibRequiresExportc, errUndeclaredFieldX, errNilAccess,
  89. errIndexOutOfBounds, errIndexTypesDoNotMatch, errBracketsInvalidForType,
  90. errValueOutOfSetBounds, errFieldInitTwice, errFieldNotInit,
  91. errExprXCannotBeCalled, errExprHasNoType, errExprXHasNoType,
  92. errCastNotInSafeMode, errExprCannotBeCastedToX, errCommaOrParRiExpected,
  93. errCurlyLeOrParLeExpected, errSectionExpected, errRangeExpected,
  94. errMagicOnlyInSystem, errPowerOfTwoExpected,
  95. errStringMayNotBeEmpty, errCallConvExpected, errProcOnlyOneCallConv,
  96. errSymbolMustBeImported, errExprMustBeBool, errConstExprExpected,
  97. errDuplicateCaseLabel, errRangeIsEmpty, errSelectorMustBeOfCertainTypes,
  98. errSelectorMustBeOrdinal, errOrdXMustNotBeNegative, errLenXinvalid,
  99. errWrongNumberOfVariables, errExprCannotBeRaised, errBreakOnlyInLoop,
  100. errTypeXhasUnknownSize, errConstNeedsConstExpr, errConstNeedsValue,
  101. errResultCannotBeOpenArray, errSizeTooBig, errSetTooBig,
  102. errBaseTypeMustBeOrdinal, errInheritanceOnlyWithNonFinalObjects,
  103. errInheritanceOnlyWithEnums, errIllegalRecursionInTypeX,
  104. errCannotInstantiateX, errExprHasNoAddress, errXStackEscape,
  105. errVarForOutParamNeeded,
  106. errPureTypeMismatch, errTypeMismatch, errButExpected, errButExpectedX,
  107. errAmbiguousCallXYZ, errWrongNumberOfArguments,
  108. errXCannotBePassedToProcVar,
  109. errXCannotBeInParamDecl, errPragmaOnlyInHeaderOfProc, errImplOfXNotAllowed,
  110. errImplOfXexpected, errNoSymbolToBorrowFromFound, errDiscardValueX,
  111. errInvalidDiscard, errIllegalConvFromXtoY, errCannotBindXTwice,
  112. errInvalidOrderInArrayConstructor,
  113. errInvalidOrderInEnumX, errEnumXHasHoles, errExceptExpected, errInvalidTry,
  114. errOptionExpected, errXisNoLabel, errNotAllCasesCovered,
  115. errUnknownSubstitionVar, errComplexStmtRequiresInd, errXisNotCallable,
  116. errNoPragmasAllowedForX, errNoGenericParamsAllowedForX,
  117. errInvalidParamKindX, errDefaultArgumentInvalid, errNamedParamHasToBeIdent,
  118. errNoReturnTypeForX, errConvNeedsOneArg, errInvalidPragmaX,
  119. errXNotAllowedHere, errInvalidControlFlowX,
  120. errXisNoType, errCircumNeedsPointer, errInvalidExpression,
  121. errInvalidExpressionX, errEnumHasNoValueX, errNamedExprExpected,
  122. errNamedExprNotAllowed, errXExpectsOneTypeParam,
  123. errArrayExpectsTwoTypeParams, errInvalidVisibilityX, errInitHereNotAllowed,
  124. errXCannotBeAssignedTo, errIteratorNotAllowed, errXNeedsReturnType,
  125. errNoReturnTypeDeclared,
  126. errInvalidCommandX, errXOnlyAtModuleScope,
  127. errXNeedsParamObjectType,
  128. errTemplateInstantiationTooNested, errInstantiationFrom,
  129. errInvalidIndexValueForTuple, errCommandExpectsFilename,
  130. errMainModuleMustBeSpecified,
  131. errXExpected,
  132. errTIsNotAConcreteType,
  133. errInvalidSectionStart, errGridTableNotImplemented, errGeneralParseError,
  134. errNewSectionExpected, errWhitespaceExpected, errXisNoValidIndexFile,
  135. errCannotRenderX, errVarVarTypeNotAllowed, errInstantiateXExplicitly,
  136. errOnlyACallOpCanBeDelegator, errUsingNoSymbol,
  137. errMacroBodyDependsOnGenericTypes,
  138. errDestructorNotGenericEnough,
  139. errInlineIteratorsAsProcParams,
  140. errXExpectsTwoArguments,
  141. errXExpectsObjectTypes, errXcanNeverBeOfThisSubtype, errTooManyIterations,
  142. errCannotInterpretNodeX, errFieldXNotFound, errInvalidConversionFromTypeX,
  143. errAssertionFailed, errCannotGenerateCodeForX, errXRequiresOneArgument,
  144. errUnhandledExceptionX, errCyclicTree, errXisNoMacroOrTemplate,
  145. errXhasSideEffects, errIteratorExpected, errLetNeedsInit,
  146. errThreadvarCannotInit, errWrongSymbolX, errIllegalCaptureX,
  147. errXCannotBeClosure, errXMustBeCompileTime,
  148. errCannotInferTypeOfTheLiteral,
  149. errCannotInferReturnType,
  150. errGenericLambdaNotAllowed,
  151. errCompilerDoesntSupportTarget,
  152. errUser,
  153. warnCannotOpenFile,
  154. warnOctalEscape, warnXIsNeverRead, warnXmightNotBeenInit,
  155. warnDeprecated, warnConfigDeprecated,
  156. warnSmallLshouldNotBeUsed, warnUnknownMagic, warnRedefinitionOfLabel,
  157. warnUnknownSubstitutionX, warnLanguageXNotSupported,
  158. warnFieldXNotSupported, warnCommentXIgnored,
  159. warnNilStatement, warnTypelessParam,
  160. warnDifferentHeaps, warnWriteToForeignHeap, warnUnsafeCode,
  161. warnEachIdentIsTuple, warnShadowIdent,
  162. warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2,
  163. warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
  164. warnUser,
  165. hintSuccess, hintSuccessX,
  166. hintLineTooLong, hintXDeclaredButNotUsed, hintConvToBaseNotNeeded,
  167. hintConvFromXtoItselfNotNeeded, hintExprAlwaysX, hintQuitCalled,
  168. hintProcessing, hintCodeBegin, hintCodeEnd, hintConf, hintPath,
  169. hintConditionAlwaysTrue, hintName, hintPattern,
  170. hintUser
  171. const
  172. fatalMin* = errUnknown
  173. fatalMax* = errInternal
  174. errMin* = errUnknown
  175. errMax* = errUser
  176. warnMin* = warnCannotOpenFile
  177. warnMax* = pred(hintSuccess)
  178. hintMin* = hintSuccess
  179. hintMax* = high(TMsgKind)
  180. type
  181. TNoteKind* = range[warnMin..hintMax] # "notes" are warnings or hints
  182. TNoteKinds* = set[TNoteKind]
  183. var
  184. gNotes*: TNoteKinds = {low(TNoteKind)..high(TNoteKind)} -
  185. {warnShadowIdent, warnUninit,
  186. warnProveField, warnProveIndex, warnGcUnsafe}
  187. #import compiler.msgs
  188. echo warnUninit in gNotes