diff options
Diffstat (limited to 'chapter17/src/main/java/com/seaofnodes')
| -rw-r--r-- | chapter17/src/main/java/com/seaofnodes/simple/node/AddNode.java | 6 | ||||
| -rw-r--r-- | chapter17/src/main/java/com/seaofnodes/simple/node/MulNode.java | 5 |
2 files changed, 11 insertions, 0 deletions
diff --git a/chapter17/src/main/java/com/seaofnodes/simple/node/AddNode.java b/chapter17/src/main/java/com/seaofnodes/simple/node/AddNode.java index 0834a381..4007df91 100644 --- a/chapter17/src/main/java/com/seaofnodes/simple/node/AddNode.java +++ b/chapter17/src/main/java/com/seaofnodes/simple/node/AddNode.java @@ -44,6 +44,7 @@ public class AddNode extends Node { public Node idealize () { Node lhs = in(1); Node rhs = in(2); + if( rhs.err() != null ) return null; Type t2 = rhs._type; // Add of 0. We do not check for (0+x) because this will already @@ -184,4 +185,9 @@ public class AddNode extends Node { @Override Node copy(Node lhs, Node rhs) { return new AddNode(lhs,rhs); } @Override Node copyF() { return new AddFNode(null,null); } + @Override public String err() { + if( !(in(1)._type instanceof TypeInteger) ) return "Cannot '"+label()+"' " + in(1)._type; + if( !(in(2)._type instanceof TypeInteger) ) return "Cannot '"+label()+"' " + in(2)._type; + return null; + } } diff --git a/chapter17/src/main/java/com/seaofnodes/simple/node/MulNode.java b/chapter17/src/main/java/com/seaofnodes/simple/node/MulNode.java index b5ef91e9..949af27a 100644 --- a/chapter17/src/main/java/com/seaofnodes/simple/node/MulNode.java +++ b/chapter17/src/main/java/com/seaofnodes/simple/node/MulNode.java @@ -60,4 +60,9 @@ public class MulNode extends Node { } @Override Node copy(Node lhs, Node rhs) { return new MulNode(lhs,rhs); } @Override Node copyF() { return new MulFNode(null,null); } + @Override public String err() { + if( !(in(1)._type instanceof TypeInteger) ) return "Cannot '"+label()+"' " + in(1)._type; + if( !(in(2)._type instanceof TypeInteger) ) return "Cannot '"+label()+"' " + in(2)._type; + return null; + } } |
