diff options
| author | Cliff Click <cliffc@acm.org> | 2023-10-29 10:45:20 -0700 |
|---|---|---|
| committer | Dibyendu Majumdar <dibyendumajumdar@users.noreply.github.com> | 2023-11-01 18:56:50 +0000 |
| commit | f3bd82bdae3ebce5289b1a1bed9105c5bf04fdbe (patch) | |
| tree | ede729aca8e374db986b0606e0756875ee668bf3 /chapter03/src | |
| parent | 57d73a18aa2781d99098e5c13c5e2b8d25059aa4 (diff) | |
| download | Simple-f3bd82bdae3ebce5289b1a1bed9105c5bf04fdbe.tar.gz Simple-f3bd82bdae3ebce5289b1a1bed9105c5bf04fdbe.zip | |
Fix div-by-0, some javadoc
higher level parsers can return null, but their return is ignored anycase.
div-by-0 is defined to be 0, backported to ch2,3,4,5
Diffstat (limited to 'chapter03/src')
| -rw-r--r-- | chapter03/src/main/java/com/seaofnodes/simple/node/DivNode.java | 8 | ||||
| -rw-r--r-- | chapter03/src/main/java/com/seaofnodes/simple/type/TypeInteger.java | 2 |
2 files changed, 7 insertions, 3 deletions
diff --git a/chapter03/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter03/src/main/java/com/seaofnodes/simple/node/DivNode.java index bc129690..0056c42d 100644 --- a/chapter03/src/main/java/com/seaofnodes/simple/node/DivNode.java +++ b/chapter03/src/main/java/com/seaofnodes/simple/node/DivNode.java @@ -22,9 +22,11 @@ public class DivNode extends Node { @Override public Type compute() { if (in(1)._type instanceof TypeInteger i0 && - in(2)._type instanceof TypeInteger i1) { - if (i1._con == 0) - throw new IllegalArgumentException("Divide by zero"); + in(2)._type instanceof TypeInteger i1) { + if (i0.isConstant() && i1.isConstant()) + return i1._con == 0 + ? TypeInteger.ZERO + : new TypeInteger(i0._con/i1._con); return new TypeInteger(i0._con / i1._con); } return TypeBot.BOTTOM; diff --git a/chapter03/src/main/java/com/seaofnodes/simple/type/TypeInteger.java b/chapter03/src/main/java/com/seaofnodes/simple/type/TypeInteger.java index db3d4c46..06cac15e 100644 --- a/chapter03/src/main/java/com/seaofnodes/simple/type/TypeInteger.java +++ b/chapter03/src/main/java/com/seaofnodes/simple/type/TypeInteger.java @@ -5,6 +5,8 @@ package com.seaofnodes.simple.type; */ public class TypeInteger extends Type { + public final static TypeInteger ZERO= new TypeInteger(0); + /** * The constant value observed for this type */ |
