From 92e3013a4cab12747af9d5484e7caad6fc454b1e Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 21 Sep 2026 22:53:49 -0700 Subject: Switch over to the new ELK driver Interact between compiler & browser now hooks several nbew places. --- .../main/java/com/seaofnodes/graph/GraphEvent.java | 10 ++++++++++ .../src/main/java/com/seaofnodes/graph/GraphJson.java | 16 ++++++++++++++-- .../main/java/com/seaofnodes/graph/GraphObserver.java | 19 +++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 graph/src/main/java/com/seaofnodes/graph/GraphEvent.java create mode 100644 graph/src/main/java/com/seaofnodes/graph/GraphObserver.java (limited to 'graph/src') diff --git a/graph/src/main/java/com/seaofnodes/graph/GraphEvent.java b/graph/src/main/java/com/seaofnodes/graph/GraphEvent.java new file mode 100644 index 00000000..7d889b21 --- /dev/null +++ b/graph/src/main/java/com/seaofnodes/graph/GraphEvent.java @@ -0,0 +1,10 @@ +package com.seaofnodes.graph; + +/** IDs refer to nodes in this compilation; near may include nodes since deleted. */ +public record GraphEvent(Kind kind, long peep, long up, String phase, + int node, int repl, int[] near) { + public enum Kind { BEFORE, RETURN, APPLY, PHASE } + + public GraphEvent { near = near.clone(); } + @Override public int[] near() { return near.clone(); } +} diff --git a/graph/src/main/java/com/seaofnodes/graph/GraphJson.java b/graph/src/main/java/com/seaofnodes/graph/GraphJson.java index 440be034..c27076d3 100644 --- a/graph/src/main/java/com/seaofnodes/graph/GraphJson.java +++ b/graph/src/main/java/com/seaofnodes/graph/GraphJson.java @@ -8,10 +8,22 @@ public class GraphJson { return sb.toString(); } - public static String frame(GraphSnapshot snap, int pos) { + public static String frame(GraphSnapshot snap, int pos, GraphEvent evt) { var sb = new StringBuilder("{\"snap\":"); snap(sb, snap); - sb.append(",\"pos\":").append(pos); + sb.append(",\"pos\":").append(pos).append(",\"evt\":{\"kind\":"); + str(sb, evt.kind().name()); + sb.append(",\"peep\":").append(evt.peep()).append(",\"up\":").append(evt.up()) + .append(",\"phase\":"); + str(sb, evt.phase()); + sb.append(",\"node\":").append(evt.node()).append(",\"repl\":").append(evt.repl()) + .append(",\"near\":["); + int[] near = evt.near(); + for( int i = 0; i < near.length; i++ ) { + if( i > 0 ) sb.append(','); + sb.append(near[i]); + } + sb.append("]}"); return sb.append('}').toString(); } diff --git a/graph/src/main/java/com/seaofnodes/graph/GraphObserver.java b/graph/src/main/java/com/seaofnodes/graph/GraphObserver.java new file mode 100644 index 00000000..24879fe2 --- /dev/null +++ b/graph/src/main/java/com/seaofnodes/graph/GraphObserver.java @@ -0,0 +1,19 @@ +package com.seaofnodes.graph; + +/** Optional, compilation-owned observer. Callbacks read the IR without changing it. */ +public abstract class GraphObserver { + public abstract void before(N node); + + /** + * repl is null for no progress. applied means substitution and cleanup are + * complete; otherwise repl is being returned for the caller to attach. + * Calls nest when a rewrite invokes another peephole. + */ + public abstract void after(N node, N repl, boolean applied); + + /** A completed compiler phase. */ + public abstract void phase(String phase); + + /** A rule consulted a dependency, even if already registered or adjacent. */ + public void dep(N node, N def) {} +} -- cgit v1.2.3