diff options
-rw-r--r-- | compiler/modulegraphs.nim | 2 | ||||
-rw-r--r-- | compiler/scriptconfig.nim | 3 | ||||
-rw-r--r-- | compiler/vm.nim | 22 | ||||
-rw-r--r-- | nimsuggest/nimsuggest.nim | 2 |
4 files changed, 12 insertions, 17 deletions
diff --git a/compiler/modulegraphs.nim b/compiler/modulegraphs.nim index 4817bc466..100f69c1d 100644 --- a/compiler/modulegraphs.nim +++ b/compiler/modulegraphs.nim @@ -41,6 +41,8 @@ type backend*: RootRef # minor hack so that a backend can extend this easily config*: ConfigRef cache*: IdentCache + vm*: RootRef # unfortunately the 'vm' state is shared project-wise, this will + # be clarified in later compiler implementations. doStopCompile*: proc(): bool {.closure.} usageSym*: PSym # for nimsuggest owners*: seq[PSym] diff --git a/compiler/scriptconfig.nim b/compiler/scriptconfig.nim index 305768d15..ac86e8e0c 100644 --- a/compiler/scriptconfig.nim +++ b/compiler/scriptconfig.nim @@ -166,14 +166,13 @@ proc runNimScript*(cache: IdentCache; scriptName: string; var m = graph.makeModule(scriptName) incl(m.flags, sfMainModule) - vm.globalCtx = setupVM(m, cache, scriptName, graph) + graph.vm = setupVM(m, cache, scriptName, graph) graph.compileSystemModule(cache) discard graph.processModule(m, llStreamOpen(scriptName, fmRead), nil, cache) # ensure we load 'system.nim' again for the real non-config stuff! resetSystemArtifacts(graph) - vm.globalCtx = nil # do not remove the defined symbols #initDefines() undefSymbol(conf.symbols, "nimscript") diff --git a/compiler/vm.nim b/compiler/vm.nim index 8ae8523cf..c7b68a24c 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -1654,18 +1654,12 @@ proc getGlobalValue*(c: PCtx; s: PSym): PNode = include vmops -# for now we share the 'globals' environment. XXX Coming soon: An API for -# storing&loading the 'globals' environment to get what a component system -# requires. -var - globalCtx*: PCtx - proc setupGlobalCtx(module: PSym; cache: IdentCache; graph: ModuleGraph) = - if globalCtx.isNil: - globalCtx = newCtx(module, cache, graph) - registerAdditionalOps(globalCtx) + if graph.vm.isNil: + graph.vm = newCtx(module, cache, graph) + registerAdditionalOps(PCtx graph.vm) else: - refresh(globalCtx, module) + refresh(PCtx graph.vm, module) proc myOpen(graph: ModuleGraph; module: PSym; cache: IdentCache): PPassContext = #var c = newEvalContext(module, emRepl) @@ -1674,9 +1668,9 @@ proc myOpen(graph: ModuleGraph; module: PSym; cache: IdentCache): PPassContext = # XXX produce a new 'globals' environment here: setupGlobalCtx(module, cache, graph) - result = globalCtx + result = PCtx graph.vm when hasFFI: - globalCtx.features = {allowFFI, allowCast} + PCtx(graph.vm).features = {allowFFI, allowCast} proc myProcess(c: PPassContext, n: PNode): PNode = let c = PCtx(c) @@ -1698,7 +1692,7 @@ proc evalConstExprAux(module: PSym; cache: IdentCache; mode: TEvalMode): PNode = let n = transformExpr(g, module, n) setupGlobalCtx(module, cache, g) - var c = globalCtx + var c = PCtx g.vm let oldMode = c.mode defer: c.mode = oldMode c.mode = mode @@ -1763,7 +1757,7 @@ proc evalMacroCall*(module: PSym; cache: IdentCache; g: ModuleGraph; n.renderTree, $(n.safeLen-1), $(sym.typ.len-1)]) setupGlobalCtx(module, cache, g) - var c = globalCtx + var c = PCtx g.vm c.comesFromHeuristic.line = 0'u16 c.callsite = nOrig diff --git a/nimsuggest/nimsuggest.nim b/nimsuggest/nimsuggest.nim index 5e04a5778..4956f4bf2 100644 --- a/nimsuggest/nimsuggest.nim +++ b/nimsuggest/nimsuggest.nim @@ -438,7 +438,7 @@ proc execCmd(cmd: string; graph: ModuleGraph; cache: IdentCache; cachedMsgs: Cac proc recompileFullProject(graph: ModuleGraph; cache: IdentCache) = #echo "recompiling full project" resetSystemArtifacts(graph) - vm.globalCtx = nil + graph.vm = nil graph.resetAllModules() GC_fullcollect() compileProject(graph, cache) |