aboutsummaryrefslogtreecommitdiff
path: root/tests/i/class-methods/program.cps
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-17 06:02:21 +0000
committer_ov4 <ov4@ov4.org>2026-10-17 06:02:21 +0000
commit3425b95cb654f8e1adc98365a4b370aa1fff8b4d (patch)
tree4d81b91d0bd807cd6f7ced037533d6e60f5c307f /tests/i/class-methods/program.cps
parent4e22f464387725a5a282f3d72e11cfb694a31a5a (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.cps89
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()