diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-27 13:27:14 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-27 13:27:14 +0000 |
| commit | 0dd0b0908300eee08a06ee51d9eb48b85fd97d74 (patch) | |
| tree | 8e18df810a1d88f686f2b85ed2f05e3aa0985119 /tests/library/exp-memory/program.cps | |
| parent | 790e0fd7c5a81b9a27a6d84e0f3f4c7a0b17d04b (diff) | |
refactor(memory)!: move allocation functions into memory.cps
Route keyword NEW and DELETE through the same library runtime and retain
allocation tracking, runtime diagnostics and exception behavior.
BREAKING CHANGE: -no-std programs using NEW or DELETE must explicitly import memory.cps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests/library/exp-memory/program.cps')
| -rw-r--r-- | tests/library/exp-memory/program.cps | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/library/exp-memory/program.cps b/tests/library/exp-memory/program.cps new file mode 100644 index 0000000..5b0eb07 --- /dev/null +++ b/tests/library/exp-memory/program.cps @@ -0,0 +1,76 @@ +INCLUDE "../../../pseudocode-lib/memory.cps" +TYPE Raw = C_TYPE("void*") +DECLARE Empty : Raw +TYPE Size0 = C_TYPE("_Bool") +TYPE Size1 = C_TYPE("char") +TYPE Size2 = C_TYPE("signed char") +TYPE Size3 = C_TYPE("unsigned char") +TYPE Size4 = C_TYPE("short") +TYPE Size5 = C_TYPE("unsigned short") +TYPE Size6 = C_TYPE("int") +TYPE Size7 = C_TYPE("unsigned int") +TYPE Size8 = C_TYPE("long") +TYPE Size9 = C_TYPE("unsigned long") +TYPE Size10 = C_TYPE("long long") +TYPE Size11 = C_TYPE("unsigned long long") +OUTPUT malloc((Size0)0) = Empty, realloc(Empty, (Size0)0) = Empty +FREE(REALLOC(MALLOC((Size0)1), (Size0)2)) +OUTPUT malloc((Size1)0) = Empty, realloc(Empty, (Size1)0) = Empty +FREE(REALLOC(MALLOC((Size1)1), (Size1)2)) +OUTPUT malloc((Size2)0) = Empty, realloc(Empty, (Size2)0) = Empty +FREE(REALLOC(MALLOC((Size2)1), (Size2)2)) +OUTPUT malloc((Size3)0) = Empty, realloc(Empty, (Size3)0) = Empty +FREE(REALLOC(MALLOC((Size3)1), (Size3)2)) +OUTPUT malloc((Size4)0) = Empty, realloc(Empty, (Size4)0) = Empty +FREE(REALLOC(MALLOC((Size4)1), (Size4)2)) +OUTPUT malloc((Size5)0) = Empty, realloc(Empty, (Size5)0) = Empty +FREE(REALLOC(MALLOC((Size5)1), (Size5)2)) +OUTPUT malloc((Size6)0) = Empty, realloc(Empty, (Size6)0) = Empty +FREE(REALLOC(MALLOC((Size6)1), (Size6)2)) +OUTPUT malloc((Size7)0) = Empty, realloc(Empty, (Size7)0) = Empty +FREE(REALLOC(MALLOC((Size7)1), (Size7)2)) +OUTPUT malloc((Size8)0) = Empty, realloc(Empty, (Size8)0) = Empty +FREE(REALLOC(MALLOC((Size8)1), (Size8)2)) +OUTPUT malloc((Size9)0) = Empty, realloc(Empty, (Size9)0) = Empty +FREE(REALLOC(MALLOC((Size9)1), (Size9)2)) +OUTPUT malloc((Size10)0) = Empty, realloc(Empty, (Size10)0) = Empty +FREE(REALLOC(MALLOC((Size10)1), (Size10)2)) +OUTPUT malloc((Size11)0) = Empty, realloc(Empty, (Size11)0) = Empty +FREE(REALLOC(MALLOC((Size11)1), (Size11)2)) +CLASS Item + Value : INTEGER +ENDCLASS +TYPE ItemPointer = ^Item +DECLARE Obj : Item +DECLARE P : ItemPointer +DECLARE Address : Raw +Obj <- NEW Item() +Obj.Value <- 7 +P <- ^Obj +Address <- REALLOC((Raw)P, 16) +P <- (ItemPointer)Address +OUTPUT P^.Value +DELETE P^ +P <- (ItemPointer)MALLOC(8) +P^.Value <- 17 +OUTPUT P^.Value +DELETE P^ +Obj <- NEW Item() +P <- ^Obj +Address <- (Raw)P +FREE(Address) +TRY + DELETE Obj +CATCH + OUTPUT 1 +ENDTRY +TRY + MALLOC((Size2)-1) +CATCH + OUTPUT 2 +ENDTRY +TRY + MALLOC((Size11)-1) +CATCH + OUTPUT 3 +ENDTRY |
