]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
add AINSTR_END to the end of functions so the debug-printing knows when to end...
authorWolfgang Bumiller <wolfgang.linux@bumiller.com>
Wed, 4 Jul 2012 11:29:26 +0000 (13:29 +0200)
committerWolfgang Bumiller <wolfgang.linux@bumiller.com>
Wed, 4 Jul 2012 11:29:26 +0000 (13:29 +0200)
ir.c
test/ast-test.c

diff --git a/ir.c b/ir.c
index 557a821886cd3df4488142c1ef6642e2b2427fa7..4ac089d7956995404559f47c5f073f1bb84700ad 100644 (file)
--- a/ir.c
+++ b/ir.c
@@ -2310,6 +2310,7 @@ tailcall:
 static bool gen_function_code(ir_function *self)
 {
     ir_block *block;
+    prog_section_statement stmt;
 
     /* Starting from entry point, we generate blocks "as they come"
      * for now. Dead blocks will not be translated obviously.
@@ -2327,6 +2328,14 @@ static bool gen_function_code(ir_function *self)
         printf("failed to generate blocks for '%s'\n", self->name);
         return false;
     }
+
+    /* otherwise code_write crashes since it debug-prints functions until AINSTR_END */
+    stmt.opcode = AINSTR_END;
+    stmt.o1.u1 = 0;
+    stmt.o2.u1 = 0;
+    stmt.o3.u1 = 0;
+    if (code_statements_add(stmt) < 0)
+        return false;
     return true;
 }
 
index 2217a396e5ccc1373e9800f86e54a512a929601e..026dbf369421031bdf751f6ccc16c0631094f96e 100644 (file)
@@ -29,6 +29,8 @@ int main()
     DEFVAR(f5);
     DEFVAR(print);
 
+    /* opts_debug = true; */
+
 #if 0
     BUILTIN(print, TYPE_VOID, -1);
     PARAM(TYPE_STRING, text);
@@ -43,19 +45,22 @@ MKCONSTFLOAT(f0, 0.0);
 MKCONSTFLOAT(f1, 1.0);
 MKCONSTFLOAT(f5, 5.0);
 
+FUNCTION(foo, TYPE_VOID);
+ENDFUNCTION(foo);
+
 FUNCTION(main, TYPE_VOID);
 
-VAR(TYPE_FLOAT, vi);
-VAR(TYPE_FLOAT, vx);
+    VAR(TYPE_FLOAT, vi);
+    VAR(TYPE_FLOAT, vx);
 
-MKLOCAL(vi);
-MKLOCAL(vx);
+    MKLOCAL(vi);
+    MKLOCAL(vx);
 
-STATE(ASSIGN(STORE_F, vi, f0));
-WHILE(BIN(LT, vi, f5));
-STATE(ASSIGN(STORE_F, vx, BIN(MUL_F, vi, f5)));
-STATE(ASSIGN(STORE_F, vi, BIN(ADD_F, vi, f1)));
-ENDWHILE();
+    STATE(ASSIGN(STORE_F, vi, f0));
+    WHILE(BIN(LT, vi, f5));
+        STATE(ASSIGN(STORE_F, vx, BIN(MUL_F, vi, f5)));
+        STATE(ASSIGN(STORE_F, vi, BIN(ADD_F, vi, f1)));
+    ENDWHILE();
 
 ENDFUNCTION(main);