fixed segfault on parser objection

This commit is contained in:
CPunch 2020-10-28 18:29:50 -05:00
parent 2e1b745624
commit 8e71cab642
2 changed files with 6 additions and 4 deletions

View File

@ -23,6 +23,9 @@ CObj *cosmoO_allocateObject(CState *state, size_t sz, CObjType type) {
obj->next = state->objects;
state->objects = obj;
#ifdef GC_DEBUG
printf("allocated %p with OBJ_TYPE %d\n", obj, type);
#endif
return obj;
}

View File

@ -995,14 +995,13 @@ CObjFunction* cosmoP_compileString(CState *state, const char *source) {
popLocals(&parser, -1); // needed to close over the values
if (parser.hadError) { // free the function too
cosmoO_freeObject(state, (CObj*)parser.compiler->function);
if (parser.hadError) { // we don't free the function, the state already has a reference to it in it's linked list of objects!
endCompiler(&parser, 0);
freeParseState(&parser);
// the VM still expects a result on the stack TODO: push the error string to the stack
cosmoV_pushValue(state, cosmoV_newNil());
cosmoM_unfreezeGC(state);
cosmoM_unfreezeGC(state);
return NULL;
}
@ -1012,6 +1011,6 @@ CObjFunction* cosmoP_compileString(CState *state, const char *source) {
endCompiler(&parser, 0);
freeParseState(&parser);
cosmoM_unfreezeGC(state);
cosmoM_unfreezeGC(state);
return resFunc;
}