From a32e83c9d81cfdb3759a2961d8b192ca44d75935 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Fri, 25 Sep 2026 15:00:00 -0700 Subject: Bunch more animation work --- .../src/main/java/com/seaofnodes/simple/codegen/CodeGen.java | 7 ++++++- .../main/java/com/seaofnodes/simple/node/CallEndNode.java | 1 + .../src/main/java/com/seaofnodes/simple/node/FunNode.java | 1 + .../java/com/seaofnodes/simple/print/SimpleGraphAdapter.java | 12 +++++++++++- .../com/seaofnodes/simple/print/SimpleGraphObserver.java | 2 +- 5 files changed, 20 insertions(+), 3 deletions(-) (limited to 'chapter22/src/main/java/com') diff --git a/chapter22/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java b/chapter22/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java index bdb9c5cc..0c00b9c6 100644 --- a/chapter22/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java +++ b/chapter22/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java @@ -220,10 +220,15 @@ public class CodeGen { _phase = Phase.TypeCheck; long t0 = System.currentTimeMillis(); - Parser.ParseException err = _stop.walk( Node::err ); + Parser.ParseException err = _stop.walk(n -> { + Parser.ParseException msg = n.err(); + if( msg != null && _obs != null ) _obs.error(n, msg.getMessage()); + return msg; + }); _tTypeCheck = (int)(System.currentTimeMillis() - t0); if( err != null ) throw err; + if( _obs != null ) _obs.phase("TypeCheck"); return this; } diff --git a/chapter22/src/main/java/com/seaofnodes/simple/node/CallEndNode.java b/chapter22/src/main/java/com/seaofnodes/simple/node/CallEndNode.java index cf3f337c..1b4b619a 100644 --- a/chapter22/src/main/java/com/seaofnodes/simple/node/CallEndNode.java +++ b/chapter22/src/main/java/com/seaofnodes/simple/node/CallEndNode.java @@ -12,6 +12,7 @@ public class CallEndNode extends CFGNode implements MultiNode { // When set true, this Call/CallEnd/Fun/Return is being trivially inlined private boolean _folding; + public boolean folding() { return _folding; } public final TypeRPC _rpc; public CallEndNode(CallNode call) { super(new Node[]{call}); _rpc = TypeRPC.constant(_nid); } diff --git a/chapter22/src/main/java/com/seaofnodes/simple/node/FunNode.java b/chapter22/src/main/java/com/seaofnodes/simple/node/FunNode.java index c53807a6..9afbf77e 100644 --- a/chapter22/src/main/java/com/seaofnodes/simple/node/FunNode.java +++ b/chapter22/src/main/java/com/seaofnodes/simple/node/FunNode.java @@ -15,6 +15,7 @@ public class FunNode extends RegionNode { // When set true, this Call/CallEnd/Fun/Return is being trivially inlined boolean _folding; + public boolean folding() { return _folding; } private TypeFunPtr _sig; // Initial signature private ReturnNode _ret; // Return pointer diff --git a/chapter22/src/main/java/com/seaofnodes/simple/print/SimpleGraphAdapter.java b/chapter22/src/main/java/com/seaofnodes/simple/print/SimpleGraphAdapter.java index ac7d2f15..d4906a1b 100644 --- a/chapter22/src/main/java/com/seaofnodes/simple/print/SimpleGraphAdapter.java +++ b/chapter22/src/main/java/com/seaofnodes/simple/print/SimpleGraphAdapter.java @@ -36,7 +36,17 @@ public class SimpleGraphAdapter extends GraphAdapter { : n instanceof CProjNode p ? new Projection(ref(n.in(0)), p._idx) : null; String label = n.label(); return new GraphSnapshot.Node(n._nid, label == null ? n.getClass().getSimpleName() : label, - n._type == null ? null : n._type.toString(), kind(n), edges(n), proj); + n._type == null ? null : n._type.toString(), kind(n), edges(n), proj, folding(n)); + } + + private boolean folding(Node n) { + if( n instanceof FunNode fun ) return fun.folding(); + if( n instanceof ReturnNode ret ) return ret.fun().folding(); + if( n instanceof CallEndNode cend ) return cend.folding(); + if( n instanceof CallNode ) + for( int i=0; i { @Override protected void compile(String src) { _code = new CodeGen(src); _code._obs = this; - _code.parse().opto(); + _code.parse().opto().typeCheck(); } @Override protected String phase() { return _code._phase.name(); } @Override protected int pos() { return _code._phase == CodeGen.Phase.Parse ? _code.P.pos() : -1; } -- cgit v1.2.3