mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
75 lines
1.8 KiB
C
75 lines
1.8 KiB
C
#include "pocketpy/objects/sourcedata.h"
|
|
#include "pocketpy/pocketpy.h"
|
|
|
|
#include "pocketpy/common/utils.h"
|
|
#include "pocketpy/objects/object.h"
|
|
#include "pocketpy/interpreter/vm.h"
|
|
#include "pocketpy/compiler/compiler.h"
|
|
|
|
pk_VM* pk_current_vm;
|
|
static pk_VM pk_default_vm;
|
|
|
|
void py_initialize() {
|
|
pk_MemoryPools__initialize();
|
|
pk_StrName__initialize();
|
|
pk_current_vm = &pk_default_vm;
|
|
pk_VM__ctor(&pk_default_vm);
|
|
}
|
|
|
|
void py_finalize() {
|
|
pk_VM__dtor(&pk_default_vm);
|
|
pk_current_vm = NULL;
|
|
pk_StrName__finalize();
|
|
pk_MemoryPools__finalize();
|
|
}
|
|
|
|
int py_exec(const char* source) { PK_UNREACHABLE(); }
|
|
|
|
int py_eval(const char* source, py_Ref out) {
|
|
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);
|
|
CodeObject__dtor(&co);
|
|
PK_DECREF(src);
|
|
if(res == RES_ERROR) return vm->last_error->type;
|
|
if(res == RES_RETURN){
|
|
*out = vm->last_retval;
|
|
return 0;
|
|
}
|
|
PK_UNREACHABLE();
|
|
}
|
|
|
|
bool py_call(py_Ref f, int argc, py_Ref argv){
|
|
return -1;
|
|
}
|
|
|
|
bool py_callmethod(py_Ref self, py_Name name, int argc, py_Ref argv){
|
|
return -1;
|
|
}
|
|
|
|
int pk_vectorcall(int argc, int kwargc, bool op_call){
|
|
return -1;
|
|
}
|
|
|
|
py_Ref py_lastretval(){
|
|
return &pk_current_vm->last_retval;
|
|
}
|
|
|
|
bool py_getunboundmethod(const py_Ref self, py_Name name, bool fallback, py_Ref out, py_Ref out_self){
|
|
return -1;
|
|
}
|
|
|
|
pk_TypeInfo* pk_tpinfo(const py_Ref self){
|
|
pk_VM* vm = pk_current_vm;
|
|
return c11__at(pk_TypeInfo, &vm->types, self->type);
|
|
}
|
|
|