aboutsummaryrefslogtreecommitdiff
path: root/tests/i/class-heap-new/program.cps
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-17 06:58:13 +0000
committer_ov4 <ov4@ov4.org>2026-10-17 06:58:13 +0000
commitc372c08dc940db58f1da9cadeb64b4cb3c837704 (patch)
tree70636fd3a485eaf16fb7f442c294ac066c76e1a1 /tests/i/class-heap-new/program.cps
parent74b6d06711afd3efbbc47436f1491900994313f3 (diff)
fix(classes): preserve method-only heap objects and document NEW
Allocate at least one byte for method-only classes so their heap addresses remain usable through pointers. Complete constructor diagnostics, field-order and exception coverage, document construction and rebinding, and highlight NEW. 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.cps65
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/i/class-heap-new/program.cps b/tests/i/class-heap-new/program.cps
index 7b8363f..aff248a 100644
--- a/tests/i/class-heap-new/program.cps
+++ b/tests/i/class-heap-new/program.cps
@@ -98,3 +98,68 @@ FOR Index <- 1 TO 2
Local <- NEW Box
Local.Value <- 99
NEXT Index
+CLASS Fragile
+ Value : INTEGER
+ PROCEDURE NEW(Fail : BOOLEAN)
+ Value <- 70
+ IF Fail THEN
+ THROW
+ ENDIF
+ ENDPROCEDURE
+ENDCLASS
+TYPE FragilePointer = ^Fragile
+DECLARE Stable : Fragile(FALSE)
+DECLARE Original : FragilePointer
+Original <- ^Stable
+Stable.Value <- 71
+TRY
+ Stable <- NEW Fragile(TRUE)
+CATCH
+ OUTPUT "failed rebind:", Stable.Value, ",", Original^.Value
+ENDTRY
+H.Item.Value <- 80
+H <- NEW Holder()
+OUTPUT "nested heap:", Field^.Value, ",", H.Item.Value
+CLASS OrderedFirst
+ PROCEDURE NEW()
+ OUTPUT "first"
+ ENDPROCEDURE
+ENDCLASS
+CLASS OrderedSecond
+ PROCEDURE NEW()
+ OUTPUT "second"
+ ENDPROCEDURE
+ENDCLASS
+CLASS Ordered
+ First : OrderedFirst
+ Second : OrderedSecond
+ PROCEDURE NEW()
+ OUTPUT "outer"
+ ENDPROCEDURE
+ENDCLASS
+DECLARE Order : Ordered
+Order <- NEW Ordered
+CLASS PrivateFactory
+ Value : INTEGER
+ PRIVATE PROCEDURE NEW()
+ Value <- 1
+ ENDPROCEDURE
+ PROCEDURE Build()
+ DECLARE Local : PrivateFactory
+ Local <- NEW PrivateFactory
+ Local.NEW()
+ ENDPROCEDURE
+ENDCLASS
+CLASS Marker
+ PROCEDURE NEW()
+ ENDPROCEDURE
+ FUNCTION Get() RETURNS INTEGER
+ RETURN 99
+ ENDFUNCTION
+ENDCLASS
+TYPE MarkerPointer = ^Marker
+DECLARE M : Marker
+DECLARE MarkerAddress : MarkerPointer
+M <- NEW Marker
+MarkerAddress <- ^M
+OUTPUT "method only:", MarkerAddress^.Get()