diff --git a/makefile b/makefile index 5a7e7cb..bbab68e 100644 --- a/makefile +++ b/makefile @@ -26,7 +26,7 @@ repl: source #various kinds of available tests .PHONY: tests -tests: clean test-cases +tests: clean test-cases test-integrations .PHONY: test-all test-all: clean test-cases test-integrations test-benchmarks diff --git a/source/toy_array.c b/source/toy_array.c index a103b1f..2640e71 100644 --- a/source/toy_array.c +++ b/source/toy_array.c @@ -5,13 +5,18 @@ #include Toy_Array* Toy_resizeArray(Toy_Array* paramArray, unsigned int capacity) { - //TODO: slip in a call to free the complex values here - if (capacity == 0) { free(paramArray); return NULL; } + //if some values will be removed, free them first + if (paramArray != NULL && paramArray->count > capacity) { + for (unsigned int i = capacity; i < paramArray->count; i++) { + Toy_freeValue(paramArray->data[i]); + } + } + unsigned int originalCapacity = paramArray == NULL ? 0 : paramArray->capacity; Toy_Array* array = realloc(paramArray, capacity * sizeof(Toy_Value) + sizeof(Toy_Array)); diff --git a/source/toy_stack.c b/source/toy_stack.c index 6e76755..5e809ec 100644 --- a/source/toy_stack.c +++ b/source/toy_stack.c @@ -19,9 +19,12 @@ Toy_Stack* Toy_allocateStack() { } void Toy_freeStack(Toy_Stack* stack) { - //TODO: slip in a call to free the complex values here - if (stack != NULL) { + //if some values will be removed, free them first + for (unsigned int i = 0; i < stack->count; i++) { + Toy_freeValue(stack->data[i]); + } + free(stack); } } diff --git a/source/toy_table.c b/source/toy_table.c index 5d1c3fb..ca50daf 100644 --- a/source/toy_table.c +++ b/source/toy_table.c @@ -89,9 +89,15 @@ Toy_Table* Toy_allocateTable() { } void Toy_freeTable(Toy_Table* table) { - //TODO: slip in a call to free the complex values here + if (table != NULL) { + //if some values will be removed, free them first + for (unsigned int i = 0; i < table->capacity; i++) { + Toy_freeValue(table->data[i].key); + Toy_freeValue(table->data[i].value); + } - free(table); + free(table); + } } void Toy_insertTable(Toy_Table** tableHandle, Toy_Value key, Toy_Value value) {