summaryrefslogtreecommitdiff
path: root/src/main/java/com/seaofnodes/simple/print
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2025-05-06 13:44:10 -0700
committerCliff Click <cliffc@acm.org>2025-07-08 20:29:09 -0700
commit664761624f4b0e3d6d1593b99e576854beec5949 (patch)
treeedff0e36e07cdc5aa82c8f7d144d68c52d5a4365 /src/main/java/com/seaofnodes/simple/print
parent018379b0cf4e286ceacb1e39f34dd80f770e381e (diff)
downloadSimple-linear-chapter23.tar.gz
Simple-linear-chapter23.zip
Chapter 23: Methods and Revisiting Typeslinear-chapter23
Diffstat (limited to 'src/main/java/com/seaofnodes/simple/print')
-rw-r--r--src/main/java/com/seaofnodes/simple/print/ASMPrinter.java11
-rw-r--r--src/main/java/com/seaofnodes/simple/print/GraphVisualizer.java8
-rw-r--r--src/main/java/com/seaofnodes/simple/print/IRPrinter.java10
-rw-r--r--src/main/java/com/seaofnodes/simple/print/JSViewer.java10
-rw-r--r--src/main/java/com/seaofnodes/simple/print/SimpleWebSocket.java2
5 files changed, 21 insertions, 20 deletions
diff --git a/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java b/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java
index 366ae376..a9f86ce8 100644
--- a/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java
+++ b/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java
@@ -1,13 +1,13 @@
package com.seaofnodes.simple.print;
-import com.seaofnodes.simple.Ary;
-import com.seaofnodes.simple.SB;
-import com.seaofnodes.simple.Utils;
import com.seaofnodes.simple.codegen.CodeGen;
-import com.seaofnodes.simple.codegen.Encoding;
import com.seaofnodes.simple.codegen.Encoding.Relo;
+import com.seaofnodes.simple.codegen.Encoding;
import com.seaofnodes.simple.node.*;
import com.seaofnodes.simple.type.*;
+import com.seaofnodes.simple.util.Ary;
+import com.seaofnodes.simple.util.SB;
+import com.seaofnodes.simple.util.Utils;
import java.util.HashSet;
public abstract class ASMPrinter {
@@ -98,7 +98,8 @@ public abstract class ASMPrinter {
if( fun._name != null ) sb.p(fun._name).p(" ");
fun.sig().print(sb);
sb.p("---------------------------").nl();
- iadr = (iadr + 15)&-16; // All function entries padded to 16 align
+ if( code._encoding!=null && code._encoding._padFunHeads )
+ iadr = (iadr + 15)&-16; // All function entries padded to 16 align
if( fun._frameAdjust != 0 )
iadr = doInst(iadr,sb,code,fun,cfgidx,fun,true,true);
diff --git a/src/main/java/com/seaofnodes/simple/print/GraphVisualizer.java b/src/main/java/com/seaofnodes/simple/print/GraphVisualizer.java
index e4cf2c31..20c8439a 100644
--- a/src/main/java/com/seaofnodes/simple/print/GraphVisualizer.java
+++ b/src/main/java/com/seaofnodes/simple/print/GraphVisualizer.java
@@ -3,7 +3,7 @@ package com.seaofnodes.simple.print;
import com.seaofnodes.simple.Parser;
import com.seaofnodes.simple.node.*;
import java.util.*;
-import static com.seaofnodes.simple.Utils.TODO;
+import static com.seaofnodes.simple.util.Utils.TODO;
/**
* Simple visualizer that outputs GraphViz dot format.
@@ -155,7 +155,7 @@ public class GraphVisualizer {
private void scope( StringBuilder sb, ScopeNode scope ) {
sb.append("\tnode [shape=plaintext];\n");
int last = scope.nIns();
- int max = scope._lexSize.size();
+ int max = scope.depth();
for( int i = 0; i < max; i++ ) {
int level = max-i-1;
String scopeName = makeScopeName(scope, level);
@@ -169,7 +169,7 @@ public class GraphVisualizer {
sb.append("\t\t\t<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\">\n");
// Add the scope level
sb.append("\t\t\t<TR><TD BGCOLOR=\"cyan\">").append(level).append("</TD>");
- int lexStart=scope._lexSize.at(level);
+ int lexStart = scope._kinds.at(level)._lexSize;
for( int j=lexStart; j<last; j++ ) {
var v = scope._vars.at(j);
sb.append("<TD PORT=\"").append(makePortName(scopeName, v._name)).append("\">").append(v._name).append("</TD>");
@@ -243,7 +243,7 @@ public class GraphVisualizer {
while( def instanceof ScopeNode lazy )
def = lazy.in(v._idx);
if( def==null ) continue;
- while( level < scope._lexSize.size() && v._idx >= scope._lexSize.at(level) )
+ while( level < scope.depth() && v._idx >= scope._kinds.at(level)._lexSize )
level++;
String scopeName = makeScopeName(scope, level-1);
sb.append("\t")
diff --git a/src/main/java/com/seaofnodes/simple/print/IRPrinter.java b/src/main/java/com/seaofnodes/simple/print/IRPrinter.java
index c6e478c5..d1265bef 100644
--- a/src/main/java/com/seaofnodes/simple/print/IRPrinter.java
+++ b/src/main/java/com/seaofnodes/simple/print/IRPrinter.java
@@ -1,11 +1,11 @@
package com.seaofnodes.simple.print;
-import com.seaofnodes.simple.Ary;
-import com.seaofnodes.simple.SB;
-import com.seaofnodes.simple.Utils;
import com.seaofnodes.simple.codegen.CodeGen;
import com.seaofnodes.simple.node.*;
import com.seaofnodes.simple.type.TypeFunPtr;
+import com.seaofnodes.simple.util.Ary;
+import com.seaofnodes.simple.util.SB;
+import com.seaofnodes.simple.util.Utils;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.HashMap;
@@ -61,7 +61,7 @@ public abstract class IRPrinter {
if( n instanceof CFGNode || n instanceof MultiNode ) {
if( !gap ) sb.p("\n"); // Blank before multihead
if( n instanceof FunNode fun )
- fun.sig().print(sb.p("--- ").p(fun._name==null ? "" : fun._name).p(" "),false).p("----------------------\n");
+ fun.sig().print(sb.p("--- ").p(fun._name==null ? "" : fun._name).p(" ")).p("----------------------\n");
printLine( n, sb ); // Print head
while( --i >= 0 ) {
Node t = rpos.get(i);
@@ -72,7 +72,7 @@ public abstract class IRPrinter {
FunNode fun = ret.fun();
sb.p("--- ");
if( fun != null )
- fun.sig().print(sb.p(fun._name==null ? "" : fun._name).p(" "),false);
+ fun.sig().print(sb.p(fun._name==null ? "" : fun._name).p(" "));
sb.p("----------------------\n");
}
if( !(n instanceof CallNode) ) {
diff --git a/src/main/java/com/seaofnodes/simple/print/JSViewer.java b/src/main/java/com/seaofnodes/simple/print/JSViewer.java
index 76c64c71..62ff0001 100644
--- a/src/main/java/com/seaofnodes/simple/print/JSViewer.java
+++ b/src/main/java/com/seaofnodes/simple/print/JSViewer.java
@@ -1,10 +1,10 @@
package com.seaofnodes.simple.print;
-import com.seaofnodes.simple.SB;
-import com.seaofnodes.simple.Utils;
import com.seaofnodes.simple.codegen.CodeGen;
import com.seaofnodes.simple.node.*;
import com.seaofnodes.simple.type.*;
+import com.seaofnodes.simple.util.SB;
+import com.seaofnodes.simple.util.Utils;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Collection;
@@ -192,14 +192,14 @@ public class JSViewer implements AutoCloseable {
private static void scope( SB sb, ScopeNode scope ) {
sb.i().p("node [shape=plaintext];\n");
int last = scope.nIns();
- int max = scope._lexSize.size()+1; // One more than lexsize
+ int max = scope.depth()+1; // One more than lexsize
for( int i = 0; i < max; i++ ) {
int level = max-i-1;
String scopeName = makeScopeName(scope, level);
sb.i().p("subgraph cluster_").p(scopeName).p(" {\n").ii(); // Magic "cluster_" in the subgraph name
sb.i().p(scopeName).p(" [label=<\n").ii();
sb.i().p("<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\">\n");
- int lexStart = level==0 ? 0 : scope._lexSize.at(level-1);
+ int lexStart = level==0 ? 0 : scope._kinds.at(level-1)._lexSize;
// Special for memory ScopeMinNode
MemMergeNode n = scope.nIns()>1 ? scope.mem() : null;
@@ -365,7 +365,7 @@ public class JSViewer implements AutoCloseable {
while( def instanceof ScopeNode lazy )
def = lazy.in(v._idx);
if( def==null ) continue;
- while( level < scope._lexSize.size() && v._idx >= scope._lexSize.at(level) )
+ while( level < scope.depth() && v._idx >= scope._kinds.at(level)._lexSize )
level++;
String scopeName = makeScopeName(scope, level);
sb.i()
diff --git a/src/main/java/com/seaofnodes/simple/print/SimpleWebSocket.java b/src/main/java/com/seaofnodes/simple/print/SimpleWebSocket.java
index 7655213d..4077533d 100644
--- a/src/main/java/com/seaofnodes/simple/print/SimpleWebSocket.java
+++ b/src/main/java/com/seaofnodes/simple/print/SimpleWebSocket.java
@@ -1,6 +1,6 @@
package com.seaofnodes.simple.print;
-import com.seaofnodes.simple.Utils;
+import com.seaofnodes.simple.util.Utils;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;