diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-17 06:58:13 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-17 06:58:13 +0000 |
| commit | c372c08dc940db58f1da9cadeb64b4cb3c837704 (patch) | |
| tree | 70636fd3a485eaf16fb7f442c294ac066c76e1a1 /tests/i/class-heap-new/program.cps | |
| parent | 74b6d06711afd3efbbc47436f1491900994313f3 (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.cps | 65 |
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() |
