From 0dd0b0908300eee08a06ee51d9eb48b85fd97d74 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 27 Oct 2026 13:27:14 +0000 Subject: 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 --- pseudocode-lib/memory.cps | 99 +++++++++++++++++++++++++++++++++++++++++++++++ pseudocode-lib/std.cps | 1 + 2 files changed, 100 insertions(+) create mode 100644 pseudocode-lib/memory.cps (limited to 'pseudocode-lib') diff --git a/pseudocode-lib/memory.cps b/pseudocode-lib/memory.cps new file mode 100644 index 0000000..26287c3 --- /dev/null +++ b/pseudocode-lib/memory.cps @@ -0,0 +1,99 @@ +#LIB +INCLUDE_OBJ "memory.o" +TYPE _MEMORY_ADDRESS = C_TYPE("void*") +TYPE _MEMORY_SIZE = C_TYPE("unsigned long long") +TYPE _MEMORY_C_BOOL = C_TYPE("_Bool") +TYPE _MEMORY_C_SIGNED_CHAR = C_TYPE("signed char") +TYPE _MEMORY_C_UNSIGNED_CHAR = C_TYPE("unsigned char") +TYPE _MEMORY_C_SHORT = C_TYPE("short") +TYPE _MEMORY_C_UNSIGNED_SHORT = C_TYPE("unsigned short") +TYPE _MEMORY_C_UNSIGNED_INT = C_TYPE("unsigned int") +TYPE _MEMORY_C_LONG = C_TYPE("long") +TYPE _MEMORY_C_UNSIGNED_LONG = C_TYPE("unsigned long") +TYPE _MEMORY_C_LONG_LONG = C_TYPE("long long") +EXTERN "C" EXTERN_FUNCTION _memory_impl_malloc(_MEMORY_SIZE) RETURNS _MEMORY_ADDRESS +EXTERN "C" EXTERN_FUNCTION _memory_impl_realloc(_MEMORY_ADDRESS, _MEMORY_SIZE) RETURNS _MEMORY_ADDRESS +EXTERN "C" EXTERN_FUNCTION _memory_impl_free(_MEMORY_ADDRESS) RETURNS _MEMORY_ADDRESS +EXTERN "C" EXTERN_PROCEDURE _memory_impl_validate(_MEMORY_ADDRESS) + +OVERLOAD FUNCTION MALLOC(Bytes : INTEGER) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : INTEGER) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_C_BOOL) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_C_BOOL) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : C_CHAR) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : C_CHAR) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_C_SIGNED_CHAR) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_C_SIGNED_CHAR) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_C_UNSIGNED_CHAR) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_C_UNSIGNED_CHAR) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_C_SHORT) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_C_SHORT) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_C_UNSIGNED_SHORT) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_C_UNSIGNED_SHORT) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : C_INT) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : C_INT) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_C_UNSIGNED_INT) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_C_UNSIGNED_INT) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_C_LONG) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_C_LONG) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_C_UNSIGNED_LONG) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_C_UNSIGNED_LONG) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_C_LONG_LONG) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_C_LONG_LONG) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION MALLOC(Bytes : _MEMORY_SIZE) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_malloc((_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION REALLOC(Address : _MEMORY_ADDRESS, Bytes : _MEMORY_SIZE) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_realloc(Address, (_MEMORY_SIZE)Bytes) +ENDFUNCTION +OVERLOAD FUNCTION FREE(Address : _MEMORY_ADDRESS) RETURNS _MEMORY_ADDRESS + RETURN _memory_impl_free(Address) +ENDFUNCTION diff --git a/pseudocode-lib/std.cps b/pseudocode-lib/std.cps index 0ec4b9d..6068bd0 100644 --- a/pseudocode-lib/std.cps +++ b/pseudocode-lib/std.cps @@ -1,2 +1,3 @@ #LIB INCLUDE "string.cps" +INCLUDE "memory.cps" -- cgit v1.3.1-4-g156e