diff options
Diffstat (limited to 'compiler/condsyms.nim')
-rw-r--r-- | compiler/condsyms.nim | 249 |
1 files changed, 159 insertions, 90 deletions
diff --git a/compiler/condsyms.nim b/compiler/condsyms.nim index be6cb9875..5043fc5d4 100644 --- a/compiler/condsyms.nim +++ b/compiler/condsyms.nim @@ -1,7 +1,7 @@ # # -# The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# The Nim Compiler +# (c) Copyright 2015 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. @@ -9,94 +9,163 @@ # This module handles the conditional symbols. -import - ast, astalgo, hashes, platform, strutils, idents - -var gSymbols*: TStrTable - -proc DefineSymbol*(symbol: string) = - var i = getIdent(symbol) - var sym = StrTableGet(gSymbols, i) - if sym == nil: - new(sym) # circumvent the ID mechanism - sym.kind = skConditional - sym.name = i - StrTableAdd(gSymbols, sym) - sym.position = 1 - -proc UndefSymbol*(symbol: string) = - var sym = StrTableGet(gSymbols, getIdent(symbol)) - if sym != nil: sym.position = 0 - -proc isDefined*(symbol: PIdent): bool = - var sym = StrTableGet(gSymbols, symbol) - result = sym != nil and sym.position == 1 - -proc isDefined*(symbol: string): bool = - result = isDefined(getIdent(symbol)) - -iterator definedSymbolNames*: string = - var it: TTabIter - var s = InitTabIter(it, gSymbols) - while s != nil: - if s.position == 1: yield s.name.s - s = nextIter(it, gSymbols) - -proc countDefinedSymbols*(): int = - var it: TTabIter - var s = InitTabIter(it, gSymbols) - result = 0 - while s != nil: - if s.position == 1: inc(result) - s = nextIter(it, gSymbols) - -proc InitDefines*() = - initStrTable(gSymbols) - DefineSymbol("nimrod") # 'nimrod' is always defined +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: - DefineSymbol("nimhygiene") - DefineSymbol("niminheritable") - DefineSymbol("nimmixin") - DefineSymbol("nimeffects") - DefineSymbol("nimbabel") - - # add platform specific symbols: - case targetCPU - of cpuI386: DefineSymbol("x86") - of cpuIa64: DefineSymbol("itanium") - of cpuAmd64: DefineSymbol("x8664") - else: nil - case targetOS - of osDOS: - DefineSymbol("msdos") - of osWindows: - DefineSymbol("mswindows") - DefineSymbol("win32") - of osLinux, osMorphOS, osSkyOS, osIrix, osPalmOS, osQNX, osAtari, osAix, - osHaiku: - # these are all 'unix-like' - DefineSymbol("unix") - DefineSymbol("posix") - of osSolaris: - DefineSymbol("sunos") - DefineSymbol("unix") - DefineSymbol("posix") - of osNetBSD, osFreeBSD, osOpenBSD: - DefineSymbol("unix") - DefineSymbol("bsd") - DefineSymbol("posix") - of osMacOS: - DefineSymbol("macintosh") - of osMacOSX: - DefineSymbol("macintosh") - DefineSymbol("unix") - DefineSymbol("posix") - else: nil - DefineSymbol("cpu" & $cpu[targetCPU].bit) - DefineSymbol(normalize(endianToStr[cpu[targetCPU].endian])) - DefineSymbol(cpu[targetCPU].name) - DefineSymbol(platform.os[targetOS].name) - if platform.OS[targetOS].props.contains(ospLacksThreadVars): - DefineSymbol("emulatedthreadvars") + 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") |