allow throwing across JSR boundaries
[cacao.git] / src / vm / jit / verify / typecheck.c
index 9cfd5b4d0b293775e26a9424e026abe17decb738..a0c83b14976e95b1afd94f1aab6647c9babce6e7 100644 (file)
@@ -26,7 +26,7 @@
 
    Authors: Edwin Steiner
 
-   $Id: typecheck.c 727 2003-12-11 10:52:40Z edwin $
+   $Id: typecheck.c 788 2003-12-15 18:45:28Z edwin $
 
 */
 
@@ -73,7 +73,7 @@ bool typecheckverbose = false;
 #define LOGINFO(info)      DOLOG(do {typeinfo_print_short(get_logfile(),info);log_plain("\n");} while(0))
 #define LOGFLUSH           DOLOG(fflush(get_logfile()))
 #define LOGNL              DOLOG(log_plain("\n"))
-#define LOGSTR(str)        DOLOG(dolog_plain(str))
+#define LOGSTR(str)        DOLOG(log_plain(str))
 #define LOGSTR1(str,a)     DOLOG(dolog_plain(str,a))
 #define LOGSTR2(str,a,b)   DOLOG(dolog_plain(str,a,b))
 #define LOGSTR3(str,a,b,c) DOLOG(dolog_plain(str,a,b,c))
@@ -96,7 +96,7 @@ bool typecheckverbose = false;
 
 #ifdef TYPECHECK_VERBOSE_IMPORTANT
 #define LOGimp(str)     DOLOG(log_text(str))
-#define LOGimpSTR(str)  DOLOG(dolog_plain(str))
+#define LOGimpSTR(str)  DOLOG(log_plain(str))
 #define LOGimpSTRu(utf) DOLOG(log_plain_utf(utf))
 #else
 #define LOGimp(str)
@@ -148,6 +148,7 @@ typeinfo_print_block(FILE *file,stackptr instack,
 }
 
 
+#if 0
 static
 void
 typeinfo_print_blocks(FILE *file,int vnum,u1 *vtype,typeinfo *vinfo)
@@ -168,6 +169,7 @@ typeinfo_print_blocks(FILE *file,int vnum,u1 *vtype,typeinfo *vinfo)
         show_icmd_block(block+bi);
     }
 }
+#endif
 
 #endif
 
@@ -561,7 +563,7 @@ struct jsr_record {
             TYPECHECK_COPYVARS;                                         \
         }                                                               \
         else {                                                          \
-            TYPECHECK_COPYJSR(jsrchain);                                \
+            if (way != REACH_THROW) TYPECHECK_COPYJSR(jsrchain);               \
             TYPECHECK_COPYVARS;                                         \
         }                                                               \
         if (way != REACH_THROW) TYPECHECK_COPYSTACK;                    \
@@ -571,7 +573,7 @@ struct jsr_record {
         changed = false;                                                \
         if (way == REACH_JSR)                                           \
             TYPECHECK_CHECK_JSR_CHAIN;                                  \
-        else                                                            \
+        else if (way != REACH_THROW)                                                                   \
             TYPECHECK_MERGEJSR;                                         \
         TYPECHECK_MERGEVARS;                                            \
         if (way != REACH_THROW) TYPECHECK_MERGESTACK;                   \
@@ -716,7 +718,7 @@ typecheck()
     touched = DMNEW(u1,numlocals);
     vtype = vartype + numlocals * block_count;
     vinfo = vartypeinfo + numlocals * block_count;
-    memset(vartype,TYPE_VOID,numlocals * (block_count+1) * sizeof(typeinfo));
+    memset(vartype,TYPE_VOID,numlocals * (block_count+1) * sizeof(u1));
     memset(vartypeinfo,0,numlocals * (block_count+1) * sizeof(typeinfo));
 
     LOG("Variable buffer initialized.\n");