Add list type, obj_free for compound types, and self-reference guard

- Implement OBJ_LIST with offset-based items array and capacity
- obj_free now releases child allocations (string buffer, list items)
- obj_print detects self-referencing lists to prevent infinite recursion
- Visualizer distinguishes freed blocks (JLANG_NOT_USE) from active ones
- JLANG_free now zeroes payload on release
This commit is contained in:
Jose Luis Montañes Ojados
2026-02-16 00:33:02 +01:00
parent 13c9d052a0
commit d14227efeb
3 changed files with 97 additions and 35 deletions

View File

@@ -1,24 +1,32 @@
#include "objects/object.h"
int main() {
// Creamos un allocator
JLANG_memory_allocator *allocPtr = JLANG_CreateAllocator();
printf("allocatorPtr=%p\n", allocPtr);
printf("memoryPtr=%p\n", allocPtr->memory);
printf("size=%zu\n", allocPtr->size);
size_t stringVar1 = obj_new_string(allocPtr, "Hello world!");
size_t floatVar1 = obj_new_float(allocPtr, 3.14);
size_t listVar1 = obj_new_list(allocPtr, 3);
Object *list = (Object *)JLANG_RESOLVE(allocPtr, listVar1);
size_t stringVar1 = obj_new_string(allocPtr, "\nHello world!\n");
obj_print(allocPtr, stringVar1);
size_t *items = (size_t *)JLANG_RESOLVE(allocPtr, list->data.list_val.items);
items[0] = floatVar1;
items[1] = stringVar1;
items[2] = listVar1;
obj_print(allocPtr, listVar1, "");
obj_free(allocPtr, stringVar1);
stringVar1 = obj_new_string(allocPtr, "Hola Mundo!");
items[1] = stringVar1;
items[2] = stringVar1;
obj_print(allocPtr, listVar1, "");
JLANG_visualize(allocPtr);
// obj_free(allocPtr, stringVar1);
for (int i = 0; i < 20; i++) {
obj_new_string(allocPtr, "FFFFFFFFFFFFFF");
}
obj_print(allocPtr, stringVar1);
JLANG_visualize(allocPtr);
return 0;
}