diff options
-rw-r--r-- | changelogs/changelog_2_0_0.md | 17 | ||||
-rw-r--r-- | compiler/ast.nim | 3 | ||||
-rw-r--r-- | compiler/condsyms.nim | 1 | ||||
-rw-r--r-- | compiler/lookups.nim | 61 | ||||
-rw-r--r-- | compiler/magicsys.nim | 1 | ||||
-rw-r--r-- | compiler/pragmas.nim | 15 | ||||
-rw-r--r-- | compiler/semgnrc.nim | 4 | ||||
-rw-r--r-- | tests/deprecated/tdeprecated.nim | 2 |
8 files changed, 48 insertions, 56 deletions
diff --git a/changelogs/changelog_2_0_0.md b/changelogs/changelog_2_0_0.md index d2c12a355..2de86fb69 100644 --- a/changelogs/changelog_2_0_0.md +++ b/changelogs/changelog_2_0_0.md @@ -231,6 +231,23 @@ unlisted exceptions) and explicitly raising destructors are implementation defined behavior. +- The very old, undocumented deprecated pragma statement syntax for + deprecated aliases is now a no-op. The regular deprecated pragma syntax is + generally sufficient instead. + + ```nim + # now does nothing: + {.deprecated: [OldName: NewName].} + + # instead use: + type OldName* {.deprecated: "use NewName instead".} = NewName + const oldName* {.deprecated: "use newName instead".} = newName + ``` + + `defined(nimalias)` can be used to check for versions when this syntax was + available; however since code that used this syntax is usually very old, + these deprecated aliases are likely not used anymore and it may make sense + to simply remove these statements. ## Standard library additions and changes diff --git a/compiler/ast.nim b/compiler/ast.nim index 815cb00dc..41e538742 100644 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -620,13 +620,12 @@ type # file (it is loaded on demand, which may # mean: never) skPackage, # symbol is a package (used for canonicalization) - skAlias # an alias (needs to be resolved immediately) TSymKinds* = set[TSymKind] const routineKinds* = {skProc, skFunc, skMethod, skIterator, skConverter, skMacro, skTemplate} - ExportableSymKinds* = {skVar, skLet, skConst, skType, skEnumField, skStub, skAlias} + routineKinds + ExportableSymKinds* = {skVar, skLet, skConst, skType, skEnumField, skStub} + routineKinds tfUnion* = tfNoSideEffect tfGcSafe* = tfThread diff --git a/compiler/condsyms.nim b/compiler/condsyms.nim index 3d14408a3..ea635e52e 100644 --- a/compiler/condsyms.nim +++ b/compiler/condsyms.nim @@ -45,7 +45,6 @@ proc initDefines*(symbols: StringTableRef) = defineSymbol("nimNewTypedesc") # deadcode defineSymbol("nimrequiresnimframe") # deadcode defineSymbol("nimparsebiggestfloatmagic") # deadcode - defineSymbol("nimalias") # deadcode defineSymbol("nimlocks") # deadcode defineSymbol("nimnode") # deadcode defineSymbol("nimvarargstyped") # deadcode diff --git a/compiler/lookups.nim b/compiler/lookups.nim index 188bb1a6b..9f376a602 100644 --- a/compiler/lookups.nim +++ b/compiler/lookups.nim @@ -15,7 +15,7 @@ when defined(nimPreviewSlimSystem): import intsets, ast, astalgo, idents, semdata, types, msgs, options, - renderer, nimfix/prettybase, lineinfos, modulegraphs, astmsgs, sets, wordrecg + renderer, lineinfos, modulegraphs, astmsgs, sets, wordrecg proc ensureNoMissingOrUnusedSymbols(c: PContext; scope: PScope) @@ -94,17 +94,6 @@ iterator localScopesFrom*(c: PContext; scope: PScope): PScope = if s == c.topLevelScope: break yield s -proc skipAlias*(s: PSym; n: PNode; conf: ConfigRef): PSym = - if s == nil or s.kind != skAlias: - result = s - else: - result = s.owner - if conf.cmd == cmdNimfix: - prettybase.replaceDeprecated(conf, n.info, s, result) - else: - message(conf, n.info, warnDeprecated, "use " & result.name.s & " instead; " & - s.name.s & " is deprecated") - proc isShadowScope*(s: PScope): bool {.inline.} = s.parent != nil and s.parent.depthLevel == s.depthLevel @@ -568,13 +557,13 @@ proc lookUp*(c: PContext, n: PNode): PSym = var amb = false case n.kind of nkIdent: - result = searchInScopes(c, n.ident, amb).skipAlias(n, c.config) + result = searchInScopes(c, n.ident, amb) if result == nil: result = errorUndeclaredIdentifierHint(c, n, n.ident) of nkSym: result = n.sym of nkAccQuoted: var ident = considerQuotedIdent(c, n) - result = searchInScopes(c, ident, amb).skipAlias(n, c.config) + result = searchInScopes(c, ident, amb) if result == nil: result = errorUndeclaredIdentifierHint(c, n, ident) else: internalError(c.config, n.info, "lookUp") @@ -596,9 +585,9 @@ proc qualifiedLookUp*(c: PContext, n: PNode, flags: set[TLookupFlag]): PSym = var amb = false var ident = considerQuotedIdent(c, n) if checkModule in flags: - result = searchInScopes(c, ident, amb).skipAlias(n, c.config) + result = searchInScopes(c, ident, amb) else: - let candidates = searchInScopesFilterBy(c, ident, allExceptModule) #.skipAlias(n, c.config) + let candidates = searchInScopesFilterBy(c, ident, allExceptModule) if candidates.len > 0: result = candidates[0] amb = candidates.len > 1 @@ -630,13 +619,13 @@ proc qualifiedLookUp*(c: PContext, n: PNode, flags: set[TLookupFlag]): PSym = ident = considerQuotedIdent(c, n[1]) if ident != nil: if m == c.module: - result = strTableGet(c.topLevelScope.symbols, ident).skipAlias(n, c.config) + result = strTableGet(c.topLevelScope.symbols, ident) else: if c.importModuleLookup.getOrDefault(m.name.id).len > 1: var amb: bool result = errorUseQualifier(c, n.info, m, amb) else: - result = someSym(c.graph, m, ident).skipAlias(n, c.config) + result = someSym(c.graph, m, ident) if result == nil and checkUndeclared in flags: result = errorUndeclaredIdentifierHint(c, n[1], ident) elif n[1].kind == nkSym: @@ -660,7 +649,7 @@ proc initOverloadIter*(o: var TOverloadIter, c: PContext, n: PNode): PSym = var scope = c.currentScope o.mode = oimNoQualifier while true: - result = initIdentIter(o.it, scope.symbols, ident).skipAlias(n, c.config) + result = initIdentIter(o.it, scope.symbols, ident) if result != nil: o.currentScope = scope break @@ -668,7 +657,7 @@ proc initOverloadIter*(o: var TOverloadIter, c: PContext, n: PNode): PSym = scope = scope.parent if scope == nil: for i in 0..c.imports.high: - result = initIdentIter(o.mit, o.marked, c.imports[i], ident, c.graph).skipAlias(n, c.config) + result = initIdentIter(o.mit, o.marked, c.imports[i], ident, c.graph) if result != nil: o.currentScope = nil o.importIdx = i @@ -691,10 +680,10 @@ proc initOverloadIter*(o: var TOverloadIter, c: PContext, n: PNode): PSym = if o.m == c.module: # a module may access its private members: result = initIdentIter(o.it, c.topLevelScope.symbols, - ident).skipAlias(n, c.config) + ident) o.mode = oimSelfModule else: - result = initModuleIter(o.mit, c.graph, o.m, ident).skipAlias(n, c.config) + result = initModuleIter(o.mit, c.graph, o.m, ident) else: noidentError(c.config, n[1], n) result = errorSym(c, n[1]) @@ -727,7 +716,7 @@ proc nextOverloadIterImports(o: var TOverloadIter, c: PContext, n: PNode): PSym var idx = o.importIdx+1 o.importIdx = c.imports.len # assume the other imported modules lack this symbol too while idx < c.imports.len: - result = initIdentIter(o.mit, o.marked, c.imports[idx], o.it.name, c.graph).skipAlias(n, c.config) + result = initIdentIter(o.mit, o.marked, c.imports[idx], o.it.name, c.graph) if result != nil: # oh, we were wrong, some other module had the symbol, so remember that: o.importIdx = idx @@ -737,7 +726,7 @@ proc nextOverloadIterImports(o: var TOverloadIter, c: PContext, n: PNode): PSym proc symChoiceExtension(o: var TOverloadIter; c: PContext; n: PNode): PSym = assert o.currentScope == nil while o.importIdx < c.imports.len: - result = initIdentIter(o.mit, o.marked, c.imports[o.importIdx], o.it.name, c.graph).skipAlias(n, c.config) + result = initIdentIter(o.mit, o.marked, c.imports[o.importIdx], o.it.name, c.graph) #while result != nil and result.id in o.marked: # result = nextIdentIter(o.it, o.marked, c.imports[o.importIdx]) if result != nil: @@ -752,29 +741,29 @@ proc nextOverloadIter*(o: var TOverloadIter, c: PContext, n: PNode): PSym = of oimNoQualifier: if o.currentScope != nil: assert o.importIdx < 0 - result = nextIdentIter(o.it, o.currentScope.symbols).skipAlias(n, c.config) + result = nextIdentIter(o.it, o.currentScope.symbols) while result == nil: o.currentScope = o.currentScope.parent if o.currentScope != nil: - result = initIdentIter(o.it, o.currentScope.symbols, o.it.name).skipAlias(n, c.config) + result = initIdentIter(o.it, o.currentScope.symbols, o.it.name) # BUGFIX: o.it.name <-> n.ident else: o.importIdx = 0 if c.imports.len > 0: - result = initIdentIter(o.mit, o.marked, c.imports[o.importIdx], o.it.name, c.graph).skipAlias(n, c.config) + result = initIdentIter(o.mit, o.marked, c.imports[o.importIdx], o.it.name, c.graph) if result == nil: result = nextOverloadIterImports(o, c, n) break elif o.importIdx < c.imports.len: - result = nextIdentIter(o.mit, o.marked, c.imports[o.importIdx], c.graph).skipAlias(n, c.config) + result = nextIdentIter(o.mit, o.marked, c.imports[o.importIdx], c.graph) if result == nil: result = nextOverloadIterImports(o, c, n) else: result = nil of oimSelfModule: - result = nextIdentIter(o.it, c.topLevelScope.symbols).skipAlias(n, c.config) + result = nextIdentIter(o.it, c.topLevelScope.symbols) of oimOtherModule: - result = nextModuleIter(o.mit, c.graph).skipAlias(n, c.config) + result = nextModuleIter(o.mit, c.graph) of oimSymChoice: if o.symChoiceIndex < n.len: result = n[o.symChoiceIndex].sym @@ -785,12 +774,12 @@ proc nextOverloadIter*(o: var TOverloadIter, c: PContext, n: PNode): PSym = o.mode = oimSymChoiceLocalLookup o.currentScope = c.currentScope result = firstIdentExcluding(o.it, o.currentScope.symbols, - n[0].sym.name, o.marked).skipAlias(n, c.config) + n[0].sym.name, o.marked) while result == nil: o.currentScope = o.currentScope.parent if o.currentScope != nil: result = firstIdentExcluding(o.it, o.currentScope.symbols, - n[0].sym.name, o.marked).skipAlias(n, c.config) + n[0].sym.name, o.marked) else: o.importIdx = 0 result = symChoiceExtension(o, c, n) @@ -799,12 +788,12 @@ proc nextOverloadIter*(o: var TOverloadIter, c: PContext, n: PNode): PSym = incl o.marked, result.id of oimSymChoiceLocalLookup: if o.currentScope != nil: - result = nextIdentExcluding(o.it, o.currentScope.symbols, o.marked).skipAlias(n, c.config) + result = nextIdentExcluding(o.it, o.currentScope.symbols, o.marked) while result == nil: o.currentScope = o.currentScope.parent if o.currentScope != nil: result = firstIdentExcluding(o.it, o.currentScope.symbols, - n[0].sym.name, o.marked).skipAlias(n, c.config) + n[0].sym.name, o.marked) else: o.importIdx = 0 result = symChoiceExtension(o, c, n) @@ -813,10 +802,10 @@ proc nextOverloadIter*(o: var TOverloadIter, c: PContext, n: PNode): PSym = incl o.marked, result.id elif o.importIdx < c.imports.len: - result = nextIdentIter(o.mit, o.marked, c.imports[o.importIdx], c.graph).skipAlias(n, c.config) + result = nextIdentIter(o.mit, o.marked, c.imports[o.importIdx], c.graph) #assert result.id notin o.marked #while result != nil and result.id in o.marked: - # result = nextIdentIter(o.it, c.imports[o.importIdx]).skipAlias(n, c.config) + # result = nextIdentIter(o.it, c.imports[o.importIdx]) if result == nil: inc o.importIdx result = symChoiceExtension(o, c, n) diff --git a/compiler/magicsys.nim b/compiler/magicsys.nim index 8261b14c7..becde13e6 100644 --- a/compiler/magicsys.nim +++ b/compiler/magicsys.nim @@ -28,7 +28,6 @@ proc getSysSym*(g: ModuleGraph; info: TLineInfo; name: string): PSym = localError(g.config, info, "system module needs: " & name) result = newSym(skError, getIdent(g.cache, name), g.idgen, g.systemModule, g.systemModule.info, {}) result.typ = newType(tyError, nextTypeId(g.idgen), g.systemModule) - if result.kind == skAlias: result = result.owner proc getSysMagic*(g: ModuleGraph; info: TLineInfo; name: string, m: TMagic): PSym = let id = getIdent(g.cache, name) diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim index 31414063a..1857ef3ce 100644 --- a/compiler/pragmas.nim +++ b/compiler/pragmas.nim @@ -736,19 +736,8 @@ proc deprecatedStmt(c: PContext; outerPragma: PNode) = return if pragma.kind != nkBracket: localError(c.config, pragma.info, "list of key:value pairs expected"); return - for n in pragma: - if n.kind in nkPragmaCallKinds and n.len == 2: - let dest = qualifiedLookUp(c, n[1], {checkUndeclared}) - if dest == nil or dest.kind in routineKinds: - localError(c.config, n.info, warnUser, "the .deprecated pragma is unreliable for routines") - let src = considerQuotedIdent(c, n[0]) - let alias = newSym(skAlias, src, c.idgen, dest, n[0].info, c.config.options) - incl(alias.flags, sfExported) - if sfCompilerProc in dest.flags: markCompilerProc(c, alias) - addInterfaceDecl(c, alias) - n[1] = newSymNode(dest) - else: - localError(c.config, n.info, "key:value pair expected") + message(c.config, pragma.info, warnDeprecated, + "deprecated statement is now a no-op, use regular deprecated pragma") proc pragmaGuard(c: PContext; it: PNode; kind: TSymKind): PSym = if it.kind notin nkPragmaCallKinds or it.len != 2: diff --git a/compiler/semgnrc.nim b/compiler/semgnrc.nim index 543bd1132..01146bb7c 100644 --- a/compiler/semgnrc.nim +++ b/compiler/semgnrc.nim @@ -115,7 +115,7 @@ proc lookup(c: PContext, n: PNode, flags: TSemGenericFlags, result = n let ident = considerQuotedIdent(c, n) var amb = false - var s = searchInScopes(c, ident, amb).skipAlias(n, c.config) + var s = searchInScopes(c, ident, amb) if s == nil: s = strTableGet(c.pureEnumFields, ident) #if s != nil and contains(c.ambiguousSymbols, s.id): @@ -152,7 +152,7 @@ proc fuzzyLookup(c: PContext, n: PNode, flags: TSemGenericFlags, result = n let n = n[1] let ident = considerQuotedIdent(c, n) - var candidates = searchInScopesFilterBy(c, ident, routineKinds) # .skipAlias(n, c.config) + var candidates = searchInScopesFilterBy(c, ident, routineKinds) if candidates.len > 0: let s = candidates[0] # XXX take into account the other candidates! isMacro = s.kind in {skTemplate, skMacro} diff --git a/tests/deprecated/tdeprecated.nim b/tests/deprecated/tdeprecated.nim index ba8d579ad..51c0dc14b 100644 --- a/tests/deprecated/tdeprecated.nim +++ b/tests/deprecated/tdeprecated.nim @@ -35,7 +35,7 @@ block: # issue #8063 Foo = enum fooX - {.deprecated: [fooA: fooX].} + const fooA {.deprecated: "use fooX instead".} = fooX let foo: Foo = fooA echo foo |