aboutsummaryrefslogtreecommitdiff
path: root/tests/i/class-heap-new/program.cps
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-17 06:54:32 +0000
committer_ov4 <ov4@ov4.org>2026-10-17 06:54:32 +0000
commit74b6d06711afd3efbbc47436f1491900994313f3 (patch)
treeb9050214b147cd2b1b54fd27e75d669bf6146e48 /tests/i/class-heap-new/program.cps
parent39661855c0816ac248be437704c76f58359cb5f0 (diff)
feat(classes): allocate objects with NEW and rebind named class variables
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests/i/class-heap-new/program.cps')
-rw-r--r--tests/i/class-heap-new/program.cps100
1 files changed, 100 insertions, 0 deletions
diff --git a/tests/i/class-heap-new/program.cps b/tests/i/class-heap-new/program.cps
new file mode 100644
index 0000000..7b8363f
--- /dev/null
+++ b/tests/i/class-heap-new/program.cps
@@ -0,0 +1,100 @@
+CLASS Box
+ Value : INTEGER
+ PROCEDURE NEW()
+ Value <- 1
+ ENDPROCEDURE
+ PROCEDURE Reset()
+ this.NEW()
+ ENDPROCEDURE
+ PROCEDURE ReplaceSelf()
+ this <- NEW Box()
+ ENDPROCEDURE
+ENDCLASS
+CLASS Named
+ Value : INTEGER
+ PROCEDURE NEW(Number : INTEGER)
+ Value <- Number
+ ENDPROCEDURE
+ENDCLASS
+CLASS Holder
+ Item : Box
+ PROCEDURE ReplaceField()
+ Item <- NEW Box
+ ENDPROCEDURE
+ENDCLASS
+CLASS Failing
+ PROCEDURE NEW()
+ THROW
+ ENDPROCEDURE
+ENDCLASS
+TYPE BoxPointer = ^Box
+PROCEDURE ReplaceRef(BYREF Item : Box)
+ Item <- NEW Box
+ENDPROCEDURE
+PROCEDURE ReplaceVal(Item : Box)
+ DECLARE Old : BoxPointer
+ Old <- ^Item
+ Item <- NEW Box()
+ Item.Value <- 20
+ OUTPUT "byval:", Old^.Value, ",", Item.Value
+ENDPROCEDURE
+DECLARE A : Box
+DECLARE B : Box
+DECLARE OldA : BoxPointer
+DECLARE CurrentA : BoxPointer
+OldA <- ^A
+A.Value <- 7
+A <- NEW Box
+A.Value <- 9
+CurrentA <- ^A
+OUTPUT "rebind:", OldA^.Value, ",", A.Value
+B.Value <- 4
+A <- B
+OUTPUT "copy:", OldA^.Value, ",", CurrentA^.Value, ",", B.Value
+CALL ReplaceVal(A)
+OUTPUT "caller:", A.Value
+CALL ReplaceRef(A)
+OUTPUT "byref:", CurrentA^.Value, ",", A.Value
+A.Value <- 11
+A.ReplaceSelf()
+OUTPUT "this:", CurrentA^.Value, ",", A.Value
+A.Value <- 12
+A.Reset()
+OUTPUT "reset:", A.Value
+DECLARE Items : ARRAY[1:2] OF Box
+DECLARE Element : BoxPointer
+Element <- ^Items[1]
+Items[1].Value <- 30
+Items[1] <- NEW Box()
+OUTPUT "array:", Element^.Value, ",", Items[2].Value
+DECLARE H : Holder
+DECLARE Field : BoxPointer
+Field <- ^H.Item
+H.Item.Value <- 40
+H.Item <- NEW Box
+OUTPUT "field:", Field^.Value
+H.Item.Value <- 41
+H.ReplaceField()
+OUTPUT "alias:", Field^.Value
+CurrentA^ <- NEW Box
+OUTPUT "deref:", A.Value
+DECLARE N : Named(0)
+N <- NEW Named(42)
+OUTPUT "args:", N.Value
+TRY
+ DECLARE Broken : Failing
+CATCH
+ OUTPUT "declare caught"
+ENDTRY
+TRY
+ Broken <- NEW Failing
+CATCH
+ OUTPUT "new caught"
+ENDTRY
+DECLARE Index : INTEGER
+FOR Index <- 1 TO 2
+ DECLARE Local : Box
+ OUTPUT "loop:", Local.Value
+ Local <- NEW Box
+ Local.Value <- 99
+NEXT Index