From a509d6f7d5e5e88126b4d55fcb39264d7aef8d24 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:23:55 +0800 Subject: [PATCH] make owner a private field of `PSym` --- compiler/ast.nim | 9 ++++++--- compiler/evaltempl.nim | 2 +- compiler/ic/ic.nim | 4 ++-- compiler/modules.nim | 2 +- compiler/sem.nim | 2 +- compiler/semexprs.nim | 2 +- compiler/seminst.nim | 8 ++++---- compiler/semmagic.nim | 6 +++--- compiler/semstmts.nim | 22 +++++++++++----------- compiler/semtypes.nim | 2 +- compiler/semtypinst.nim | 2 +- compiler/transf.nim | 2 +- 12 files changed, 33 insertions(+), 30 deletions(-) diff --git a/compiler/ast.nim b/compiler/ast.nim index a342e1ea7136..f665444b17ae 100644 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -706,7 +706,7 @@ type when defined(nimsuggest): endInfo*: TLineInfo hasUserSpecifiedType*: bool # used for determining whether to display inlay type hints - owner*: PSym + ownerField: PSym flags*: TSymFlags ast*: PNode # syntax tree of proc, iterator, etc.: # the whole proc including header; this is used @@ -814,6 +814,9 @@ type template nodeId(n: PNode): int = cast[int](n) +template owner*(s: PSym): PSym = + s.ownerField + type Gconfig = object # we put comments in a side channel to avoid increasing `sizeof(TNode)`, which # reduces memory usage given that `PNode` is the most allocated type by far. @@ -1197,7 +1200,7 @@ proc newSym*(symKind: TSymKind, name: PIdent, idgen: IdGenerator; owner: PSym, assert not name.isNil let id = nextSymId idgen result = PSym(name: name, kind: symKind, flags: {}, info: info, itemId: id, - options: options, owner: owner, offset: defaultOffset, + options: options, ownerField: owner, offset: defaultOffset, disamb: getOrDefault(idgen.disambTable, name).int32) idgen.disambTable.inc name when false: @@ -1707,7 +1710,7 @@ proc transitionNoneToSym*(n: PNode) = template transitionSymKindCommon*(k: TSymKind) = let obj {.inject.} = s[] s[] = TSym(kind: k, itemId: obj.itemId, magic: obj.magic, typ: obj.typ, name: obj.name, - info: obj.info, owner: obj.owner, flags: obj.flags, ast: obj.ast, + info: obj.info, ownerField: obj.ownerField, flags: obj.flags, ast: obj.ast, options: obj.options, position: obj.position, offset: obj.offset, loc: obj.loc, annex: obj.annex, constraint: obj.constraint) when hasFFI: diff --git a/compiler/evaltempl.nim b/compiler/evaltempl.nim index 77c136d632f8..199a047d4aa9 100644 --- a/compiler/evaltempl.nim +++ b/compiler/evaltempl.nim @@ -64,7 +64,7 @@ proc evalTemplateAux(templ, actual: PNode, c: var TemplCtx, result: PNode) = if x == nil: x = copySym(s, c.idgen) # sem'check needs to set the owner properly later, see bug #9476 - x.owner = nil # c.genSymOwner + x.owner() = nil # c.genSymOwner #if x.kind == skParam and x.owner.kind == skModule: # internalAssert c.config, false idTablePut(c.mapping, s, x) diff --git a/compiler/ic/ic.nim b/compiler/ic/ic.nim index 8e81633efe3a..23cff281b7f3 100644 --- a/compiler/ic/ic.nim +++ b/compiler/ic/ic.nim @@ -942,7 +942,7 @@ proc symBodyFromPacked(c: var PackedDecoder; g: var PackedModuleGraph; result.guard = loadSym(c, g, si, s.guard) result.bitsize = s.bitsize result.alignment = s.alignment - result.owner = loadSym(c, g, si, s.owner) + result.owner() = loadSym(c, g, si, s.owner) let externalName = g[si].fromDisk.strings[s.externalName] if externalName != "": result.loc.snippet = externalName @@ -1062,7 +1062,7 @@ proc setupLookupTables(g: var PackedModuleGraph; conf: ConfigRef; cache: IdentCa name: getIdent(cache, splitFile(filename).name), info: newLineInfo(fileIdx, 1, 1), position: int(fileIdx)) - m.module.owner = getPackage(conf, cache, fileIdx) + m.module.owner() = getPackage(conf, cache, fileIdx) m.module.flags = m.fromDisk.moduleFlags proc loadToReplayNodes(g: var PackedModuleGraph; conf: ConfigRef; cache: IdentCache; diff --git a/compiler/modules.nim b/compiler/modules.nim index 6e2af8bcc790..6b893f11ee61 100644 --- a/compiler/modules.nim +++ b/compiler/modules.nim @@ -25,7 +25,7 @@ template getModuleIdent(graph: ModuleGraph, filename: AbsoluteFile): PIdent = proc partialInitModule*(result: PSym; graph: ModuleGraph; fileIdx: FileIndex; filename: AbsoluteFile) = let packSym = getPackage(graph, fileIdx) - result.owner = packSym + result.owner() = packSym result.position = int fileIdx proc newModule*(graph: ModuleGraph; fileIdx: FileIndex): PSym = diff --git a/compiler/sem.nim b/compiler/sem.nim index 1866d85fcbe7..43da92285474 100644 --- a/compiler/sem.nim +++ b/compiler/sem.nim @@ -256,7 +256,7 @@ proc newSymG*(kind: TSymKind, n: PNode, c: PContext): PSym = # when there is a nested proc inside a template, semtmpl # will assign a wrong owner during the first pass over the # template; we must fix it here: see #909 - result.owner = getCurrOwner(c) + result.owner() = getCurrOwner(c) else: result = newSym(kind, considerQuotedIdent(c, n), c.idgen, getCurrOwner(c), n.info) if find(result.name.s, '`') >= 0: diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index b87c854aa5ba..34f0f8ccae75 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -2965,7 +2965,7 @@ proc semBlock(c: PContext, n: PNode; flags: TExprFlags; expectedType: PType = ni if sfGenSym notin labl.flags: addDecl(c, labl) elif labl.owner == nil: - labl.owner = c.p.owner + labl.owner() = c.p.owner n[0] = newSymNode(labl, n[0].info) suggestSym(c.graph, n[0].info, labl, c.graph.usageSym) styleCheckDef(c, labl) diff --git a/compiler/seminst.nim b/compiler/seminst.nim index b9b1a97be102..6d37b5354d3c 100644 --- a/compiler/seminst.nim +++ b/compiler/seminst.nim @@ -111,7 +111,7 @@ proc freshGenSyms(c: PContext; n: PNode, owner, orig: PSym, symMap: var SymMappi elif s.owner == nil or s.owner.kind == skPackage: #echo "copied this ", s.name.s x = copySym(s, c.idgen) - x.owner = owner + x.owner() = owner idTablePut(symMap, s, x) n.sym = x else: @@ -273,7 +273,7 @@ proc instantiateProcType(c: PContext, pt: LayeredIdTable, internalAssert c.config, originalParams[i].kind == nkSym let oldParam = originalParams[i].sym let param = copySym(oldParam, c.idgen) - param.owner = prc + param.owner() = prc param.typ = result[i] # The default value is instantiated and fitted against the final @@ -395,9 +395,9 @@ proc generateInstance(c: PContext, fn: PSym, pt: LayeredIdTable, let passc = getLocalPassC(c, producer) if passc != "": #pass the local compiler options to the consumer module too extccomp.addLocalCompileOption(c.config, passc, toFullPathConsiderDirty(c.config, c.module.info.fileIndex)) - result.owner = c.module + result.owner() = c.module else: - result.owner = fn + result.owner() = fn result.ast = n pushOwner(c, result) diff --git a/compiler/semmagic.nim b/compiler/semmagic.nim index a12e933e79ca..e65f1445ad88 100644 --- a/compiler/semmagic.nim +++ b/compiler/semmagic.nim @@ -453,7 +453,7 @@ proc turnFinalizerIntoDestructor(c: PContext; orig: PSym; info: TLineInfo): PSym result = copySym(orig, c.idgen) result.info = info result.flags.incl sfFromGeneric - result.owner = orig + result.owner() = orig let origParamType = orig.typ.firstParamType let newParamType = makeVarType(result, origParamType.skipTypes(abstractPtrs), c.idgen) let oldParam = orig.typ.n[1].sym @@ -524,7 +524,7 @@ proc semNewFinalize(c: PContext; n: PNode): PNode = discard "already turned this one into a finalizer" else: if fin.instantiatedFrom != nil and fin.instantiatedFrom != fin.owner: #undo move - fin.owner = fin.instantiatedFrom + fin.owner() = fin.instantiatedFrom let wrapperSym = newSym(skProc, getIdent(c.graph.cache, fin.name.s & "FinalizerWrapper"), c.idgen, fin.owner, fin.info) let selfSymNode = newSymNode(copySym(fin.ast[paramsPos][1][0].sym, c.idgen)) selfSymNode.typ = fin.typ.firstParamType @@ -539,7 +539,7 @@ proc semNewFinalize(c: PContext; n: PNode): PNode = genericParams = fin.ast[genericParamsPos], pragmas = fin.ast[pragmasPos], exceptions = fin.ast[miscPos]), {}) var transFormedSym = turnFinalizerIntoDestructor(c, wrapperSym, wrapper.info) - transFormedSym.owner = fin + transFormedSym.owner() = fin if c.config.backend == backendCpp or sfCompileToCpp in c.module.flags: let origParamType = transFormedSym.ast[bodyPos][1].typ let selfSymbolType = makePtrType(c, origParamType.skipTypes(abstractPtrs)) diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 3dad09edfd48..506e0694c610 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -908,7 +908,7 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode = if sfGenSym notin v.flags: if not isDiscardUnderscore(v): addInterfaceDecl(c, v) else: - if v.owner == nil: v.owner = c.p.owner + if v.owner == nil: v.owner() = c.p.owner when oKeepVariableNames: if c.inUnrolledContext > 0: v.flags.incl(sfShadowed) else: @@ -1026,7 +1026,7 @@ proc semConst(c: PContext, n: PNode): PNode = when defined(nimsuggest): v.hasUserSpecifiedType = hasUserSpecifiedType if sfGenSym notin v.flags: addInterfaceDecl(c, v) - elif v.owner == nil: v.owner = getCurrOwner(c) + elif v.owner == nil: v.owner() = getCurrOwner(c) styleCheckDef(c, v) onDef(a[j].info, v) @@ -1097,7 +1097,7 @@ proc semForVars(c: PContext, n: PNode; flags: TExprFlags): PNode = v.typ = iter[i] n[0][i] = newSymNode(v) if sfGenSym notin v.flags and not isDiscardUnderscore(v): addDecl(c, v) - elif v.owner == nil: v.owner = getCurrOwner(c) + elif v.owner == nil: v.owner() = getCurrOwner(c) else: var v = symForVar(c, n[0]) if getCurrOwner(c).kind == skModule: incl(v.flags, sfGlobal) @@ -1107,7 +1107,7 @@ proc semForVars(c: PContext, n: PNode; flags: TExprFlags): PNode = v.typ = iterBase n[0] = newSymNode(v) if sfGenSym notin v.flags and not isDiscardUnderscore(v): addDecl(c, v) - elif v.owner == nil: v.owner = getCurrOwner(c) + elif v.owner == nil: v.owner() = getCurrOwner(c) else: localError(c.config, n.info, errWrongNumberOfVariables) elif n.len-2 != iterAfterVarLent.len: @@ -1141,7 +1141,7 @@ proc semForVars(c: PContext, n: PNode; flags: TExprFlags): PNode = v.typ = iter[i][j] n[i][j] = newSymNode(v) if not isDiscardUnderscore(v): addDecl(c, v) - elif v.owner == nil: v.owner = getCurrOwner(c) + elif v.owner == nil: v.owner() = getCurrOwner(c) else: var v = symForVar(c, n[i]) if getCurrOwner(c).kind == skModule: incl(v.flags, sfGlobal) @@ -1156,7 +1156,7 @@ proc semForVars(c: PContext, n: PNode; flags: TExprFlags): PNode = n[i] = newSymNode(v) if sfGenSym notin v.flags: if not isDiscardUnderscore(v): addDecl(c, v) - elif v.owner == nil: v.owner = getCurrOwner(c) + elif v.owner == nil: v.owner() = getCurrOwner(c) inc(c.p.nestedLoopCounter) let oldBreakInLoop = c.p.breakInLoop c.p.breakInLoop = true @@ -1475,7 +1475,7 @@ proc typeDefLeftSidePass(c: PContext, typeSection: PNode, i: int) = s = typsym # add it here, so that recursive types are possible: if sfGenSym notin s.flags: addInterfaceDecl(c, s) - elif s.owner == nil: s.owner = getCurrOwner(c) + elif s.owner == nil: s.owner() = getCurrOwner(c) if name.kind == nkPragmaExpr: if name[0].kind == nkPostfix: @@ -1975,7 +1975,7 @@ proc semInferredLambda(c: PContext, pt: LayeredIdTable, n: PNode): PNode = let original = n[namePos].sym let s = original #copySym(original, false) #incl(s.flags, sfFromGeneric) - #s.owner = original + #s.owner() = original n = replaceTypesInBody(c, pt, n, original) result = n @@ -1990,7 +1990,7 @@ proc semInferredLambda(c: PContext, pt: LayeredIdTable, n: PNode): PNode = tyFromExpr}+tyTypeClasses: localError(c.config, params[i].info, "cannot infer type of parameter: " & params[i].sym.name.s) - #params[i].sym.owner = s + #params[i].sym.owner() = s openScope(c) pushOwner(c, s) addParams(c, params, skProc) @@ -2362,7 +2362,7 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind, n[namePos] = newSymNode(s) of nkSym: s = n[namePos].sym - s.owner = c.getCurrOwner + s.owner() = c.getCurrOwner else: # Highlighting needs to be done early so the position for # name isn't changed (see taccent_highlight). We don't want to check if this is the @@ -2629,7 +2629,7 @@ proc semIterator(c: PContext, n: PNode): PNode = # gensym'ed iterator? if n[namePos].kind == nkSym: # gensym'ed iterators might need to become closure iterators: - n[namePos].sym.owner = getCurrOwner(c) + n[namePos].sym.owner() = getCurrOwner(c) n[namePos].sym.transitionRoutineSymKind(skIterator) result = semProcAux(c, n, skIterator, iteratorPragmas) # bug #7093: if after a macro transformation we don't have an diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 113946fef256..eb03bffb3fd7 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -1096,7 +1096,7 @@ proc addParamOrResult(c: PContext, param: PSym, kind: TSymKind) = if sfGenSym in param.flags: # bug #XXX, fix the gensym'ed parameters owner: if param.owner == nil: - param.owner = getCurrOwner(c) + param.owner() = getCurrOwner(c) else: addDecl(c, param) template shouldHaveMeta(t) = diff --git a/compiler/semtypinst.nim b/compiler/semtypinst.nim index ce5e3e9a652b..f2964f86bcfe 100644 --- a/compiler/semtypinst.nim +++ b/compiler/semtypinst.nim @@ -358,7 +358,7 @@ proc replaceTypeVarsS(cl: var TReplTypeVars, s: PSym, t: PType): PSym = result = copySym(s, cl.c.idgen) incl(result.flags, sfFromGeneric) #idTablePut(cl.symMap, s, result) - result.owner = s.owner + result.owner() = s.owner result.typ = t if result.kind != skType: result.ast = replaceTypeVarsN(cl, s.ast) diff --git a/compiler/transf.nim b/compiler/transf.nim index 8dd24e090c8b..baf87fb98e21 100644 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -182,7 +182,7 @@ proc freshVar(c: PTransf; v: PSym): PNode = else: var newVar = copySym(v, c.idgen) incl(newVar.flags, sfFromGeneric) - newVar.owner = owner + newVar.owner() = owner result = newSymNode(newVar) proc transformVarSection(c: PTransf, v: PNode): PNode =