From 4cb0d9b196008bc55dbfcdac1f9211dbbc879895 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Fri, 30 Oct 2026 14:23:32 +0000 Subject: feat(types): support implicit single-argument constructors Co-Authored-By: Claude Opus 5.5 --- tests/i/implicit-constructors/program.cps | 63 +++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 tests/i/implicit-constructors/program.cps (limited to 'tests/i/implicit-constructors/program.cps') diff --git a/tests/i/implicit-constructors/program.cps b/tests/i/implicit-constructors/program.cps new file mode 100644 index 0000000..d13236e --- /dev/null +++ b/tests/i/implicit-constructors/program.cps @@ -0,0 +1,63 @@ +GLOBAL + DECLARE Alive : INTEGER +ENDGLOBAL +CLASS Box + Value : INTEGER + OVERLOAD PROCEDURE NEW() + Alive <- Alive + 1 + ENDPROCEDURE + OVERLOAD IMPLICIT PROCEDURE NEW(Number : INTEGER) + Value <- Number + Alive <- Alive + 1 + ENDPROCEDURE + OVERLOAD PROCEDURE NEW(BYREF Other : Box) + Value <- Other.Value + Alive <- Alive + 1 + ENDPROCEDURE + PROCEDURE DELETE() + Alive <- Alive - 1 + ENDPROCEDURE +ENDCLASS +FUNCTION Read(Value : Box) RETURNS INTEGER + RETURN Value.Value +ENDFUNCTION +OVERLOAD FUNCTION Pick(Value : Box) RETURNS INTEGER + RETURN 100 + Value.Value +ENDFUNCTION +OVERLOAD FUNCTION Pick(Value : INTEGER) RETURNS INTEGER + RETURN 200 + Value +ENDFUNCTION +OVERLOAD FUNCTION Only(Value : Box) RETURNS INTEGER + RETURN Value.Value +ENDFUNCTION +OVERLOAD FUNCTION OPERATOR+(A : Box, B : Box) RETURNS INTEGER + RETURN A.Value + B.Value +ENDFUNCTION +OVERLOAD FUNCTION OPERATOR=(A : Box, B : Box) RETURNS BOOLEAN + RETURN A.Value = B.Value +ENDFUNCTION +FUNCTION Make() RETURNS Box + RETURN 9 +ENDFUNCTION +PROCEDURE Exercise() + DECLARE B : Box + B <- 7 + OUTPUT B.Value, ":", Read(8), ":", Pick(1), ":", Only(6), ":", B + 2 + OUTPUT Read(Make()) + CASE OF B + 7 : OUTPUT TRUE + OTHERWISE : OUTPUT FALSE + ENDCASE +ENDPROCEDURE +FUNCTION Fail() RETURNS INTEGER + THROW +ENDFUNCTION +PROCEDURE Pair(Value : Box, Number : INTEGER) +ENDPROCEDURE +CALL Exercise() +OUTPUT Alive +TRY + CALL Pair(1, Fail()) +CATCH + OUTPUT Alive +ENDTRY -- cgit v1.3.1-4-g156e