diff options
Diffstat (limited to 'chapter04/src/main/java/com/seaofnodes')
| -rw-r--r-- | chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java | 9 | ||||
| -rw-r--r-- | chapter04/src/main/java/com/seaofnodes/simple/type/TypeInteger.java | 1 |
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; |
