From 3425b95cb654f8e1adc98365a4b370aa1fff8b4d Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sat, 17 Oct 2026 06:02:21 +0000 Subject: feat(classes): support ordinary member methods and this references Co-Authored-By: Claude Fable 5.1 --- tests/i/class-methods/program.cps | 89 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 tests/i/class-methods/program.cps (limited to 'tests/i/class-methods/program.cps') diff --git a/tests/i/class-methods/program.cps b/tests/i/class-methods/program.cps new file mode 100644 index 0000000..655fb8b --- /dev/null +++ b/tests/i/class-methods/program.cps @@ -0,0 +1,89 @@ +CLASS Counter + PRIVATE Value : INTEGER + PROCEDURE Set(Number : INTEGER) + Value <- Number + ENDPROCEDURE + FUNCTION Get() RETURNS INTEGER + RETURN Value + ENDFUNCTION + PROCEDURE Add(Number : INTEGER) + this.Set(this.Get() + Number) + ENDPROCEDURE + PROCEDURE Copy(Other : Counter) + this <- Other + ENDPROCEDURE + FUNCTION Clone() RETURNS Counter + RETURN this + ENDFUNCTION + FUNCTION ReadOther(Other : Counter) RETURNS INTEGER + RETURN Other.Hidden() + ENDFUNCTION + PRIVATE FUNCTION Hidden() RETURNS INTEGER + RETURN Value + ENDFUNCTION + FUNCTION Sum(Number : INTEGER) RETURNS INTEGER + IF Number = 0 THEN + RETURN 0 + ENDIF + RETURN Number + this.Sum(Number - 1) + ENDFUNCTION + PROCEDURE Take(BYREF Number : INTEGER, BYREF Values : ARRAY OF INTEGER) + Number <- Number + Value + Values[1] <- Number + ENDPROCEDURE + PROCEDURE Fail() + THROW + ENDPROCEDURE + PROCEDURE PassSelf() + CALL Change(this) + ENDPROCEDURE +ENDCLASS +CLASS Marker + FUNCTION Get() RETURNS INTEGER + RETURN 99 + ENDFUNCTION +ENDCLASS +TYPE Container + DECLARE Item : Counter +ENDTYPE +TYPE CounterPointer = ^Counter +PROCEDURE Change(BYREF Target : Counter) + Target.Set(42) +ENDPROCEDURE +FUNCTION Get() RETURNS INTEGER + RETURN 100 +ENDFUNCTION +DECLARE A : Counter +DECLARE B : Counter +CALL a.sET(3) +B.Set(8) +A.Add(2) +OUTPUT A.Get(), ",", B.Get() +CALL A.Copy(B) +A.Set(9) +OUTPUT A.Get(), ",", B.Get() +B <- A.Clone() +OUTPUT B.Get(), ",", A.ReadOther(B) +OUTPUT A.Sum(4), ",", Get() +DECLARE Items : ARRAY[1:2] OF Counter +Items[1].Set(6) +DECLARE Wrapped : Container +Wrapped.Item.Set(7) +DECLARE P : CounterPointer +P <- ^Items[1] +P^.Add(4) +OUTPUT Items[1].Get(), ",", Wrapped.Item.Get() +DECLARE Number : INTEGER +DECLARE Values : ARRAY[1:2] OF INTEGER +Number <- 1 +CALL A.Take(Number, Values) +OUTPUT Number, ",", Values[1] +TRY + A.Fail() +CATCH + OUTPUT "caught" +ENDTRY +A.PassSelf() +OUTPUT A.Get() +DECLARE M : Marker +OUTPUT M.Get() -- cgit v1.3.1-4-g156e