summary refs log tree commit diff stats
path: root/compiler/vm.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2013-07-26 12:17:36 +0200
committerAraq <rumpf_a@web.de>2013-07-26 12:17:36 +0200
commit698eac2a94f9b2ef687735cf3e49d93e7cdb2121 (patch)
treec38ba8e6e037b0597d9b2578d4c1baf4b4480d00 /compiler/vm.nim
parent05108cf81c3758ce8fbe9026470de296c9b264a1 (diff)
downloadNim-698eac2a94f9b2ef687735cf3e49d93e7cdb2121.tar.gz
new vm: can execute simple programs
Diffstat (limited to 'compiler/vm.nim')
-rw-r--r--compiler/vm.nim7
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim
index 5f10c4e2c..7ae5b7878 100644
--- a/compiler/vm.nim
+++ b/compiler/vm.nim
@@ -81,7 +81,7 @@ template decodeBx(k: expr) {.immediate, dirty.} =
 
 proc compile(c: PCtx, s: PSym): int = 
   result = vmgen.genProc(c, s)
-  c.echoCode
+  #c.echoCode
 
 proc myreset(n: PNode) =
   when defined(system.reset): 
@@ -183,7 +183,7 @@ proc execute(c: PCtx, start: int) =
     {.interpreterLoop.}
     let instr = c.code[pc]
     let ra = instr.regA
-    echo "PC ", pc, " ", c.code[pc].opcode, " ra ", ra
+    #echo "PC ", pc, " ", c.code[pc].opcode, " ra ", ra
     case instr.opcode
     of opcEof: break
     of opcRet:
@@ -462,7 +462,8 @@ proc execute(c: PCtx, start: int) =
         newFrame.slots[i] = newNode(nkEmpty)
       tos = newFrame
       move(regs, newFrame.slots)
-      pc = newPc
+      # -1 for the following 'inc pc'
+      pc = newPc-1
     of opcTJmp:
       # jump Bx if A != 0
       let rbx = instr.regBx - wordExcess - 1 # -1 for the following 'inc pc'