diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-17 06:52:23 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-17 06:52:23 +0000 |
| commit | 39661855c0816ac248be437704c76f58359cb5f0 (patch) | |
| tree | 202b014805e40208e3adb861f4a97d31770f13e6 /tests/i/class-constructors | |
| parent | c89477d615fb0ce4d89786ef848ffe6aca1da088 (diff) | |
feat(classes): construct declared objects and nested fields and arrays
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests/i/class-constructors')
| -rw-r--r-- | tests/i/class-constructors/case.json | 1 | ||||
| -rw-r--r-- | tests/i/class-constructors/expected.txt | 17 | ||||
| -rw-r--r-- | tests/i/class-constructors/notes.md | 5 | ||||
| -rw-r--r-- | tests/i/class-constructors/program.cps | 42 |
4 files changed, 65 insertions, 0 deletions
diff --git a/tests/i/class-constructors/case.json b/tests/i/class-constructors/case.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/tests/i/class-constructors/case.json @@ -0,0 +1 @@ +{} diff --git a/tests/i/class-constructors/expected.txt b/tests/i/class-constructors/expected.txt new file mode 100644 index 0000000..cb57e7c --- /dev/null +++ b/tests/i/class-constructors/expected.txt @@ -0,0 +1,17 @@ +leaf:0 +leaf:0 +name +0 +leaf:0 +leaf:0 +leaf:0 +leaf:0 +3,3 +leaf:0 +leaf:0 +pair:6 +3,3 +leaf:0 +3 +leaf:0 +3 diff --git a/tests/i/class-constructors/notes.md b/tests/i/class-constructors/notes.md new file mode 100644 index 0000000..0145a0a --- /dev/null +++ b/tests/i/class-constructors/notes.md @@ -0,0 +1,5 @@ +# Class constructors + +Human review: pending. Expected output was independently traced by AI. + +The project extends guide section 10.2 with automatic stack, field and array construction. Leaf observes its zeroed Value before setting it to 3. A and B each construct once; Named stores name; Plain has no constructor and stays zero. Four array elements each construct once. Wrapped constructs Pair's two Leaf fields in order before Pair observes their sum of 6. Each execution of the loop declaration zeroes and constructs Local again, so both iterations print leaf:0 then 3 despite storing 99 in the previous iteration. diff --git a/tests/i/class-constructors/program.cps b/tests/i/class-constructors/program.cps new file mode 100644 index 0000000..2b85b4d --- /dev/null +++ b/tests/i/class-constructors/program.cps @@ -0,0 +1,42 @@ +CLASS Leaf + Value : INTEGER + PROCEDURE New() + OUTPUT "leaf:", Value + Value <- 3 + ENDPROCEDURE +ENDCLASS +CLASS Pair + First : Leaf + Second : Leaf + PROCEDURE NEW() + OUTPUT "pair:", First.Value + Second.Value + ENDPROCEDURE +ENDCLASS +TYPE Wrapped + DECLARE Item : Pair +ENDTYPE +CLASS Named + Text : STRING + PROCEDURE NEW(Name : STRING) + Text <- Name + ENDPROCEDURE +ENDCLASS +CLASS Plain + Value : INTEGER +ENDCLASS +DECLARE A : Leaf +DECLARE B : Leaf() +DECLARE N : Named("name") +OUTPUT N.Text +DECLARE P : Plain() +OUTPUT P.Value +DECLARE Items : ARRAY[-1:0, 2:3] OF Leaf +OUTPUT Items[-1,2].Value, ",", Items[0,3].Value +DECLARE W : Wrapped +OUTPUT W.Item.First.Value, ",", W.Item.Second.Value +DECLARE Index : INTEGER +FOR Index <- 1 TO 2 + DECLARE Local : Leaf + OUTPUT Local.Value + Local.Value <- 99 +NEXT Index |
