summaryrefslogtreecommitdiff
path: root/chapter13/src/main
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2024-08-05 12:01:38 -0700
committerDibyendu Majumdar <dibyendumajumdar@users.noreply.github.com>2024-08-06 00:50:58 +0100
commit9bc99b3987f1daea61c329b9327814d9a9148ebe (patch)
treebedb434e4af4ae377a32d7250e61f30a76d452b1 /chapter13/src/main
parent0fb76e75be3a35d6b4741e9ae4378fa04868a840 (diff)
downloadSimple-9bc99b3987f1daea61c329b9327814d9a9148ebe.tar.gz
Simple-9bc99b3987f1daea61c329b9327814d9a9148ebe.zip
Fix graph draw with field names
Allow co-recursive defs
Diffstat (limited to 'chapter13/src/main')
-rw-r--r--chapter13/src/main/java/com/seaofnodes/simple/Parser.java3
-rw-r--r--chapter13/src/main/java/com/seaofnodes/simple/node/LoadNode.java4
-rw-r--r--chapter13/src/main/java/com/seaofnodes/simple/node/StoreNode.java8
3 files changed, 8 insertions, 7 deletions
diff --git a/chapter13/src/main/java/com/seaofnodes/simple/Parser.java b/chapter13/src/main/java/com/seaofnodes/simple/Parser.java
index 56c8e955..bde697d6 100644
--- a/chapter13/src/main/java/com/seaofnodes/simple/Parser.java
+++ b/chapter13/src/main/java/com/seaofnodes/simple/Parser.java
@@ -195,7 +195,8 @@ public class Parser {
private Node parseStruct() {
if (_xScopes.size() > 1) throw errorSyntax("struct declarations can only appear in top level scope");
String typeName = requireId();
- if ( TYPES.containsKey(typeName)) throw errorSyntax("struct '" + typeName + "' cannot be redefined");
+ Type t = TYPES.get(typeName);
+ if( t!=null && !(t instanceof TypeStruct ts && ts._fields==null) ) throw errorSyntax("struct '" + typeName + "' cannot be redefined");
ArrayList<Field> fields = new ArrayList<>();
require("{");
while (!peek('}') && !_lexer.isEOF()) {
diff --git a/chapter13/src/main/java/com/seaofnodes/simple/node/LoadNode.java b/chapter13/src/main/java/com/seaofnodes/simple/node/LoadNode.java
index e235cc36..0c5d72e5 100644
--- a/chapter13/src/main/java/com/seaofnodes/simple/node/LoadNode.java
+++ b/chapter13/src/main/java/com/seaofnodes/simple/node/LoadNode.java
@@ -24,8 +24,8 @@ public class LoadNode extends MemOpNode {
_declaredType = glb;
}
- @Override
- public String label() { return "."+_name; }
+ @Override public String label() { return _name; }
+ @Override public String glabel() { return "."+_name; }
@Override
StringBuilder _print1(StringBuilder sb, BitSet visited) { return sb.append(".").append(_name); }
diff --git a/chapter13/src/main/java/com/seaofnodes/simple/node/StoreNode.java b/chapter13/src/main/java/com/seaofnodes/simple/node/StoreNode.java
index 2b4a46dd..89141892 100644
--- a/chapter13/src/main/java/com/seaofnodes/simple/node/StoreNode.java
+++ b/chapter13/src/main/java/com/seaofnodes/simple/node/StoreNode.java
@@ -21,10 +21,10 @@ public class StoreNode extends MemOpNode {
super(name, alias, memSlice, memPtr, value);
}
- @Override
- public String label() { return "."+_name+"="; }
- @Override
- public boolean isMem() { return true; }
+ @Override public String label() { return "ST"+_name; }
+ @Override public String glabel() { return "." +_name+"="; }
+ @Override public boolean isMem() { return true; }
+
public Node val() { return in(3); }
@Override