From 16231050058131860f710073c17d3bca7c6637eb Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sun, 18 Oct 2026 06:05:53 +0000 Subject: feat(operators): support global binary operator overloads Resolve exact operand types and preserve declared operator return types. Reject implicit STRING to BOOLEAN conversion at typed expression boundaries. Co-Authored-By: Claude Opus 5.5 --- tests/i/operator-global/program.cps | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 tests/i/operator-global/program.cps (limited to 'tests/i/operator-global/program.cps') diff --git a/tests/i/operator-global/program.cps b/tests/i/operator-global/program.cps new file mode 100644 index 0000000..9d27fcb --- /dev/null +++ b/tests/i/operator-global/program.cps @@ -0,0 +1,28 @@ +TYPE Box +DECLARE Value : INTEGER +ENDTYPE +OVERLOAD FUNCTION OPERATOR+(a : Box, b : Box) RETURNS Box +DECLARE result : Box +result.Value <- a.Value + b.Value +RETURN result +ENDFUNCTION +OVERLOAD FUNCTION OPERATOR&(a : Box, b : STRING) RETURNS STRING +RETURN NUM_TO_STR(a.Value) & b +ENDFUNCTION +OVERLOAD FUNCTION OPERATOR<(a : Box, b : Box) RETURNS STRING +RETURN "comparison" +ENDFUNCTION +OVERLOAD FUNCTION OPERATOR+(a : INTEGER, b : Box) RETURNS INTEGER +RETURN a + b.Value +ENDFUNCTION +DECLARE a : Box +DECLARE b : Box +DECLARE result : Box +a.Value <- 2 +b.Value <- 3 +result <- a + b + a +OUTPUT result.Value +OUTPUT a & "!" +OUTPUT a < b +OUTPUT 4 + a +OUTPUT 2 + 3, "x" & "y", 1 < 2 -- cgit v1.3.1-4-g156e