diff options
| author | Cliff Click <cliffc@acm.org> | 2024-07-24 22:47:45 +0300 |
|---|---|---|
| committer | Dibyendu Majumdar <dibyendumajumdar@users.noreply.github.com> | 2024-08-05 23:28:33 +0100 |
| commit | 6d8eddc652abfddfd7793b06f82526cc0360bf8e (patch) | |
| tree | 6cfed56fa5d08bfb73042208110decb36b9657f7 /chapter12/src/main | |
| parent | d719b190c29b5f603cb19a29e3585b8d84cb51fc (diff) | |
| download | Simple-6d8eddc652abfddfd7793b06f82526cc0360bf8e.tar.gz Simple-6d8eddc652abfddfd7793b06f82526cc0360bf8e.zip | |
a little FP cleanup
Diffstat (limited to 'chapter12/src/main')
| -rw-r--r-- | chapter12/src/main/java/com/seaofnodes/simple/Parser.java | 5 | ||||
| -rw-r--r-- | chapter12/src/main/java/com/seaofnodes/simple/node/BoolNode.java | 8 |
2 files changed, 6 insertions, 7 deletions
diff --git a/chapter12/src/main/java/com/seaofnodes/simple/Parser.java b/chapter12/src/main/java/com/seaofnodes/simple/Parser.java index fd0a63f2..ef107399 100644 --- a/chapter12/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter12/src/main/java/com/seaofnodes/simple/Parser.java @@ -4,7 +4,6 @@ import com.seaofnodes.simple.node.*; import com.seaofnodes.simple.type.*; import java.util.*; -import java.io.ByteArrayInputStream; /** * The Parser converts a Simple source program to the Sea of Nodes intermediate @@ -508,9 +507,7 @@ public class Parser { else break; // Peepholes can fire, but lhs is already "hooked", kept alive op.setDef(idx,parseAddition()); - Node fop = op.widen(); - lhs = fop.peephole(); - if( op != fop ) op.kill(); + lhs = op.widen(); if( negate ) // Extra negate for != lhs = new NotNode(lhs).peephole(); } diff --git a/chapter12/src/main/java/com/seaofnodes/simple/node/BoolNode.java b/chapter12/src/main/java/com/seaofnodes/simple/node/BoolNode.java index a8515bcb..e68cf5ff 100644 --- a/chapter12/src/main/java/com/seaofnodes/simple/node/BoolNode.java +++ b/chapter12/src/main/java/com/seaofnodes/simple/node/BoolNode.java @@ -72,11 +72,13 @@ abstract public class BoolNode extends Node { return null; } - public BoolNode widen() { - if( !(in(1)._type instanceof TypeFloat || in(2)._type instanceof TypeFloat) ) return this; + public Node widen() { + if( !(in(1)._type instanceof TypeFloat || in(2)._type instanceof TypeFloat) ) return peephole(); Node in1 = Parser.widen(in(1)); Node in2 = Parser.widen(in(2)); - return copyF(in1,in2); + Node b = copyF(in1,in2).peephole(); + kill(); + return b; } public static class EQ extends BoolNode { public EQ(Node lhs, Node rhs) { super(lhs,rhs); } String op() { return "=="; } boolean doOp(long lhs, long rhs) { return lhs == rhs; } Node copy(Node lhs, Node rhs) { return new EQ(lhs,rhs); } BoolNode copyF(Node lhs, Node rhs) { return new EQF(lhs,rhs); } } |
