Caught some loose memory

This commit is contained in:
2022-08-13 16:26:51 +01:00
parent b80888a7bb
commit 3098d75d01
4 changed files with 25 additions and 6 deletions

View File

@@ -53,10 +53,10 @@ print [:];
print [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; print [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
//not ready yet //not ready yet
//var x = 31; var x = 31;
//var y : int = 42; var y : int = 42;
//var arr : [int] = [1, 2, 3, 42]; var arr : [int] = [1, 2, 3, 42];
//var dict : [string, int] = ["hello": 1, "world":2]; var dict : [string, int] = ["hello": 1, "world":2];
//print x; //print x;
//print x + y; //print x + y;

View File

@@ -456,6 +456,7 @@ unsigned char* collateCompiler(Compiler* compiler, int* size) {
} }
freeLiteralArray(ptr); freeLiteralArray(ptr);
FREE(LiteralArray, ptr);
} }
break; break;
@@ -486,6 +487,7 @@ unsigned char* collateCompiler(Compiler* compiler, int* size) {
} }
freeLiteralArray(ptr); freeLiteralArray(ptr);
FREE(LiteralArray, ptr);
} }
break; break;

View File

@@ -33,8 +33,26 @@ void initInterpreter(Interpreter* interpreter, unsigned char* bytecode, int leng
void freeInterpreter(Interpreter* interpreter) { void freeInterpreter(Interpreter* interpreter) {
FREE_ARRAY(char, interpreter->bytecode, interpreter->length); FREE_ARRAY(char, interpreter->bytecode, interpreter->length);
//since these are dynamically allocated, free them manually
for (int i = 0; i < interpreter->literalCache.count; i++) {
if (IS_ARRAY(interpreter->literalCache.literals[i]) || IS_DICTIONARY(interpreter->literalCache.literals[i]) || IS_TYPE(interpreter->literalCache.literals[i])) {
if (IS_TYPE(interpreter->literalCache.literals[i]) && AS_TYPE(interpreter->literalCache.literals[i]).capacity > 0) {
FREE_ARRAY(Literal, AS_TYPE(interpreter->literalCache.literals[i]).subtypes, AS_TYPE(interpreter->literalCache.literals[i]).capacity);
}
freeLiteral(interpreter->literalCache.literals[i]);
interpreter->literalCache.literals[i] = TO_NULL_LITERAL;
}
}
freeLiteralArray(&interpreter->literalCache); freeLiteralArray(&interpreter->literalCache);
interpreter->scope = popScope(interpreter->scope);
while (interpreter->scope) {
interpreter->scope = popScope(interpreter->scope);
}
freeLiteralArray(&interpreter->stack); freeLiteralArray(&interpreter->stack);
} }

View File

@@ -344,7 +344,6 @@ void freeLiteral(Literal literal) {
for (int i = 0; i < AS_TYPE(literal).count; i++) { for (int i = 0; i < AS_TYPE(literal).count; i++) {
freeLiteral(((Literal*)(AS_TYPE(literal).subtypes))[i]); freeLiteral(((Literal*)(AS_TYPE(literal).subtypes))[i]);
} }
FREE_ARRAY(Literal, AS_TYPE(literal).subtypes, AS_TYPE(literal).capacity);
return; return;
} }
} }