From 21c906ab338e6103ae07b0fd06a7541142ef30c6 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sat, 16 Mar 2024 17:22:00 +0800 Subject: [PATCH] some optimize --- include/pocketpy/frame.h | 7 +++++-- src/ceval.cpp | 2 +- src/profiler.cpp | 2 +- src/vm.cpp | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/pocketpy/frame.h b/include/pocketpy/frame.h index a06cdd64..0f17aed8 100644 --- a/include/pocketpy/frame.h +++ b/include/pocketpy/frame.h @@ -90,8 +90,8 @@ struct Frame { NameDict& f_globals() noexcept { return _module->attr(); } PyObject* f_closure_try_get(StrName name); - Frame(PyObject** p0, const CodeObject* co, PyObject* _module, PyObject* _callable) - : _ip(-1), _next_ip(0), _sp_base(p0), co(co), _module(_module), _callable(_callable), _locals(co, p0) { } + Frame(PyObject** p0, const CodeObject* co, PyObject* _module, PyObject* _callable, PyObject** _locals_base) + : _ip(-1), _next_ip(0), _sp_base(p0), co(co), _module(_module), _callable(_callable), _locals(co, _locals_base) { } Frame(PyObject** p0, const CodeObject* co, PyObject* _module, PyObject* _callable, FastLocals _locals) : _ip(-1), _next_ip(0), _sp_base(p0), co(co), _module(_module), _callable(_callable), _locals(_locals) { } @@ -150,6 +150,9 @@ struct CallStack{ } void pop(){ +#if PK_DEBUG_EXTRA_CHECK + if(empty()) PK_FATAL_ERROR(); +#endif LinkedFrame* p = _tail; _tail = p->f_back; pool64_dealloc(p); diff --git a/src/ceval.cpp b/src/ceval.cpp index 93ac37e1..f9a20639 100644 --- a/src/ceval.cpp +++ b/src/ceval.cpp @@ -67,7 +67,7 @@ PyObject* VM::_run_top_frame(){ __NEXT_FRAME: // cache const CodeObject* co = frame->co; - const auto& co_consts = co->consts; + PyObject** co_consts = const_cast(co->consts.data()); const Bytecode* co_codes = co->codes.data(); Bytecode byte = co_codes[frame->next_bytecode()]; diff --git a/src/profiler.cpp b/src/profiler.cpp index d609bc28..35eb60bf 100644 --- a/src/profiler.cpp +++ b/src/profiler.cpp @@ -55,7 +55,7 @@ void LineProfiler::_step_end(LinkedFrame* linked_frame, int line){ }else if(linked_frame->f_back == top_frame_record.frame){ id_delta = 1; }else{ - id_delta = -1; + id_delta = -1; // unsafe } // current line is about to change diff --git a/src/vm.cpp b/src/vm.cpp index e0612beb..112369d3 100644 --- a/src/vm.cpp +++ b/src/vm.cpp @@ -930,7 +930,7 @@ PyObject* VM::vectorcall(int ARGC, int KWARGC, bool op_call){ if(co->is_generator){ s_data.reset(p0); return _py_generator( - Frame(nullptr, co, fn._module, callable), + Frame(nullptr, co, fn._module, callable, nullptr), ArgsView(buffer, buffer + co_nlocals) ); } @@ -940,7 +940,7 @@ PyObject* VM::vectorcall(int ARGC, int KWARGC, bool op_call){ for(int j=0; j