123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #
- #
- # The Nim Compiler
- # (c) Copyright 2015 Andreas Rumpf
- #
- # See the file "copying.txt", included in this
- # distribution, for details about the copyright.
- #
- # This module handles the conditional symbols.
- import
- std/strtabs
- from options import Feature
- from lineinfos import hintMin, hintMax, warnMin, warnMax
- proc defineSymbol*(symbols: StringTableRef; symbol: string, value: string = "true") =
- symbols[symbol] = value
- proc undefSymbol*(symbols: StringTableRef; symbol: string) =
- symbols.del(symbol)
- #proc lookupSymbol*(symbols: StringTableRef; symbol: string): string =
- # result = if isDefined(symbol): gSymbols[symbol] else: nil
- iterator definedSymbolNames*(symbols: StringTableRef): string =
- for key in keys(symbols):
- yield key
- proc countDefinedSymbols*(symbols: StringTableRef): int =
- symbols.len
- proc initDefines*(symbols: StringTableRef) =
- # for bootstrapping purposes and old code:
- template defineSymbol(s) = symbols.defineSymbol(s)
- defineSymbol("nimhygiene") # deadcode
- defineSymbol("niminheritable") # deadcode
- defineSymbol("nimmixin") # deadcode
- defineSymbol("nimeffects") # deadcode
- defineSymbol("nimbabel") # deadcode
- defineSymbol("nimcomputedgoto") # deadcode
- defineSymbol("nimunion") # deadcode
- defineSymbol("nimnewshared") # deadcode
- defineSymbol("nimNewTypedesc") # deadcode
- defineSymbol("nimrequiresnimframe") # deadcode
- defineSymbol("nimparsebiggestfloatmagic") # deadcode
- defineSymbol("nimlocks") # deadcode
- defineSymbol("nimnode") # deadcode
- defineSymbol("nimvarargstyped") # deadcode
- defineSymbol("nimtypedescfixed") # deadcode
- defineSymbol("nimKnowsNimvm") # deadcode
- defineSymbol("nimArrIdx") # deadcode
- defineSymbol("nimHasalignOf") # deadcode
- defineSymbol("nimDistros") # deadcode
- defineSymbol("nimHasCppDefine") # deadcode
- defineSymbol("nimGenericInOutFlags") # deadcode
- when false: defineSymbol("nimHasOpt") # deadcode
- defineSymbol("nimNoArrayToCstringConversion") # deadcode
- defineSymbol("nimHasRunnableExamples") # deadcode
- defineSymbol("nimNewDot") # deadcode
- defineSymbol("nimHasNilChecks") # deadcode
- defineSymbol("nimSymKind") # deadcode
- defineSymbol("nimVmEqIdent") # deadcode
- defineSymbol("nimNoNil") # deadcode
- defineSymbol("nimNoZeroTerminator") # deadcode
- defineSymbol("nimNotNil") # deadcode
- defineSymbol("nimVmExportFixed") # deadcode
- defineSymbol("nimHasSymOwnerInMacro") # deadcode
- defineSymbol("nimNewRuntime") # deadcode
- defineSymbol("nimIncrSeqV3") # deadcode
- defineSymbol("nimAshr") # deadcode
- defineSymbol("nimNoNilSeqs") # deadcode
- defineSymbol("nimNoNilSeqs2") # deadcode
- defineSymbol("nimHasUserErrors") # deadcode
- defineSymbol("nimUncheckedArrayTyp") # deadcode
- defineSymbol("nimHasTypeof") # deadcode
- defineSymbol("nimErrorProcCanHaveBody") # deadcode
- defineSymbol("nimHasInstantiationOfInMacro") # deadcode
- defineSymbol("nimHasHotCodeReloading") # deadcode
- defineSymbol("nimHasNilSeqs") # deadcode
- defineSymbol("nimHasSignatureHashInMacro") # deadcode
- defineSymbol("nimHasDefault") # deadcode
- defineSymbol("nimMacrosSizealignof") # deadcode
- defineSymbol("nimNoZeroExtendMagic") # deadcode
- defineSymbol("nimMacrosGetNodeId") # deadcode
- defineSymbol("nimFixedForwardGeneric") # deadcode
- defineSymbol("nimToOpenArrayCString") # deadcode
- defineSymbol("nimHasUsed") # deadcode
- defineSymbol("nimnomagic64") # deadcode
- defineSymbol("nimNewShiftOps") # deadcode
- defineSymbol("nimHasCursor") # deadcode
- defineSymbol("nimAlignPragma") # deadcode
- defineSymbol("nimHasExceptionsQuery") # deadcode
- defineSymbol("nimHasIsNamedTuple") # deadcode
- defineSymbol("nimHashOrdinalFixed") # deadcode
- defineSymbol("nimHasSinkInference") # deadcode
- defineSymbol("nimNewIntegerOps") # deadcode
- defineSymbol("nimHasInvariant") # deadcode
- for f in Feature:
- defineSymbol("nimHas" & $f)
- for s in warnMin..warnMax:
- defineSymbol("nimHasWarning" & $s)
- for s in hintMin..hintMax:
- defineSymbol("nimHasHint" & $s)
- defineSymbol("nimFixedOwned")
- defineSymbol("nimHasStyleChecks")
- when defined(nimHasLibFFI):
- # Renaming as we can't conflate input vs output define flags; e.g. this
- # will report the right thing regardless of whether user adds
- # `-d:nimHasLibFFI` in his user config.
- defineSymbol("nimHasLibFFIEnabled") # deadcode
- defineSymbol("nimHasStacktraceMsgs") # deadcode
- defineSymbol("nimDoesntTrackDefects")
- defineSymbol("nimHasLentIterators") # deadcode
- defineSymbol("nimHasDeclaredMagic") # deadcode
- defineSymbol("nimHasStacktracesModule") # deadcode
- defineSymbol("nimHasEffectTraitsModule")
- defineSymbol("nimHasCastPragmaBlocks")
- defineSymbol("nimHasDeclaredLocs")
- defineSymbol("nimHasJsBigIntBackend")
- defineSymbol("nimHasWarningAsError")
- defineSymbol("nimHasHintAsError")
- defineSymbol("nimHasSpellSuggest")
- defineSymbol("nimHasCustomLiterals")
- defineSymbol("nimHasUnifiedTuple")
- defineSymbol("nimHasIterable")
- defineSymbol("nimHasTypeofVoid") # deadcode
- defineSymbol("nimHasDragonBox") # deadcode
- defineSymbol("nimHasHintAll")
- defineSymbol("nimHasTrace")
- defineSymbol("nimHasEffectsOf")
- defineSymbol("nimHasEnforceNoRaises")
- defineSymbol("nimHasTopDownInference")
- defineSymbol("nimHasTemplateRedefinitionPragma")
- defineSymbol("nimHasCstringCase")
- defineSymbol("nimHasCallsitePragma")
- defineSymbol("nimHasWarnCastSizes") # deadcode
- defineSymbol("nimHasOutParams")
- defineSymbol("nimHasSystemRaisesDefect")
- defineSymbol("nimHasWarnUnnamedBreak")
- defineSymbol("nimHasGenericDefine")
- defineSymbol("nimHasDefineAliases")
- defineSymbol("nimHasWarnBareExcept")
- defineSymbol("nimHasDup")
- defineSymbol("nimHasChecksums")
- defineSymbol("nimHasSendable")
- defineSymbol("nimAllowNonVarDestructor")
- defineSymbol("nimHasQuirky")
- defineSymbol("nimHasEnsureMove")
- defineSymbol("nimHasNoReturnError")
- defineSymbol("nimUseStrictDefs")
- defineSymbol("nimHasNolineTooLong")
- defineSymbol("nimHasCastExtendedVm")
- defineSymbol("nimHasWarnStdPrefix")
- defineSymbol("nimHasVtables")
- defineSymbol("nimHasGenericsOpenSym2")
- defineSymbol("nimHasGenericsOpenSym3")
- defineSymbol("nimHasJsNoLambdaLifting")
- defineSymbol("nimHasDefaultFloatRoundtrip")
- defineSymbol("nimHasXorSet")
|