summaryrefslogtreecommitdiff
path: root/chapter28b/src/test/java
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-28 08:36:27 -0700
committerCliff Click <cliffc@acm.org>2026-10-28 08:36:27 -0700
commit76a7ee6eaf6963b044cb5d149c916c55ae4d24f7 (patch)
treeabf2a727a0393fcce128a7270039514cfc206f87 /chapter28b/src/test/java
parent19f9ea99114e9c1819239508f812d6521661f7bb (diff)
downloadSimple-76a7ee6eaf6963b044cb5d149c916c55ae4d24f7.tar.gz
Simple-76a7ee6eaf6963b044cb5d149c916c55ae4d24f7.zip
Remove a extra calls to classInitDependencies
Diffstat (limited to 'chapter28b/src/test/java')
-rw-r--r--chapter28b/src/test/java/com/seaofnodes/simple/Chapter25Test.java29
-rw-r--r--chapter28b/src/test/java/com/seaofnodes/simple/ClassInitDependenciesTest.java4
2 files changed, 33 insertions, 0 deletions
diff --git a/chapter28b/src/test/java/com/seaofnodes/simple/Chapter25Test.java b/chapter28b/src/test/java/com/seaofnodes/simple/Chapter25Test.java
index f94f641b..f5eba8f5 100644
--- a/chapter28b/src/test/java/com/seaofnodes/simple/Chapter25Test.java
+++ b/chapter28b/src/test/java/com/seaofnodes/simple/Chapter25Test.java
@@ -12,6 +12,7 @@ import com.seaofnodes.simple.node.CallNode;
import com.seaofnodes.simple.node.FunNode;
import com.seaofnodes.simple.node.LoopNode;
import com.seaofnodes.simple.type.TypeInteger;
+import com.seaofnodes.simple.type.XInt;
import com.seaofnodes.simple.util.Ary;
import java.io.File;
import java.io.FileWriter;
@@ -93,6 +94,34 @@ public class Chapter25Test {
}
}
+ @Test public void testPublicFunctionAlias() {
+ CodeGen code = new CodeGen("""
+ val _hidden = { int x -> x; };
+ val visible = _hidden;
+ val _private = { int x -> x+1; };
+ return 0;
+ """).parse();
+ int checked = 0;
+ for( FunNode fun : code._linker ) {
+ if( fun==null || fun._name==null ) continue;
+ if( fun._name.equals("_hidden") ) {
+ // A public field can publish a privately named function.
+ assertTrue(code.publicFIDX(fun.sig().fidx()));
+ checked++;
+ }
+ if( fun._name.equals("_private") ) {
+ assertFalse(code.publicFIDX(fun.sig().fidx()));
+ checked++;
+ }
+ }
+ assertEquals(2,checked);
+ var clz = code.compunit()._clz;
+ assertTrue(XInt.bit(code.publicAliases(),clz.field("visible")._alias));
+ assertFalse(XInt.bit(code.publicAliases(),clz.field("_hidden")._alias));
+ assertFalse(XInt.bit(code.publicAliases(),clz.field("_private")._alias));
+ code.driver(CodeGen.Phase.TypeCheck);
+ }
+
@Test public void testNeverReturnPointerRiscV() {
new CodeGen("""
struct _S { int x; };
diff --git a/chapter28b/src/test/java/com/seaofnodes/simple/ClassInitDependenciesTest.java b/chapter28b/src/test/java/com/seaofnodes/simple/ClassInitDependenciesTest.java
index 09391e4f..08648187 100644
--- a/chapter28b/src/test/java/com/seaofnodes/simple/ClassInitDependenciesTest.java
+++ b/chapter28b/src/test/java/com/seaofnodes/simple/ClassInitDependenciesTest.java
@@ -577,5 +577,9 @@ public class ClassInitDependenciesTest {
forward!=null && reverse!=null);
assertCycle(forward,"Root.A -> Root.B -> Root.A");
assertCycle(reverse,"Root.A -> Root.B -> Root.A");
+ // A failed check leaves an SCC on the stack. A later check must start
+ // fresh, and must not treat edges into completed SCCs as back edges.
+ deps._edgess[b]=null;
+ assertNull(deps.check());
}
}