* Rename local variables, names and consts, from the interpeter loop. Will allow non-code objects in frames for better introspection of C builtins and extensions.
* Remove unused dummy variables.
unsigned int oparg,
_Py_atomic_int * const eval_breaker,
_PyCFrame cframe,
- PyObject *names,
- PyObject *consts,
_Py_CODEUNIT *next_instr,
PyObject **stack_pointer,
PyObject *kwnames,
}
inst(LOAD_CONST, (-- value)) {
- value = GETITEM(consts, oparg);
+ value = GETITEM(frame->f_code->co_consts, oparg);
Py_INCREF(value);
}
}
inst(RETURN_CONST, (--)) {
- PyObject *retval = GETITEM(consts, oparg);
+ PyObject *retval = GETITEM(frame->f_code->co_consts, oparg);
Py_INCREF(retval);
assert(EMPTY());
_PyFrame_SetStackPointer(frame, stack_pointer);
}
inst(STORE_NAME, (v -- )) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
PyObject *ns = LOCALS();
int err;
if (ns == NULL) {
}
inst(DELETE_NAME, (--)) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
PyObject *ns = LOCALS();
int err;
if (ns == NULL) {
#if ENABLE_SPECIALIZATION
if (ADAPTIVE_COUNTER_IS_ZERO(counter)) {
assert(cframe.use_tracing == 0);
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
next_instr--;
_Py_Specialize_StoreAttr(owner, next_instr, name);
DISPATCH_SAME_OPARG();
#else
(void)counter; // Unused.
#endif /* ENABLE_SPECIALIZATION */
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
int err = PyObject_SetAttr(owner, name, v);
Py_DECREF(v);
Py_DECREF(owner);
}
inst(DELETE_ATTR, (owner --)) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
int err = PyObject_SetAttr(owner, name, (PyObject *)NULL);
Py_DECREF(owner);
ERROR_IF(err, error);
}
inst(STORE_GLOBAL, (v --)) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
int err = PyDict_SetItem(GLOBALS(), name, v);
Py_DECREF(v);
ERROR_IF(err, error);
}
inst(DELETE_GLOBAL, (--)) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
int err;
err = PyDict_DelItem(GLOBALS(), name);
// Can't use ERROR_IF here.
}
inst(LOAD_NAME, ( -- v)) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
PyObject *locals = LOCALS();
if (locals == NULL) {
_PyErr_Format(tstate, PyExc_SystemError,
_PyLoadGlobalCache *cache = (_PyLoadGlobalCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
assert(cframe.use_tracing == 0);
- PyObject *name = GETITEM(names, oparg>>1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg>>1);
next_instr--;
_Py_Specialize_LoadGlobal(GLOBALS(), BUILTINS(), next_instr, name);
DISPATCH_SAME_OPARG();
STAT_INC(LOAD_GLOBAL, deferred);
DECREMENT_ADAPTIVE_COUNTER(cache->counter);
#endif /* ENABLE_SPECIALIZATION */
- PyObject *name = GETITEM(names, oparg>>1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg>>1);
if (PyDict_CheckExact(GLOBALS())
&& PyDict_CheckExact(BUILTINS()))
{
_PyAttrCache *cache = (_PyAttrCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
assert(cframe.use_tracing == 0);
- PyObject *name = GETITEM(names, oparg>>1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg>>1);
next_instr--;
_Py_Specialize_LoadAttr(owner, next_instr, name);
DISPATCH_SAME_OPARG();
STAT_INC(LOAD_ATTR, deferred);
DECREMENT_ADAPTIVE_COUNTER(cache->counter);
#endif /* ENABLE_SPECIALIZATION */
- PyObject *name = GETITEM(names, oparg >> 1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg >> 1);
if (oparg & 1) {
/* Designed to work in tandem with CALL, pushes two values. */
PyObject* meth = NULL;
PyDictObject *dict = (PyDictObject *)_PyDictOrValues_GetDict(dorv);
DEOPT_IF(dict == NULL, LOAD_ATTR);
assert(PyDict_CheckExact((PyObject *)dict));
- PyObject *name = GETITEM(names, oparg>>1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg>>1);
uint16_t hint = index;
DEOPT_IF(hint >= (size_t)dict->ma_keys->dk_nentries, LOAD_ATTR);
if (DK_IS_UNICODE(dict->ma_keys)) {
DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize), LOAD_ATTR);
STAT_INC(LOAD_ATTR, hit);
- PyObject *name = GETITEM(names, oparg >> 1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg >> 1);
Py_INCREF(f);
_PyInterpreterFrame *new_frame = _PyFrame_PushUnchecked(tstate, f, 2);
// Manipulate stack directly because we exit with DISPATCH_INLINED().
PyDictObject *dict = (PyDictObject *)_PyDictOrValues_GetDict(dorv);
DEOPT_IF(dict == NULL, STORE_ATTR);
assert(PyDict_CheckExact((PyObject *)dict));
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
DEOPT_IF(hint >= (size_t)dict->ma_keys->dk_nentries, STORE_ATTR);
PyObject *old_value;
uint64_t new_version;
}
inst(IMPORT_NAME, (level, fromlist -- res)) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
res = import_name(tstate, frame, name, fromlist, level);
DECREF_INPUTS();
ERROR_IF(res == NULL, error);
}
inst(IMPORT_FROM, (from -- from, res)) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
res = import_from(tstate, from, name);
ERROR_IF(res == NULL, error);
}
inst(KW_NAMES, (--)) {
assert(kwnames == NULL);
- assert(oparg < PyTuple_GET_SIZE(consts));
- kwnames = GETITEM(consts, oparg);
+ assert(oparg < PyTuple_GET_SIZE(frame->f_code->co_consts));
+ kwnames = GETITEM(frame->f_code->co_consts, oparg);
}
// Cache layout: counter/1, func_version/2, min_args/1
/* Local "register" variables.
* These are cached values from the frame and code object. */
- PyObject *names;
- PyObject *consts;
_Py_CODEUNIT *next_instr;
PyObject **stack_pointer;
/* Sets the above local variables from the frame */
#define SET_LOCALS_FROM_FRAME() \
- { \
- PyCodeObject *co = frame->f_code; \
- names = co->co_names; \
- consts = co->co_consts; \
- } \
assert(_PyInterpreterFrame_LASTI(frame) >= -1); \
/* Jump back to the last instruction executed... */ \
next_instr = frame->prev_instr + 1; \
TARGET(LOAD_CONST) {
PREDICTED(LOAD_CONST);
PyObject *value;
- value = GETITEM(consts, oparg);
+ value = GETITEM(frame->f_code->co_consts, oparg);
Py_INCREF(value);
STACK_GROW(1);
stack_pointer[-1] = value;
oparg = (next_instr++)->op.arg;
{
PyObject *value;
- value = GETITEM(consts, oparg);
+ value = GETITEM(frame->f_code->co_consts, oparg);
Py_INCREF(value);
_tmp_1 = value;
}
PyObject *_tmp_2;
{
PyObject *value;
- value = GETITEM(consts, oparg);
+ value = GETITEM(frame->f_code->co_consts, oparg);
Py_INCREF(value);
_tmp_2 = value;
}
}
TARGET(RETURN_CONST) {
- PyObject *retval = GETITEM(consts, oparg);
+ PyObject *retval = GETITEM(frame->f_code->co_consts, oparg);
Py_INCREF(retval);
assert(EMPTY());
_PyFrame_SetStackPointer(frame, stack_pointer);
TARGET(STORE_NAME) {
PyObject *v = stack_pointer[-1];
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
PyObject *ns = LOCALS();
int err;
if (ns == NULL) {
}
TARGET(DELETE_NAME) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
PyObject *ns = LOCALS();
int err;
if (ns == NULL) {
#if ENABLE_SPECIALIZATION
if (ADAPTIVE_COUNTER_IS_ZERO(counter)) {
assert(cframe.use_tracing == 0);
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
next_instr--;
_Py_Specialize_StoreAttr(owner, next_instr, name);
DISPATCH_SAME_OPARG();
#else
(void)counter; // Unused.
#endif /* ENABLE_SPECIALIZATION */
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
int err = PyObject_SetAttr(owner, name, v);
Py_DECREF(v);
Py_DECREF(owner);
TARGET(DELETE_ATTR) {
PyObject *owner = stack_pointer[-1];
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
int err = PyObject_SetAttr(owner, name, (PyObject *)NULL);
Py_DECREF(owner);
if (err) goto pop_1_error;
TARGET(STORE_GLOBAL) {
PyObject *v = stack_pointer[-1];
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
int err = PyDict_SetItem(GLOBALS(), name, v);
Py_DECREF(v);
if (err) goto pop_1_error;
}
TARGET(DELETE_GLOBAL) {
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
int err;
err = PyDict_DelItem(GLOBALS(), name);
// Can't use ERROR_IF here.
TARGET(LOAD_NAME) {
PyObject *v;
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
PyObject *locals = LOCALS();
if (locals == NULL) {
_PyErr_Format(tstate, PyExc_SystemError,
_PyLoadGlobalCache *cache = (_PyLoadGlobalCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
assert(cframe.use_tracing == 0);
- PyObject *name = GETITEM(names, oparg>>1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg>>1);
next_instr--;
_Py_Specialize_LoadGlobal(GLOBALS(), BUILTINS(), next_instr, name);
DISPATCH_SAME_OPARG();
STAT_INC(LOAD_GLOBAL, deferred);
DECREMENT_ADAPTIVE_COUNTER(cache->counter);
#endif /* ENABLE_SPECIALIZATION */
- PyObject *name = GETITEM(names, oparg>>1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg>>1);
if (PyDict_CheckExact(GLOBALS())
&& PyDict_CheckExact(BUILTINS()))
{
_PyAttrCache *cache = (_PyAttrCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
assert(cframe.use_tracing == 0);
- PyObject *name = GETITEM(names, oparg>>1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg>>1);
next_instr--;
_Py_Specialize_LoadAttr(owner, next_instr, name);
DISPATCH_SAME_OPARG();
STAT_INC(LOAD_ATTR, deferred);
DECREMENT_ADAPTIVE_COUNTER(cache->counter);
#endif /* ENABLE_SPECIALIZATION */
- PyObject *name = GETITEM(names, oparg >> 1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg >> 1);
if (oparg & 1) {
/* Designed to work in tandem with CALL, pushes two values. */
PyObject* meth = NULL;
PyDictObject *dict = (PyDictObject *)_PyDictOrValues_GetDict(dorv);
DEOPT_IF(dict == NULL, LOAD_ATTR);
assert(PyDict_CheckExact((PyObject *)dict));
- PyObject *name = GETITEM(names, oparg>>1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg>>1);
uint16_t hint = index;
DEOPT_IF(hint >= (size_t)dict->ma_keys->dk_nentries, LOAD_ATTR);
if (DK_IS_UNICODE(dict->ma_keys)) {
DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize), LOAD_ATTR);
STAT_INC(LOAD_ATTR, hit);
- PyObject *name = GETITEM(names, oparg >> 1);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg >> 1);
Py_INCREF(f);
_PyInterpreterFrame *new_frame = _PyFrame_PushUnchecked(tstate, f, 2);
// Manipulate stack directly because we exit with DISPATCH_INLINED().
PyDictObject *dict = (PyDictObject *)_PyDictOrValues_GetDict(dorv);
DEOPT_IF(dict == NULL, STORE_ATTR);
assert(PyDict_CheckExact((PyObject *)dict));
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
DEOPT_IF(hint >= (size_t)dict->ma_keys->dk_nentries, STORE_ATTR);
PyObject *old_value;
uint64_t new_version;
PyObject *fromlist = stack_pointer[-1];
PyObject *level = stack_pointer[-2];
PyObject *res;
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
res = import_name(tstate, frame, name, fromlist, level);
Py_DECREF(level);
Py_DECREF(fromlist);
TARGET(IMPORT_FROM) {
PyObject *from = stack_pointer[-1];
PyObject *res;
- PyObject *name = GETITEM(names, oparg);
+ PyObject *name = GETITEM(frame->f_code->co_names, oparg);
res = import_from(tstate, from, name);
if (res == NULL) goto error;
STACK_GROW(1);
TARGET(KW_NAMES) {
assert(kwnames == NULL);
- assert(oparg < PyTuple_GET_SIZE(consts));
- kwnames = GETITEM(consts, oparg);
+ assert(oparg < PyTuple_GET_SIZE(frame->f_code->co_consts));
+ kwnames = GETITEM(frame->f_code->co_consts, oparg);
DISPATCH();
}