summaryrefslogtreecommitdiff
path: root/src/test/java/com/seaofnodes/simple/test_smp
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-08-10 11:11:18 -0700
committerCliff Click <cliffc@acm.org>2026-10-08 16:52:27 -0700
commitd32f97238c903765dec4e9a9f3cbfa5fd12cded6 (patch)
treea5ac731801ef7066bab6359c4e85c2bdd20082a6 /src/test/java/com/seaofnodes/simple/test_smp
parentb5ebb2032aa04cf4506d533127d373d4cf5a25c6 (diff)
downloadSimple-linear.tar.gz
Simple-linear.zip
Chapter 25: Modules, Separate Compilation, and SSA Constructionlinear
Co-authored-by: Hsiang-Ying Fu <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: fuhsnn <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: Symious <14933944+symious@users.noreply.github.com> Co-authored-by: Jun Kawasaki <jun784@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'src/test/java/com/seaofnodes/simple/test_smp')
-rw-r--r--src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m.smp2
-rw-r--r--src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m/a.smp1
-rw-r--r--src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m/b.smp4
-rw-r--r--src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys.smp3
-rw-r--r--src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/ary.smp6
-rw-r--r--src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/aryi64.smp29
-rw-r--r--src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/aryu8.smp50
7 files changed, 95 insertions, 0 deletions
diff --git a/src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m.smp b/src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m.smp
new file mode 100644
index 00000000..569f38be
--- /dev/null
+++ b/src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m.smp
@@ -0,0 +1,2 @@
+val a = a;
+val b = b;
diff --git a/src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m/a.smp b/src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m/a.smp
new file mode 100644
index 00000000..97113b71
--- /dev/null
+++ b/src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m/a.smp
@@ -0,0 +1 @@
+val f = { -> new b(1); };
diff --git a/src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m/b.smp b/src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m/b.smp
new file mode 100644
index 00000000..43770b60
--- /dev/null
+++ b/src/test/java/com/seaofnodes/simple/test_smp/forward_ctor/m/b.smp
@@ -0,0 +1,4 @@
+struct b {
+ int x;
+ new b = { int y -> x = y; };
+};
diff --git a/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys.smp b/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys.smp
new file mode 100644
index 00000000..1725c57d
--- /dev/null
+++ b/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys.smp
@@ -0,0 +1,3 @@
+// Reduced multi-compilation-unit reproducer for order-sensitive inlining.
+var aryu8 = aryu8;
+var aryi64 = aryi64;
diff --git a/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/ary.smp b/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/ary.smp
new file mode 100644
index 00000000..e3dd6140
--- /dev/null
+++ b/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/ary.smp
@@ -0,0 +1,6 @@
+// Array utilities, discovered indirectly from aryu8.
+val copy = { u8[] dst, int doff, u8[~] src, int soff, int len ->
+ for( int i=0; i<len; i++ )
+ dst[i+doff] = src[i+soff];
+ return dst;
+};
diff --git a/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/aryi64.smp b/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/aryi64.smp
new file mode 100644
index 00000000..53c93666
--- /dev/null
+++ b/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/aryi64.smp
@@ -0,0 +1,29 @@
+struct aryi64 {
+ u32 !len = 0;
+ i64[] !buf;
+
+ new aryi64 = { i64[] b -> buf = b; };
+
+ val _grow = { int len2 ->
+ if( len+len2 < buf# ) return self;
+ int newlen = buf# * 2;
+ while( len+len2 >= newlen ) newlen *= 2;
+ i64[] !buf2 = new i64[newlen];
+ for( int i=0; i<buf#; i++ )
+ buf2[i] = buf[i];
+ buf = buf2;
+ self;
+ };
+
+ val add = { i64 c ->
+ _grow(1).buf[len++] = c;
+ self;
+ };
+
+ val str = { ->
+ var str = new aryu8(new u8[1]).add('[');
+ for( int i=0; i<len; i++ )
+ str.num(buf[i]).add(',').add(' ');
+ str.undo(2).add(']');
+ };
+};
diff --git a/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/aryu8.smp b/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/aryu8.smp
new file mode 100644
index 00000000..e6b708a4
--- /dev/null
+++ b/src/test/java/com/seaofnodes/simple/test_smp/seed_repro/sys/aryu8.smp
@@ -0,0 +1,50 @@
+struct aryu8 {
+ u32 !len = 0;
+ u8[] !buf;
+
+ new aryu8 = { u8[] b -> buf = b; };
+
+ val _grow = { int len2 ->
+ if( len+len2 < buf# ) return self;
+ int newlen = buf# * 2;
+ while( len+len2 >= newlen ) newlen *= 2;
+ u8[] !buf2 = new u8[newlen];
+ ary.copy(buf2,0,buf,0,buf#);
+ buf = buf2;
+ self;
+ };
+
+ val clear = { -> len = 0; self; };
+
+ val add = { u8 c ->
+ _grow(1).buf[len++] = c;
+ self;
+ };
+
+ val addAry = { u8[~] xs ->
+ _grow(xs#);
+ ary.copy(buf,len,xs,0,xs#);
+ len += xs#;
+ self;
+ };
+
+ val undo = { int x ->
+ len = len >= x ? len-x : 0;
+ self;
+ };
+
+ val num = { i64 x ->
+ if( !x ) { add('0'); return self; }
+ if( x < 0 ) { add('-'); x = -x; }
+ i64 ten = 1, log = 0;
+ while( ten <= x ) { ten *= 10; log++; }
+ for( int i=0; i<log; i++ ) {
+ ten /= 10;
+ i64 q = x/ten;
+ u8 digit = q+'0';
+ add(digit);
+ x -= q*ten;
+ }
+ self;
+ };
+};