mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
alternative to #24101 enabled in the context of the generic/template declarations capturing the symbols, not the context of the instantiation of the generics/templates. This was to be in line with where the compiler gives the warnings and changes behavior in a potentially breaking way. However `results` [depends on the old behavior](71d404b314/results.nim (L1428)), so that the callers of the macros provided by results always take advantage of the opensym behavior. To accomodate this, we change the behavior of the old experimental option that `results` uses, `genericsOpenSym`, so that ignores the information of whether or not symbols are intentionally opened and always gives the opensym behavior as long as it's enabled at instantiation time. This should keep `results` working as is. However this differs from the normal opensym switch in that it doesn't generate `nnkOpenSym`. Before it was just a generics-only version of `openSym` along with `templateOpenSym` which was only for templates. So `templateOpenSym` is removed along with this change, but no one appears to have used it. (cherry picked from commit0c3573e4a0)
166 lines
5.9 KiB
Nim
166 lines
5.9 KiB
Nim
#
|
|
#
|
|
# 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
|
|
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("nimHasCastExtendedVm")
|
|
defineSymbol("nimHasGenericsOpenSym2")
|
|
defineSymbol("nimHasNolineTooLong")
|
|
defineSymbol("nimHasGenericsOpenSym3")
|