|
|
@@ -267,10 +267,8 @@ pk_FrameResult pk_VM__run_top_frame(pk_VM* self) {
|
|
|
py_Ref magic = py_tpfindmagic(SECOND()->type, __getitem__);
|
|
|
if(magic) {
|
|
|
if(magic->type == tp_nativefunc) {
|
|
|
- py_TValue* next_sp = TOP();
|
|
|
- bool ok = magic->_cfunc(2, SECOND());
|
|
|
- if(!ok) goto __ERROR;
|
|
|
- SP() = next_sp;
|
|
|
+ py_TValue* p0 = TOP();
|
|
|
+ if(!py_callcfunc(p0, magic->_cfunc, 2, SECOND())) goto __ERROR;
|
|
|
*TOP() = self->last_retval;
|
|
|
} else {
|
|
|
INSERT_THIRD(); // [?, a, b]
|
|
|
@@ -321,10 +319,8 @@ pk_FrameResult pk_VM__run_top_frame(pk_VM* self) {
|
|
|
if(magic) {
|
|
|
PUSH(THIRD()); // [val, a, b, val]
|
|
|
if(magic->type == tp_nativefunc) {
|
|
|
- py_TValue* next_sp = FOURTH();
|
|
|
- bool ok = magic->_cfunc(3, THIRD());
|
|
|
- if(!ok) goto __ERROR;
|
|
|
- SP() = next_sp;
|
|
|
+ py_TValue* p0 = FOURTH();
|
|
|
+ if(!py_callcfunc(p0, magic->_cfunc, 3, THIRD())) goto __ERROR;
|
|
|
} else {
|
|
|
*FOURTH() = *magic; // [__selitem__, a, b, val]
|
|
|
if(!py_vectorcall(2, 0)) goto __ERROR;
|
|
|
@@ -391,10 +387,8 @@ pk_FrameResult pk_VM__run_top_frame(pk_VM* self) {
|
|
|
py_Ref magic = py_tpfindmagic(SECOND()->type, __delitem__);
|
|
|
if(magic) {
|
|
|
if(magic->type == tp_nativefunc) {
|
|
|
- py_TValue* next_sp = SECOND();
|
|
|
- bool ok = magic->_cfunc(2, SECOND());
|
|
|
- if(!ok) goto __ERROR;
|
|
|
- SP() = next_sp;
|
|
|
+ py_TValue* p0 = SECOND();
|
|
|
+ if(!py_callcfunc(p0, magic->_cfunc, 2, SECOND())) goto __ERROR;
|
|
|
} else {
|
|
|
INSERT_THIRD(); // [?, a, b]
|
|
|
*THIRD() = *magic; // [__delitem__, a, b]
|
|
|
@@ -533,10 +527,8 @@ pk_FrameResult pk_VM__run_top_frame(pk_VM* self) {
|
|
|
py_Ref magic = py_tpfindmagic(SECOND()->type, __contains__);
|
|
|
if(magic) {
|
|
|
if(magic->type == tp_nativefunc) {
|
|
|
- py_TValue* next_sp = TOP();
|
|
|
- bool ok = magic->_cfunc(2, SECOND());
|
|
|
- if(!ok) goto __ERROR;
|
|
|
- SP() = next_sp;
|
|
|
+ py_TValue* p0 = TOP();
|
|
|
+ if(!py_callcfunc(p0, magic->_cfunc, 2, SECOND())) goto __ERROR;
|
|
|
*TOP() = self->last_retval;
|
|
|
} else {
|
|
|
INSERT_THIRD(); // [?, b, a]
|