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/iii/implicit-conversion-errors/case.json | 24 ++++++++++++ tests/iii/implicit-conversion-errors/program.cps | 48 ++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 tests/iii/implicit-conversion-errors/case.json create mode 100644 tests/iii/implicit-conversion-errors/program.cps (limited to 'tests/iii/implicit-conversion-errors') diff --git a/tests/iii/implicit-conversion-errors/case.json b/tests/iii/implicit-conversion-errors/case.json new file mode 100644 index 0000000..a004af2 --- /dev/null +++ b/tests/iii/implicit-conversion-errors/case.json @@ -0,0 +1,24 @@ +{ + "errors": [ + { + "line": 28, + "reason": "Cannot use a value of type INTEGER where ExplicitOnly is expected" + }, + { + "line": 29, + "reason": "Cannot use a value of type INTEGER where Second is expected" + }, + { + "line": 30, + "reason": "BYREF argument I to Ref must be of type First" + }, + { + "line": 41, + "reason": "Ambiguous call to Ambiguous" + }, + { + "line": 48, + "reason": "Cannot access private method NEW" + } + ] +} diff --git a/tests/iii/implicit-conversion-errors/program.cps b/tests/iii/implicit-conversion-errors/program.cps new file mode 100644 index 0000000..6297b16 --- /dev/null +++ b/tests/iii/implicit-conversion-errors/program.cps @@ -0,0 +1,48 @@ +CLASS ExplicitOnly + Value : INTEGER + PROCEDURE NEW(Number : INTEGER) + Value <- Number + ENDPROCEDURE +ENDCLASS +CLASS First + Value : INTEGER + IMPLICIT PROCEDURE NEW(Number : INTEGER) + Value <- Number + ENDPROCEDURE +ENDCLASS +CLASS Second + Value : INTEGER + IMPLICIT PROCEDURE NEW(Other : First) + Value <- Other.Value + ENDPROCEDURE +ENDCLASS +OVERLOAD PROCEDURE Choose(Value : First) +ENDPROCEDURE +OVERLOAD PROCEDURE Choose(Value : Second) +ENDPROCEDURE +PROCEDURE Ref(BYREF Value : First) +ENDPROCEDURE +DECLARE E : ExplicitOnly(1) +DECLARE S : Second +DECLARE I : INTEGER +E <- 1 +S <- 1 +CALL Ref(I) +CLASS Alternative + Value : INTEGER + IMPLICIT PROCEDURE NEW(Number : INTEGER) + Value <- Number + ENDPROCEDURE +ENDCLASS +OVERLOAD PROCEDURE Ambiguous(Value : First) +ENDPROCEDURE +OVERLOAD PROCEDURE Ambiguous(Value : Alternative) +ENDPROCEDURE +CALL Ambiguous(1) +CLASS Hidden + PRIVATE IMPLICIT PROCEDURE NEW(Number : INTEGER) + ENDPROCEDURE +ENDCLASS +PROCEDURE HiddenArg(Value : Hidden) +ENDPROCEDURE +CALL HiddenArg(1) -- cgit v1.3.1-4-g156e