From 377a1fd2eadd2a70cd27f13e2fee6e96c8706a51 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sat, 17 Oct 2026 10:32:30 +0000 Subject: feat(codegen): overload global functions and procedures Co-Authored-By: Claude Opus 5.5 --- tests/i/overload-functions/case.json | 1 + tests/i/overload-functions/expected.txt | 10 +++++++ tests/i/overload-functions/notes.md | 9 ++++++ tests/i/overload-functions/program.cps | 49 +++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 tests/i/overload-functions/case.json create mode 100644 tests/i/overload-functions/expected.txt create mode 100644 tests/i/overload-functions/notes.md create mode 100644 tests/i/overload-functions/program.cps (limited to 'tests/i/overload-functions') diff --git a/tests/i/overload-functions/case.json b/tests/i/overload-functions/case.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/tests/i/overload-functions/case.json @@ -0,0 +1 @@ +{} diff --git a/tests/i/overload-functions/expected.txt b/tests/i/overload-functions/expected.txt new file mode 100644 index 0000000..65c760e --- /dev/null +++ b/tests/i/overload-functions/expected.txt @@ -0,0 +1,10 @@ +3 +TRUE +pair +text +7 +9 +TRUE +3 +5 +TRUE diff --git a/tests/i/overload-functions/notes.md b/tests/i/overload-functions/notes.md new file mode 100644 index 0000000..dcfdde3 --- /dev/null +++ b/tests/i/overload-functions/notes.md @@ -0,0 +1,9 @@ +# overload-functions + +Human review: pending. Expected output was independently traced by AI, not captured from cpsc. + +Basis: OVERLOAD is a project extension. + +Trace: INTEGER adds one; positive REAL returns TRUE; two INTEGERs return pair; STRING prints text. Rank-one INTEGER, rank-two INTEGER and REAL arrays select distinct overloads and yield 7, 9 and TRUE. Nested Pick(1) returns INTEGER 2, so the outer call yields 3. + +Bump selects INTEGER and mutates 4 to 5 through BYREF. The ordinary Legacy function still converts INTEGER 1 to REAL and returns TRUE. diff --git a/tests/i/overload-functions/program.cps b/tests/i/overload-functions/program.cps new file mode 100644 index 0000000..e76637d --- /dev/null +++ b/tests/i/overload-functions/program.cps @@ -0,0 +1,49 @@ +OVERLOAD FUNCTION Pick(x : INTEGER) RETURNS INTEGER +RETURN x + 1 +ENDFUNCTION +OVERLOAD FUNCTION Pick(x : REAL) RETURNS BOOLEAN +RETURN x > 0 +ENDFUNCTION +OVERLOAD FUNCTION Pick(x : INTEGER, y : INTEGER) RETURNS STRING +RETURN "pair" +ENDFUNCTION +OVERLOAD PROCEDURE Pick(x : STRING) +OUTPUT x +ENDPROCEDURE +OVERLOAD FUNCTION Pick(a : ARRAY OF INTEGER) RETURNS INTEGER +RETURN a[1] +ENDFUNCTION +OVERLOAD FUNCTION Pick(a : ARRAY[1:2,1:2] OF INTEGER) RETURNS INTEGER +RETURN a[2,2] +ENDFUNCTION +OVERLOAD FUNCTION Pick(a : ARRAY OF REAL) RETURNS BOOLEAN +RETURN a[1] > 0 +ENDFUNCTION +DECLARE a : ARRAY[1:2] OF INTEGER +DECLARE b : ARRAY[1:2,1:2] OF INTEGER +DECLARE c : ARRAY[1:2] OF REAL +a[1] <- 7 +b[2,2] <- 9 +c[1] <- 1.0 +OUTPUT pIcK(2) +OUTPUT Pick(2.0) +OUTPUT Pick(1, 2) +CALL Pick("text") +OUTPUT Pick(a) +OUTPUT Pick(b) +OUTPUT Pick(c) +OUTPUT Pick(Pick(1)) +OVERLOAD PROCEDURE Bump(BYREF x : INTEGER) +x <- x + 1 +ENDPROCEDURE +OVERLOAD PROCEDURE Bump(BYREF x : REAL) +x <- x + 2.0 +ENDPROCEDURE +FUNCTION Legacy(x : REAL) RETURNS BOOLEAN +RETURN x > 0 +ENDFUNCTION +DECLARE n : INTEGER +n <- 4 +CALL Bump(n) +OUTPUT n +OUTPUT Legacy(1) -- cgit v1.3.1-4-g156e