summaryrefslogtreecommitdiff
path: root/src/test/smp/separate
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-08-10 11:11:18 -0700
committerCliff Click <cliffc@acm.org>2026-10-25 10:24:58 -0700
commit9fa1ae3bd9460f6b2c31e30ecef489a82c0776b7 (patch)
treeb620cad97bc98ca5534fbfbf1c74a4059e60f2e2 /src/test/smp/separate
parent75495bdee0e36c3277ad19734125529cdd48e4e2 (diff)
downloadSimple-9fa1ae3bd9460f6b2c31e30ecef489a82c0776b7.tar.gz
Simple-9fa1ae3bd9460f6b2c31e30ecef489a82c0776b7.zip
Chapter 28b: Separate Compilationlinear
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/smp/separate')
-rw-r--r--src/test/smp/separate/client/Main.smp6
-rw-r--r--src/test/smp/separate/library/Counters.smp12
2 files changed, 18 insertions, 0 deletions
diff --git a/src/test/smp/separate/client/Main.smp b/src/test/smp/separate/client/Main.smp
new file mode 100644
index 00000000..077f6575
--- /dev/null
+++ b/src/test/smp/separate/client/Main.smp
@@ -0,0 +1,6 @@
+val run={int n ->
+ if(!n) return 0;
+ val c=new Counters.Counter(n);
+ return c.get()+100*Counters.next_noInline();
+};
+return run(arg);
diff --git a/src/test/smp/separate/library/Counters.smp b/src/test/smp/separate/library/Counters.smp
new file mode 100644
index 00000000..a3e36562
--- /dev/null
+++ b/src/test/smp/separate/library/Counters.smp
@@ -0,0 +1,12 @@
+// A library can keep shared state and publish instance constructors.
+int calls=0;
+val next_noInline={ -> calls++; return calls; };
+
+struct Counter {
+ val value=1;
+ new Counter={int n ->
+ value=0;
+ for(int i=0; i<n; i++) value=value*2+1;
+ };
+ val get={ -> value; };
+};