mirror of
https://github.com/pocketpy/pocketpy
synced 2025-11-10 05:30:16 +00:00
some optimize
This commit is contained in:
parent
93b7904353
commit
21c906ab33
@ -90,8 +90,8 @@ struct Frame {
|
|||||||
NameDict& f_globals() noexcept { return _module->attr(); }
|
NameDict& f_globals() noexcept { return _module->attr(); }
|
||||||
PyObject* f_closure_try_get(StrName name);
|
PyObject* f_closure_try_get(StrName name);
|
||||||
|
|
||||||
Frame(PyObject** p0, const CodeObject* co, PyObject* _module, PyObject* _callable)
|
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, p0) { }
|
: _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)
|
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) { }
|
: _ip(-1), _next_ip(0), _sp_base(p0), co(co), _module(_module), _callable(_callable), _locals(_locals) { }
|
||||||
@ -150,6 +150,9 @@ struct CallStack{
|
|||||||
}
|
}
|
||||||
|
|
||||||
void pop(){
|
void pop(){
|
||||||
|
#if PK_DEBUG_EXTRA_CHECK
|
||||||
|
if(empty()) PK_FATAL_ERROR();
|
||||||
|
#endif
|
||||||
LinkedFrame* p = _tail;
|
LinkedFrame* p = _tail;
|
||||||
_tail = p->f_back;
|
_tail = p->f_back;
|
||||||
pool64_dealloc(p);
|
pool64_dealloc(p);
|
||||||
|
|||||||
@ -67,7 +67,7 @@ PyObject* VM::_run_top_frame(){
|
|||||||
__NEXT_FRAME:
|
__NEXT_FRAME:
|
||||||
// cache
|
// cache
|
||||||
const CodeObject* co = frame->co;
|
const CodeObject* co = frame->co;
|
||||||
const auto& co_consts = co->consts;
|
PyObject** co_consts = const_cast<PyObject**>(co->consts.data());
|
||||||
const Bytecode* co_codes = co->codes.data();
|
const Bytecode* co_codes = co->codes.data();
|
||||||
|
|
||||||
Bytecode byte = co_codes[frame->next_bytecode()];
|
Bytecode byte = co_codes[frame->next_bytecode()];
|
||||||
|
|||||||
@ -55,7 +55,7 @@ void LineProfiler::_step_end(LinkedFrame* linked_frame, int line){
|
|||||||
}else if(linked_frame->f_back == top_frame_record.frame){
|
}else if(linked_frame->f_back == top_frame_record.frame){
|
||||||
id_delta = 1;
|
id_delta = 1;
|
||||||
}else{
|
}else{
|
||||||
id_delta = -1;
|
id_delta = -1; // unsafe
|
||||||
}
|
}
|
||||||
|
|
||||||
// current line is about to change
|
// current line is about to change
|
||||||
|
|||||||
@ -930,7 +930,7 @@ PyObject* VM::vectorcall(int ARGC, int KWARGC, bool op_call){
|
|||||||
if(co->is_generator){
|
if(co->is_generator){
|
||||||
s_data.reset(p0);
|
s_data.reset(p0);
|
||||||
return _py_generator(
|
return _py_generator(
|
||||||
Frame(nullptr, co, fn._module, callable),
|
Frame(nullptr, co, fn._module, callable, nullptr),
|
||||||
ArgsView(buffer, buffer + co_nlocals)
|
ArgsView(buffer, buffer + co_nlocals)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -940,7 +940,7 @@ PyObject* VM::vectorcall(int ARGC, int KWARGC, bool op_call){
|
|||||||
for(int j=0; j<co_nlocals; j++) _base[j] = buffer[j];
|
for(int j=0; j<co_nlocals; j++) _base[j] = buffer[j];
|
||||||
|
|
||||||
__FAST_CALL:
|
__FAST_CALL:
|
||||||
callstack.emplace(p0, co, fn._module, callable, FastLocals(co, args.begin()));
|
callstack.emplace(p0, co, fn._module, callable, args.begin());
|
||||||
if(op_call) return PY_OP_CALL;
|
if(op_call) return PY_OP_CALL;
|
||||||
return _run_top_frame();
|
return _run_top_frame();
|
||||||
/*****************_py_call*****************/
|
/*****************_py_call*****************/
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user