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; }