aboutsummaryrefslogtreecommitdiff
path: root/tests/i
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-17 15:22:23 +0000
committer_ov4 <ov4@ov4.org>2026-10-17 15:22:23 +0000
commitf7f5df01c416a10e3eb9508a7a7150c792a8b4ca (patch)
tree9d1fc624c74c129b24fe8b8a6f921f50b799e09a /tests/i
parent09498bb7aab9182ba172aae1045ca895d4f422d4 (diff)
feat(codegen): allow identical EXTERN redeclarations across files
Repeated EXTERN declarations with the same signature share one C symbol, as C declarations do; conflicting signatures are errors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests/i')
-rw-r--r--tests/i/multifile-extern/case.json6
-rw-r--r--tests/i/multifile-extern/expected.txt2
-rw-r--r--tests/i/multifile-extern/lib.cps6
-rw-r--r--tests/i/multifile-extern/notes.md7
-rw-r--r--tests/i/multifile-extern/program.cps6
5 files changed, 27 insertions, 0 deletions
diff --git a/tests/i/multifile-extern/case.json b/tests/i/multifile-extern/case.json
new file mode 100644
index 0000000..032ec6a
--- /dev/null
+++ b/tests/i/multifile-extern/case.json
@@ -0,0 +1,6 @@
+{
+ "sources": [
+ "program.cps",
+ "lib.cps"
+ ]
+}
diff --git a/tests/i/multifile-extern/expected.txt b/tests/i/multifile-extern/expected.txt
new file mode 100644
index 0000000..19d70eb
--- /dev/null
+++ b/tests/i/multifile-extern/expected.txt
@@ -0,0 +1,2 @@
+3
+8
diff --git a/tests/i/multifile-extern/lib.cps b/tests/i/multifile-extern/lib.cps
new file mode 100644
index 0000000..52ccf1f
--- /dev/null
+++ b/tests/i/multifile-extern/lib.cps
@@ -0,0 +1,6 @@
+INCLUDE_OBJ "__libc"
+TYPE NativeInt = C_TYPE("int")
+EXTERN "C" EXTERN_FUNCTION abs(NativeInt) RETURNS C_INT
+FUNCTION Twice(N : C_INT) RETURNS C_INT
+ RETURN abs(N) + abs(N)
+ENDFUNCTION
diff --git a/tests/i/multifile-extern/notes.md b/tests/i/multifile-extern/notes.md
new file mode 100644
index 0000000..f326c82
--- /dev/null
+++ b/tests/i/multifile-extern/notes.md
@@ -0,0 +1,7 @@
+# multifile-extern
+
+Human review: pending. Expected output was independently traced by AI, not captured from cpsc.
+
+Basis: compiler extension; identical EXTERN declarations may repeat across files, as C declarations may.
+
+Trace: abs(-3)=3. Twice(-4) returns abs(-4)+abs(-4)=8.
diff --git a/tests/i/multifile-extern/program.cps b/tests/i/multifile-extern/program.cps
new file mode 100644
index 0000000..7a0cd2d
--- /dev/null
+++ b/tests/i/multifile-extern/program.cps
@@ -0,0 +1,6 @@
+// Both files declare the same C function; aliases of int are interchangeable.
+INCLUDE "lib.cps"
+INCLUDE_OBJ "__libc"
+EXTERN "C" EXTERN_FUNCTION abs(C_INT) RETURNS C_INT
+OUTPUT abs((C_INT)-3)
+OUTPUT Twice((C_INT)-4)