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