diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-27 16:06:06 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-27 16:06:06 -0700 |
| commit | cee889b33477e753ff26f56a05f6ae27cdb43cb1 (patch) | |
| tree | 5750d679d4b9d9a1eb7cf56559952e7558adf6ae /chapter28b/src/main/java | |
| parent | 0bf3ce826ca0546b08f9d7a513930017fcf63f89 (diff) | |
| download | Simple-cee889b33477e753ff26f56a05f6ae27cdb43cb1.tar.gz Simple-cee889b33477e753ff26f56a05f6ae27cdb43cb1.zip | |
Bugfix escapes not-coded <init>
Diffstat (limited to 'chapter28b/src/main/java')
| -rw-r--r-- | chapter28b/src/main/java/com/seaofnodes/simple/Parser.java | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/chapter28b/src/main/java/com/seaofnodes/simple/Parser.java b/chapter28b/src/main/java/com/seaofnodes/simple/Parser.java index 8410bf5c..83bef882 100644 --- a/chapter28b/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter28b/src/main/java/com/seaofnodes/simple/Parser.java @@ -1486,11 +1486,6 @@ public class Parser { return TypeFunPtr.make1((byte)2, true, targs, tret, _code.fidx(clzBare,order)); } - // A class type carries the constructor function as a required final field. - private TypeStruct classStruct( String typeName, TypeFunPtr init, boolean open ) { - return TypeStruct.make(addClzPrefix(typeName),open,Field.make(initFieldName(typeName),init,_code.alias(_ref._cname),true)); - } - private static String initFieldName( String typeName ) { if( startsClzPrefix(typeName) ) typeName = typeName.substring(clzPrefix.length()); @@ -1702,7 +1697,10 @@ public class Parser { private TypeMemPtr forwardRefType( String tname, TypeStruct tself ) { TYPES.put(tname,tself); String clzName = addClzPrefix( tname ); - TYPES.put(clzName, classStruct(tname,structInitSig(false,tself),true)); + // Only a struct declaration publishes an instance initializer. A + // forward type may name a file with just <clinit>, so do not invent + // a constructor field (or overwrite an already parsed class). + TYPES.putIfAbsent(clzName,TypeStruct.make(clzName,true)); return TypeMemPtr.make(tself); } |
