mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
...
This commit is contained in:
parent
b4c221095f
commit
73ad79d286
37
src/ceval.h
37
src/ceval.h
@ -589,21 +589,28 @@ __NEXT_STEP:;
|
||||
PUSH(format(spec, _0));
|
||||
} DISPATCH();
|
||||
/*****************************************/
|
||||
TARGET(INC_FAST)
|
||||
_0 = frame->_locals[byte.arg];
|
||||
if(_0 == PY_NULL) vm->NameError(co->varnames[byte.arg]);
|
||||
frame->_locals[byte.arg] = VAR(CAST(i64, _0) + 1);
|
||||
DISPATCH();
|
||||
TARGET(DEC_FAST)
|
||||
_0 = frame->_locals[byte.arg];
|
||||
if(_0 == PY_NULL) vm->NameError(co->varnames[byte.arg]);
|
||||
frame->_locals[byte.arg] = VAR(CAST(i64, _0) - 1);
|
||||
DISPATCH();
|
||||
// TARGET(INC_GLOBAL)
|
||||
// _name = StrName(byte.arg);
|
||||
// _0 = frame->f_globals().try_get(_name);
|
||||
// if(_0 == nullptr) vm->NameError(_name);
|
||||
// frame->f_globals().try_set()
|
||||
TARGET(INC_FAST){
|
||||
PyObject** p = &frame->_locals[byte.arg];
|
||||
if(*p == PY_NULL) vm->NameError(co->varnames[byte.arg]);
|
||||
*p = VAR(CAST(i64, *p) + 1);
|
||||
} DISPATCH();
|
||||
TARGET(DEC_FAST){
|
||||
PyObject** p = &frame->_locals[byte.arg];
|
||||
if(*p == PY_NULL) vm->NameError(co->varnames[byte.arg]);
|
||||
*p = VAR(CAST(i64, *p) - 1);
|
||||
} DISPATCH();
|
||||
TARGET(INC_GLOBAL){
|
||||
_name = StrName(byte.arg);
|
||||
PyObject** p = frame->f_globals().try_get_2(_name);
|
||||
if(p == nullptr) vm->NameError(_name);
|
||||
*p = VAR(CAST(i64, *p) + 1);
|
||||
} DISPATCH();
|
||||
TARGET(DEC_GLOBAL){
|
||||
_name = StrName(byte.arg);
|
||||
PyObject** p = frame->f_globals().try_get_2(_name);
|
||||
if(p == nullptr) vm->NameError(_name);
|
||||
*p = VAR(CAST(i64, *p) - 1);
|
||||
} DISPATCH();
|
||||
|
||||
#if !PK_ENABLE_COMPUTED_GOTO
|
||||
#if DEBUG_EXTRA_CHECK
|
||||
|
@ -741,8 +741,7 @@ __SUBSCR_END:
|
||||
StrName name(prev().sv());
|
||||
switch(name_scope()){
|
||||
case NAME_LOCAL:
|
||||
int namei = ctx()->add_varname(name);
|
||||
ctx()->emit(OP_INC_FAST, namei, prev().line);
|
||||
ctx()->emit(OP_INC_FAST, ctx()->add_varname(name), prev().line);
|
||||
break;
|
||||
case NAME_GLOBAL:
|
||||
ctx()->emit(OP_INC_GLOBAL, name.index, prev().line);
|
||||
@ -756,8 +755,7 @@ __SUBSCR_END:
|
||||
StrName name(prev().sv());
|
||||
switch(name_scope()){
|
||||
case NAME_LOCAL:
|
||||
int namei = ctx()->add_varname(name);
|
||||
ctx()->emit(OP_DEC_FAST, namei, prev().line);
|
||||
ctx()->emit(OP_DEC_FAST, ctx()->add_varname(name), prev().line);
|
||||
break;
|
||||
case NAME_GLOBAL:
|
||||
ctx()->emit(OP_DEC_GLOBAL, name.index, prev().line);
|
||||
|
@ -136,6 +136,13 @@ while(!_items[i].first.empty()) { \
|
||||
return _items[i].second;
|
||||
}
|
||||
|
||||
T* try_get_2(StrName key) {
|
||||
bool ok; uint16_t i;
|
||||
HASH_PROBE(key, ok, i);
|
||||
if(!ok) return nullptr;
|
||||
return &_items[i].second;
|
||||
}
|
||||
|
||||
bool try_set(StrName key, T val){
|
||||
bool ok; uint16_t i;
|
||||
HASH_PROBE(key, ok, i);
|
||||
|
Loading…
x
Reference in New Issue
Block a user