aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/executor_cases.c.h
diff options
context:
space:
mode:
Diffstat (limited to 'Python/executor_cases.c.h')
-rw-r--r--Python/executor_cases.c.h20
1 files changed, 12 insertions, 8 deletions
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h
index 1db8e506732..55b06a0e235 100644
--- a/Python/executor_cases.c.h
+++ b/Python/executor_cases.c.h
@@ -2277,9 +2277,10 @@
_PyStackRef null = PyStackRef_NULL;
(void)null;
owner = stack_pointer[-1];
- uint16_t index = (uint16_t)CURRENT_OPERAND();
+ uint16_t offset = (uint16_t)CURRENT_OPERAND();
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
- PyObject *attr_o = _PyObject_InlineValues(owner_o)->values[index];
+ PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset);
+ PyObject *attr_o = *value_ptr;
if (attr_o == NULL) {
UOP_STAT_INC(uopcode, miss);
JUMP_TO_JUMP_TARGET();
@@ -2299,9 +2300,10 @@
_PyStackRef null = PyStackRef_NULL;
(void)null;
owner = stack_pointer[-1];
- uint16_t index = (uint16_t)CURRENT_OPERAND();
+ uint16_t offset = (uint16_t)CURRENT_OPERAND();
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
- PyObject *attr_o = _PyObject_InlineValues(owner_o)->values[index];
+ PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset);
+ PyObject *attr_o = *value_ptr;
if (attr_o == NULL) {
UOP_STAT_INC(uopcode, miss);
JUMP_TO_JUMP_TARGET();
@@ -2583,14 +2585,16 @@
_PyStackRef value;
owner = stack_pointer[-1];
value = stack_pointer[-2];
- uint16_t index = (uint16_t)CURRENT_OPERAND();
+ uint16_t offset = (uint16_t)CURRENT_OPERAND();
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
STAT_INC(STORE_ATTR, hit);
assert(_PyObject_GetManagedDict(owner_o) == NULL);
- PyDictValues *values = _PyObject_InlineValues(owner_o);
- PyObject *old_value = values->values[index];
- values->values[index] = PyStackRef_AsPyObjectSteal(value);
+ PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset);
+ PyObject *old_value = *value_ptr;
+ *value_ptr = PyStackRef_AsPyObjectSteal(value);
if (old_value == NULL) {
+ PyDictValues *values = _PyObject_InlineValues(owner_o);
+ int index = value_ptr - values->values;
_PyDictValues_AddToInsertionOrder(values, index);
}
else {