@@ -2012,9 +2012,10 @@ dummy_func(
20122012 DEOPT_IF (!_PyObject_InlineValues (owner_o )-> valid );
20132013 }
20142014
2015- split op (_LOAD_ATTR_INSTANCE_VALUE , (index /1 , owner -- attr , null if (oparg & 1 ))) {
2015+ split op (_LOAD_ATTR_INSTANCE_VALUE , (offset /1 , owner -- attr , null if (oparg & 1 ))) {
20162016 PyObject * owner_o = PyStackRef_AsPyObjectBorrow (owner );
2017- PyObject * attr_o = _PyObject_InlineValues (owner_o )-> values [index ];
2017+ PyObject * * value_ptr = (PyObject * * )(((char * )owner_o ) + offset );
2018+ PyObject * attr_o = * value_ptr ;
20182019 DEOPT_IF (attr_o == NULL );
20192020 STAT_INC (LOAD_ATTR , hit );
20202021 Py_INCREF (attr_o );
@@ -2196,16 +2197,17 @@ dummy_func(
21962197 EXIT_IF (_PyObject_InlineValues (owner_o )-> valid == 0 );
21972198 }
21982199
2199- op (_STORE_ATTR_INSTANCE_VALUE , (index /1 , value , owner -- )) {
2200+ op (_STORE_ATTR_INSTANCE_VALUE , (offset /1 , value , owner -- )) {
22002201 PyObject * owner_o = PyStackRef_AsPyObjectBorrow (owner );
22012202
22022203 STAT_INC (STORE_ATTR , hit );
22032204 assert (_PyObject_GetManagedDict (owner_o ) == NULL );
2204- PyDictValues * values = _PyObject_InlineValues (owner_o );
2205-
2206- PyObject * old_value = values -> values [index ];
2207- values -> values [index ] = PyStackRef_AsPyObjectSteal (value );
2205+ PyObject * * value_ptr = (PyObject * * )(((char * )owner_o ) + offset );
2206+ PyObject * old_value = * value_ptr ;
2207+ * value_ptr = PyStackRef_AsPyObjectSteal (value );
22082208 if (old_value == NULL ) {
2209+ PyDictValues * values = _PyObject_InlineValues (owner_o );
2210+ int index = value_ptr - values -> values ;
22092211 _PyDictValues_AddToInsertionOrder (values , index );
22102212 }
22112213 else {
0 commit comments