diff options
Diffstat (limited to 'compiler/vm.nim')
-rw-r--r-- | compiler/vm.nim | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim index 922208034..ae8cc25af 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -1005,13 +1005,15 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = decodeB(rkNode) let a = regs[rb].node if a.kind == nkSym: - regs[ra].node = if a.sym.ast.isNil: newNode(nkNilLit) - else: - let ast = a.sym.ast.shallowCopy - for i in 0..<a.sym.ast.len: - ast[i] = a.sym.ast[i] - ast[bodyPos] = transformBody(c.graph, a.sym) - ast.copyTree() + regs[ra].node = + if a.sym.ast.isNil: + newNode(nkNilLit) + else: + let ast = a.sym.ast.shallowCopy + for i in 0..<a.sym.ast.len: + ast[i] = a.sym.ast[i] + ast[bodyPos] = transformBody(c.graph, a.sym, cache=true) + ast.copyTree() of opcSymOwner: decodeB(rkNode) let a = regs[rb].node @@ -1983,7 +1985,7 @@ proc execProc*(c: PCtx; sym: PSym; args: openArray[PNode]): PNode = "NimScript: attempt to call non-routine: " & sym.name.s) proc evalStmt*(c: PCtx, n: PNode) = - let n = transformExpr(c.graph, c.module, n, noDestructors = true) + let n = transformExpr(c.graph, c.module, n) let start = genStmt(c, n) # execute new instructions; this redundant opcEof check saves us lots # of allocations in 'execute': @@ -1991,7 +1993,7 @@ proc evalStmt*(c: PCtx, n: PNode) = discard execute(c, start) proc evalExpr*(c: PCtx, n: PNode): PNode = - let n = transformExpr(c.graph, c.module, n, noDestructors = true) + let n = transformExpr(c.graph, c.module, n) let start = genExpr(c, n) assert c.code[start].opcode != opcEof result = execute(c, start) @@ -2037,7 +2039,7 @@ proc evalConstExprAux(module: PSym; g: ModuleGraph; prc: PSym, n: PNode, mode: TEvalMode): PNode = if g.config.errorCounter > 0: return n - let n = transformExpr(g, module, n, noDestructors = true) + let n = transformExpr(g, module, n) setupGlobalCtx(module, g) var c = PCtx g.vm let oldMode = c.mode |