From e572d278a44d286c8713d0ee4af9c72a3d1ca73c Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sat, 17 Oct 2026 10:34:37 +0000 Subject: feat(classes): overload methods and NEW constructors Co-Authored-By: Claude Opus 5.5 --- tests/i/class-overload-methods/case.json | 1 + tests/i/class-overload-methods/expected.txt | 7 +++++ tests/i/class-overload-methods/notes.md | 7 +++++ tests/i/class-overload-methods/program.cps | 46 +++++++++++++++++++++++++++++ tests/iii/class-overload-errors/case.json | 20 +++++++++++++ tests/iii/class-overload-errors/program.cps | 20 +++++++++++++ 6 files changed, 101 insertions(+) create mode 100644 tests/i/class-overload-methods/case.json create mode 100644 tests/i/class-overload-methods/expected.txt create mode 100644 tests/i/class-overload-methods/notes.md create mode 100644 tests/i/class-overload-methods/program.cps create mode 100644 tests/iii/class-overload-errors/case.json create mode 100644 tests/iii/class-overload-errors/program.cps (limited to 'tests') diff --git a/tests/i/class-overload-methods/case.json b/tests/i/class-overload-methods/case.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/tests/i/class-overload-methods/case.json @@ -0,0 +1 @@ +{} diff --git a/tests/i/class-overload-methods/expected.txt b/tests/i/class-overload-methods/expected.txt new file mode 100644 index 0000000..d7fa519 --- /dev/null +++ b/tests/i/class-overload-methods/expected.txt @@ -0,0 +1,7 @@ +174 +11 +9 +ok! +3 +8 +1 diff --git a/tests/i/class-overload-methods/notes.md b/tests/i/class-overload-methods/notes.md new file mode 100644 index 0000000..accde5e --- /dev/null +++ b/tests/i/class-overload-methods/notes.md @@ -0,0 +1,7 @@ +# class-overload-methods + +Human review: pending. Expected output was independently traced by AI, not captured from cpsc. + +Basis: OVERLOAD is a project extension. + +Trace: The default constructor sets 1, INTEGER sets 7, STRING length sets 4. Holder.Item and both array elements default to 1. Get(INTEGER) adds 2 to 7; Get(STRING) appends !. Set(STRING) stores length 3. Keyword NEW stores 8; explicit NEW() resets to 1. diff --git a/tests/i/class-overload-methods/program.cps b/tests/i/class-overload-methods/program.cps new file mode 100644 index 0000000..e68d416 --- /dev/null +++ b/tests/i/class-overload-methods/program.cps @@ -0,0 +1,46 @@ +CLASS Box +Value : INTEGER +PUBLIC OVERLOAD PROCEDURE NEW() +Value <- 1 +ENDPROCEDURE +PUBLIC OVERLOAD PROCEDURE NEW(x : INTEGER) +Value <- x +ENDPROCEDURE +PUBLIC OVERLOAD PROCEDURE NEW(x : STRING) +Value <- LENGTH(x) +ENDPROCEDURE +OVERLOAD FUNCTION Get() RETURNS INTEGER +RETURN Value +ENDFUNCTION +OVERLOAD FUNCTION Get(x : INTEGER) RETURNS INTEGER +RETURN Value + x +ENDFUNCTION +OVERLOAD FUNCTION Get(x : STRING) RETURNS STRING +RETURN x & "!" +ENDFUNCTION +OVERLOAD PROCEDURE Set(x : INTEGER) +Value <- x +ENDPROCEDURE +OVERLOAD PROCEDURE Set(x : STRING) +Value <- LENGTH(x) +ENDPROCEDURE +ENDCLASS +TYPE Holder +DECLARE Item : Box +ENDTYPE +DECLARE a : Box +DECLARE b : Box(7) +DECLARE c : Box("four") +DECLARE h : Holder +DECLARE items : ARRAY[1:2] OF Box +OUTPUT a.Get(), b.Get(), c.Get() +OUTPUT h.Item.Get(), items[2].Get() +OUTPUT b.Get(2) +OUTPUT b.Get("ok") +CALL a.Set("abc") +OUTPUT a.Get() +a <- NEW Box(8) +OUTPUT a.Get() +CALL a.NEW() +OUTPUT a.Get() +DELETE a diff --git a/tests/iii/class-overload-errors/case.json b/tests/iii/class-overload-errors/case.json new file mode 100644 index 0000000..afc0e6a --- /dev/null +++ b/tests/iii/class-overload-errors/case.json @@ -0,0 +1,20 @@ +{ + "errors": [ + { + "reason": "Duplicate member Set in class Mixed", + "line": 4 + }, + { + "reason": "No matching overload for Required.NEW\\(\\)", + "line": 17 + }, + { + "reason": "Cannot access private method Set of type Secret", + "line": 19 + }, + { + "reason": "No matching overload for Secret.Set\\(BOOLEAN\\)", + "line": 20 + } + ] +} diff --git a/tests/iii/class-overload-errors/program.cps b/tests/iii/class-overload-errors/program.cps new file mode 100644 index 0000000..586d47d --- /dev/null +++ b/tests/iii/class-overload-errors/program.cps @@ -0,0 +1,20 @@ +CLASS Mixed +OVERLOAD PROCEDURE Set(x : INTEGER) +ENDPROCEDURE +PROCEDURE Set(x : STRING) +ENDPROCEDURE +ENDCLASS +CLASS Required +OVERLOAD PROCEDURE NEW(x : INTEGER) +ENDPROCEDURE +ENDCLASS +CLASS Secret +PRIVATE OVERLOAD PROCEDURE Set(x : INTEGER) +ENDPROCEDURE +PUBLIC OVERLOAD PROCEDURE Set(x : STRING) +ENDPROCEDURE +ENDCLASS +DECLARE item : Required +DECLARE obj : Secret +CALL obj.Set(1) +CALL obj.Set(TRUE) -- cgit v1.3.1-4-g156e