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:
34
src/main.c
34
src/main.c
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user