summary refs log tree commit diff stats
path: root/compiler/vm.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-02-25 21:30:18 +0100
committerAraq <rumpf_a@web.de>2014-02-25 21:30:18 +0100
commit384a018906bf999355019bd3761f8b085b352eb6 (patch)
tree303c7a1eb779d4267eb62494c649e9d094407ad2 /compiler/vm.nim
parentad79b125e7ae9a703b8ea900ea3dd760ee1ff0c9 (diff)
downloadNim-384a018906bf999355019bd3761f8b085b352eb6.tar.gz
htmlgen works again
Diffstat (limited to 'compiler/vm.nim')
-rw-r--r--compiler/vm.nim11
1 files changed, 8 insertions, 3 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim
index 0a3c17e8e..ed259636e 100644
--- a/compiler/vm.nim
+++ b/compiler/vm.nim
@@ -460,11 +460,16 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TRegister =
         assert regs[rb].node.kind == nkRefTy
         regs[ra].node = regs[rb].node.sons[0]
       else:
-        stackTrace(c, tos, pc, errIndexOutOfBounds)
+        stackTrace(c, tos, pc, errNilAccess)
     of opcWrDeref:
       # a[] = b
-      decodeBC(rkNode)
-      putIntoNode(regs[ra].node, regs[rb])
+      let ra = instr.regA
+      let rb = instr.regB
+      case regs[ra].kind
+      of rkNodeAddr: putIntoNode(regs[ra].nodeAddr[], regs[rb])
+      of rkRegisterAddr: regs[ra].regAddr[] = regs[rb]
+      of rkNode: putIntoNode(regs[ra].node, regs[rb])
+      else: stackTrace(c, tos, pc, errNilAccess)
     of opcAddInt:
       decodeBC(rkInt)
       regs[ra].intVal = regs[rb].intVal + regs[rc].intVal