Added setGlobalValue to VM api (#19007)

This commit is contained in:
Jason Beetham
2021-10-17 08:24:43 -06:00
committed by GitHub
parent f77dea01fd
commit f0af4a36b9
2 changed files with 9 additions and 0 deletions

View File

@@ -57,6 +57,10 @@ proc callRoutine*(i: Interpreter; routine: PSym; args: openArray[PNode]): PNode
proc getGlobalValue*(i: Interpreter; letOrVar: PSym): PNode =
result = vm.getGlobalValue(PCtx i.graph.vm, letOrVar)
proc setGlobalValue*(i: Interpreter; letOrVar: PSym, val: PNode) =
## Sets a global value to a given PNode, does not do any type checking.
vm.setGlobalValue(PCtx i.graph.vm, letOrVar, val)
proc implementRoutine*(i: Interpreter; pkg, module, name: string;
impl: proc (a: VmArgs) {.closure, gcsafe.}) =
assert i != nil

View File

@@ -2162,6 +2162,11 @@ proc getGlobalValue*(c: PCtx; s: PSym): PNode =
internalAssert c.config, s.kind in {skLet, skVar} and sfGlobal in s.flags
result = c.globals[s.position-1]
proc setGlobalValue*(c: PCtx; s: PSym, val: PNode) =
## Does not do type checking so ensure the `val` matches the `s.typ`
internalAssert c.config, s.kind in {skLet, skVar} and sfGlobal in s.flags
c.globals[s.position-1] = val
include vmops
proc setupGlobalCtx*(module: PSym; graph: ModuleGraph; idgen: IdGenerator) =