diff options
author | Araq <rumpf_a@web.de> | 2015-08-02 00:05:56 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-08-02 02:55:58 +0200 |
commit | 9275d5c6178e7674882dbbaa257f6bb2b5a7b6bf (patch) | |
tree | 2fcceb7c2490e10ebc980961dca3f3b18aeb4328 /compiler/vm.nim | |
parent | e205a9e3af57a09fa4585a5b2dc7ae6178fe53df (diff) | |
download | Nim-9275d5c6178e7674882dbbaa257f6bb2b5a7b6bf.tar.gz |
emerald project has a chance of working
Diffstat (limited to 'compiler/vm.nim')
-rw-r--r-- | compiler/vm.nim | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim index 40d273ceb..3166ba726 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -120,10 +120,10 @@ template decodeBx(k: expr) {.immediate, dirty.} = template move(a, b: expr) {.immediate, dirty.} = system.shallowCopy(a, b) # XXX fix minor 'shallowCopy' overloading bug in compiler -proc createStrKeepNode(x: var TFullReg) = +proc createStrKeepNode(x: var TFullReg; keepNode=true) = if x.node.isNil: x.node = newNode(nkStrLit) - elif x.node.kind == nkNilLit: + elif x.node.kind == nkNilLit and keepNode: when defined(useNodeIds): let id = x.node.id system.reset(x.node[]) @@ -385,6 +385,7 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = #if c.traceActive: # echo "PC ", pc, " ", c.code[pc].opcode, " ra ", ra # message(c.debug[pc], warnUser, "Trace") + case instr.opcode of opcEof: return regs[ra] of opcRet: @@ -407,8 +408,8 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = decodeB(rkInt) regs[ra].intVal = regs[rb].intVal of opcAsgnStr: - decodeB(rkNode) - createStrKeepNode regs[ra] + decodeBC(rkNode) + createStrKeepNode regs[ra], rc != 0 regs[ra].node.strVal = regs[rb].node.strVal of opcAsgnFloat: decodeB(rkFloat) |