浏览代码

Fixed use of irs[ngl ] instructions

Taddeus Kroes 12 年之前
父节点
当前提交
4c4075f088
共有 2 个文件被更改,包括 13 次插入9 次删除
  1. 3 3
      phases/assemble.ml
  2. 10 6
      test/nested_funs.cvc

+ 3 - 3
phases/assemble.ml

@@ -173,9 +173,9 @@ let assemble program =
         | FunUse (dec, args, _) ->
             let init = match (depthof dec, depthof node) with
                 | (0, _)                -> RtnInit Glob
-                | (a, b) when a = b     -> RtnInit Current
-                | (a, b) when a = b + 1 -> RtnInit Local
-                | (a, b)                -> RtnInit (Rel (b - a))
+                | (a, b) when a = b - 1 -> RtnInit Current
+                | (a, b) when a = b     -> RtnInit Local
+                | (a, b)                -> RtnInit (Rel (b - a - 1))
             in
             let jmp = match dec with
                 | FunDec _ -> RtnJmp (ExternFun (indexof dec))

+ 10 - 6
test/nested_funs.cvc

@@ -1,19 +1,23 @@
-#include "stdlib.h"
+extern void printInt(int val);
 
 void foo() {
     void bar() {
         void bar() {
             printInt(1);
+            foobar();  // isrn 1
         }
 
         printInt(2);
-        bar();
-        baz();
+        bar();     // isrl
+        baz();     // isrg
+        foobar();  // isr
     }
 
-    printInt(3);
-    bar();
-    baz();
+    void foobar() {}
+
+    printInt(3);    // isrg
+    bar();          // isrl
+    baz();          // isrg
 }
 
 void bar() {