diff --git a/src/objects/codeobject.c b/src/objects/codeobject.c index 242d2cb3..5dc63019 100644 --- a/src/objects/codeobject.c +++ b/src/objects/codeobject.c @@ -13,7 +13,7 @@ bool Bytecode__is_forward_jump(const Bytecode* self) { return self->op >= OP_JUMP_FORWARD && self->op <= OP_LOOP_BREAK; } -FuncDecl_ FuncDecl__rcnew(pk_SourceData_ src, c11_string name){ +FuncDecl_ FuncDecl__rcnew(pk_SourceData_ src, c11_string name) { FuncDecl* self = malloc(sizeof(FuncDecl)); self->rc.count = 1; self->rc.dtor = (void (*)(void*))FuncDecl__dtor; @@ -33,21 +33,22 @@ FuncDecl_ FuncDecl__rcnew(pk_SourceData_ src, c11_string name){ return self; } -void FuncDecl__dtor(FuncDecl* self){ +void FuncDecl__dtor(FuncDecl* self) { CodeObject__dtor(&self->code); c11_vector__dtor(&self->args); c11_vector__dtor(&self->kwargs); c11_smallmap_n2i__dtor(&self->kw_to_index); } -void FuncDecl__add_kwarg(FuncDecl* self, int index, uint16_t key, const PyVar* value){ +void FuncDecl__add_kwarg(FuncDecl* self, int index, uint16_t key, const PyVar* value) { c11_smallmap_n2i__set(&self->kw_to_index, key, index); FuncDeclKwArg item = {index, key, *value}; c11_vector__push(FuncDeclKwArg, &self->kwargs, item); } -void CodeObject__ctor(CodeObject* self, pk_SourceData_ src, c11_string name){ - self->src = src; PK_INCREF(src); +void CodeObject__ctor(CodeObject* self, pk_SourceData_ src, c11_string name) { + self->src = src; + PK_INCREF(src); py_Str__ctor2(&self->name, name.data, name.size); c11_vector__ctor(&self->codes, sizeof(Bytecode)); @@ -70,10 +71,10 @@ void CodeObject__ctor(CodeObject* self, pk_SourceData_ src, c11_string name){ c11_vector__push(CodeBlock, &self->blocks, root_block); } -void CodeObject__dtor(CodeObject* self){ +void CodeObject__dtor(CodeObject* self) { PK_DECREF(self->src); py_Str__dtor(&self->name); - + c11_vector__dtor(&self->codes); c11_vector__dtor(&self->codes_ex); @@ -85,7 +86,7 @@ void CodeObject__dtor(CodeObject* self){ c11_vector__dtor(&self->blocks); - for(int i=0; ifunc_decls.count; i++){ + for(int i = 0; i < self->func_decls.count; i++) { FuncDecl_ decl = c11__getitem(FuncDecl_, &self->func_decls, i); PK_DECREF(decl); } diff --git a/src/public/vm.c b/src/public/vm.c index f761a700..cc4b8a36 100644 --- a/src/public/vm.c +++ b/src/public/vm.c @@ -23,28 +23,22 @@ void py_finalize() { pk_MemoryPools__finalize(); } -int py_exec(const char* source) { - pk_SourceData_ src = pk_SourceData__rcnew(source, "main.py", EXEC_MODE, false); - CodeObject co; - Error* err = pk_compile(src, &co); - PK_DECREF(src); - if(err) abort(); +int py_exec(const char* source) { PK_UNREACHABLE(); } +int py_eval(const char* source) { + CodeObject co; + pk_SourceData_ src = pk_SourceData__rcnew(source, "main.py", EVAL_MODE, false); + Error* err = pk_compile(src, &co); + if(err) { + PK_DECREF(src); + return -1; + } pk_VM* vm = pk_current_vm; Frame* frame = Frame__new(&co, &vm->main, NULL, vm->stack.sp, vm->stack.sp, &co); pk_VM__push_frame(vm, frame); pk_FrameResult res = pk_VM__run_top_frame(vm); - if(res == RES_ERROR) return vm->last_error->type; - if(res == RES_RETURN) return 0; - PK_UNREACHABLE(); -} - -int py_eval(const char* source) { - CodeObject* co = NULL; - pk_VM* vm = pk_current_vm; - Frame* frame = Frame__new(co, &vm->main, NULL, vm->stack.sp, vm->stack.sp, co); - pk_VM__push_frame(vm, frame); - pk_FrameResult res = pk_VM__run_top_frame(vm); + CodeObject__dtor(&co); + PK_DECREF(src); if(res == RES_ERROR) return vm->last_error->type; if(res == RES_RETURN) return 0; PK_UNREACHABLE();