Author: leo
Date: Tue Jan 17 11:54:50 2006
New Revision: 11230

Modified:
   trunk/compilers/imcc/optimizer.c
   trunk/t/op/integer.t
   trunk/t/op/number.t
Log:
catch compile-time div by zero too

Modified: trunk/compilers/imcc/optimizer.c
==============================================================================
--- trunk/compilers/imcc/optimizer.c    (original)
+++ trunk/compilers/imcc/optimizer.c    Tue Jan 17 11:54:50 2006
@@ -647,7 +647,13 @@ eval_ins(Interp *interpreter, char *op, 
     }
 
     /* eval the opcode */
+    new_internal_exception(interpreter);
+    if (setjmp(interpreter->exceptions->destination)) {
+        fprintf(stderr, "eval_ins: op '%s' failed\n", op);
+        handle_exception(interpreter);
+    }
     pc = (interpreter->op_func_table[opnum]) (eval, interpreter);
+    free_internal_exception(interpreter);
     /* the returned pc is either incremented by op_count or is eval,
      * as the branch offset is 0 - return true if it branched
      */

Modified: trunk/t/op/integer.t
==============================================================================
--- trunk/t/op/integer.t        (original)
+++ trunk/t/op/integer.t        Tue Jan 17 11:54:50 2006
@@ -1276,6 +1276,13 @@ CODE
 /.*Divide by zero.*/
 OUTPUT
 
+output_like(<<'CODE', <<OUTPUT, "div_i_ic_ic by zero");
+       div I2, 0, 0
+       end
+CODE
+/.*Divide by zero.*/
+OUTPUT
+
 output_like(<<'CODE', <<OUTPUT, "fdiv_i_i by zero");
        set I0, 0
        set I1, 10
@@ -1376,5 +1383,5 @@ OUTPUT
 
 
 ## remember to change the number of tests :-)
-BEGIN { plan tests => 56; }
+BEGIN { plan tests => 57; }
 

Modified: trunk/t/op/number.t
==============================================================================
--- trunk/t/op/number.t (original)
+++ trunk/t/op/number.t Tue Jan 17 11:54:50 2006
@@ -1108,6 +1108,13 @@ CODE
 /.*Divide by zero.*/
 OUTPUT
 
+output_like(<<'CODE', <<OUTPUT, "div_n_nc_nc by zero");
+       div N1, 0, 0
+       end
+CODE
+/.*Divide by zero.*/
+OUTPUT
+
 output_like(<<'CODE', <<OUTPUT, "div_n_n_n by zero");
        set N0, 0
        set N1, 10
@@ -1224,5 +1231,5 @@ OUTPUT
 
 
 ## remember to change the number of tests :-)
-BEGIN { plan tests => 56; }
+BEGIN { plan tests => 57; }
 

Reply via email to