@@ -85,7 +85,7 @@ static PyObject *list, *tuple, *dict, *owner;
85
85
static PyObject * exit_func , * lasti , * val ;
86
86
static size_t jump ;
87
87
// Dummy variables for cache effects
88
- static _Py_CODEUNIT when_to_jump_mask , invert , counter , index ;
88
+ static _Py_CODEUNIT when_to_jump_mask , invert , counter , index , hint ;
89
89
static uint32_t type_version ;
90
90
// Dummy opcode names for 'op' opcodes
91
91
#define _BINARY_OP_INPLACE_ADD_UNICODE_PART_1 1001
@@ -1966,13 +1966,9 @@ dummy_func(
1966
1966
Py_DECREF (owner );
1967
1967
}
1968
1968
1969
- // stack effect: (__0, __1 -- )
1970
- inst (STORE_ATTR_WITH_HINT ) {
1969
+ inst (STORE_ATTR_WITH_HINT , (unused /1 , type_version /2 , hint /1 , value , owner -- )) {
1971
1970
assert (cframe .use_tracing == 0 );
1972
- PyObject * owner = TOP ();
1973
1971
PyTypeObject * tp = Py_TYPE (owner );
1974
- _PyAttrCache * cache = (_PyAttrCache * )next_instr ;
1975
- uint32_t type_version = read_u32 (cache -> version );
1976
1972
assert (type_version != 0 );
1977
1973
DEOPT_IF (tp -> tp_version_tag != type_version , STORE_ATTR );
1978
1974
assert (tp -> tp_flags & Py_TPFLAGS_MANAGED_DICT );
@@ -1982,17 +1978,14 @@ dummy_func(
1982
1978
DEOPT_IF (dict == NULL , STORE_ATTR );
1983
1979
assert (PyDict_CheckExact ((PyObject * )dict ));
1984
1980
PyObject * name = GETITEM (names , oparg );
1985
- uint16_t hint = cache -> index ;
1986
1981
DEOPT_IF (hint >= (size_t )dict -> ma_keys -> dk_nentries , STORE_ATTR );
1987
- PyObject * value , * old_value ;
1982
+ PyObject * old_value ;
1988
1983
uint64_t new_version ;
1989
1984
if (DK_IS_UNICODE (dict -> ma_keys )) {
1990
1985
PyDictUnicodeEntry * ep = DK_UNICODE_ENTRIES (dict -> ma_keys ) + hint ;
1991
1986
DEOPT_IF (ep -> me_key != name , STORE_ATTR );
1992
1987
old_value = ep -> me_value ;
1993
1988
DEOPT_IF (old_value == NULL , STORE_ATTR );
1994
- STACK_SHRINK (1 );
1995
- value = POP ();
1996
1989
new_version = _PyDict_NotifyEvent (PyDict_EVENT_MODIFIED , dict , name , value );
1997
1990
ep -> me_value = value ;
1998
1991
}
@@ -2001,8 +1994,6 @@ dummy_func(
2001
1994
DEOPT_IF (ep -> me_key != name , STORE_ATTR );
2002
1995
old_value = ep -> me_value ;
2003
1996
DEOPT_IF (old_value == NULL , STORE_ATTR );
2004
- STACK_SHRINK (1 );
2005
- value = POP ();
2006
1997
new_version = _PyDict_NotifyEvent (PyDict_EVENT_MODIFIED , dict , name , value );
2007
1998
ep -> me_value = value ;
2008
1999
}
@@ -2015,7 +2006,6 @@ dummy_func(
2015
2006
/* PEP 509 */
2016
2007
dict -> ma_version_tag = new_version ;
2017
2008
Py_DECREF (owner );
2018
- JUMPBY (INLINE_CACHE_ENTRIES_STORE_ATTR );
2019
2009
}
2020
2010
2021
2011
// stack effect: (__0, __1 -- )
0 commit comments