diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-17 06:02:21 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-17 06:02:21 +0000 |
| commit | 3425b95cb654f8e1adc98365a4b370aa1fff8b4d (patch) | |
| tree | 4d81b91d0bd807cd6f7ced037533d6e60f5c307f /tests/i/class-methods/program.cps | |
| parent | 4e22f464387725a5a282f3d72e11cfb694a31a5a (diff) | |
feat(classes): support ordinary member methods and this references
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat (limited to 'tests/i/class-methods/program.cps')
| -rw-r--r-- | tests/i/class-methods/program.cps | 89 |
1 files changed, 89 insertions, 0 deletions
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() |
