summaryrefslogtreecommitdiff
path: root/chapter04/src
diff options
context:
space:
mode:
Diffstat (limited to 'chapter04/src')
-rw-r--r--chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java9
-rw-r--r--chapter04/src/main/java/com/seaofnodes/simple/type/TypeInteger.java1
2 files changed, 5 insertions, 5 deletions
diff --git a/chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java
index 22167a87..1f562378 100644
--- a/chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -23,11 +23,10 @@ public class DivNode extends Node {
public Type compute() {
if (in(1)._type instanceof TypeInteger i0 &&
in(2)._type instanceof TypeInteger i1) {
- if (i0.isConstant() && i1.isConstant()) {
- if (i1.value() == 0)
- throw new IllegalArgumentException("Divide by zero");
- return TypeInteger.constant(i0.value()/i1.value());
- }
+ if (i0.isConstant() && i1.isConstant())
+ return i1.value() == 0
+ ? TypeInteger.ZERO
+ : TypeInteger.constant(i0.value()/i1.value());
return i0.meet(i1);
}
return TypeBot.BOTTOM;
diff --git a/chapter04/src/main/java/com/seaofnodes/simple/type/TypeInteger.java b/chapter04/src/main/java/com/seaofnodes/simple/type/TypeInteger.java
index e23840e0..b53b1b29 100644
--- a/chapter04/src/main/java/com/seaofnodes/simple/type/TypeInteger.java
+++ b/chapter04/src/main/java/com/seaofnodes/simple/type/TypeInteger.java
@@ -7,6 +7,7 @@ public class TypeInteger extends Type {
public final static TypeInteger TOP = new TypeInteger(false, 0);
public final static TypeInteger BOT = new TypeInteger(false, 1);
+ public final static TypeInteger ZERO= new TypeInteger(true, 0);
private final boolean _is_con;