fix py_inspect_currentfunction

This commit is contained in:
blueloveTH 2024-08-18 12:54:37 +08:00
parent 8b0e1697c0
commit 2d5e515ae7
5 changed files with 9 additions and 5 deletions

View File

@ -51,7 +51,8 @@ typedef struct VM {
py_TValue reg[8]; // users' registers
py_TValue* __curr_class;
py_StackRef __curr_class;
py_StackRef __curr_function;
py_TValue __vectorcall_buffer[PK_MAX_CO_VARNAMES];
ManagedHeap heap;

View File

@ -310,8 +310,9 @@ PK_EXPORT void py_setslot(py_Ref self, int i, py_Ref val);
/************* Inspection *************/
/// Get the current `function` object from the stack.
/// Get the current `function` object on the stack.
/// Return `NULL` if not available.
/// NOTE: This function should be placed at the beginning of your decl-based bindings.
PK_EXPORT py_StackRef py_inspect_currentfunction();
/// Get the current `module` object where the code is executed.
/// Return `NULL` if not available.

View File

@ -70,6 +70,7 @@ void VM__ctor(VM* self) {
self->is_curr_exc_handled = false;
self->__curr_class = NULL;
self->__curr_function = NULL;
ManagedHeap__ctor(&self->heap, self);
ValueStack__ctor(&self->stack);
@ -445,8 +446,10 @@ FrameResult VM__vectorcall(VM* self, uint16_t argc, uint16_t kwargc, bool opcall
return opcall ? RES_CALL : VM__run_top_frame(self);
} else {
// decl-based binding
self->__curr_function = p0;
bool ok = py_callcfunc(fn->cfunc, co->nlocals, argv);
self->stack.sp = p0;
self->__curr_function = NULL;
return ok ? RES_RETURN : RES_ERROR;
}
}

View File

@ -153,6 +153,7 @@ void py_clearexc(py_StackRef p0) {
vm->curr_exception = *py_NIL;
vm->is_curr_exc_handled = false;
vm->__curr_class = NULL;
vm->__curr_function = NULL;
if(p0) vm->stack.sp = p0;
}

View File

@ -70,9 +70,7 @@ void py_setslot(py_Ref self, int i, py_Ref val) {
}
py_StackRef py_inspect_currentfunction(){
Frame* frame = pk_current_vm->top_frame;
if(!frame || !frame->has_function) return NULL;
return frame->p0;
return pk_current_vm->__curr_function;
}
py_GlobalRef py_inspect_currentmodule(){