@@ -62,9 +62,13 @@ extern Py_ssize_t _PyDict_KeysSize(PyDictKeysObject *keys);
6262 */
6363extern Py_ssize_t _Py_dict_lookup (PyDictObject * mp ,PyObject * key ,Py_hash_t hash ,PyObject * * value_addr );
6464
65+ /* _Py_dict_lookup_keep_lazy() is the same as _Py_dict_lookup(), but keeps lazy objects unresolved */
66+ extern Py_ssize_t _Py_dict_lookup_keep_lazy (PyDictObject * mp ,PyObject * key ,Py_hash_t hash ,PyObject * * value_addr );
67+
6568extern Py_ssize_t _PyDict_LookupIndex (PyDictObject * ,PyObject * );
6669extern Py_ssize_t _PyDictKeys_StringLookup (PyDictKeysObject * dictkeys ,PyObject * key );
6770extern PyObject * _PyDict_LoadGlobal (PyDictObject * ,PyDictObject * ,PyObject * );
71+ extern PyObject * _PyDict_GetItemKeepLazy (PyObject * ,PyObject * );
6872
6973/* Consumes references to key and value */
7074extern int _PyDict_SetItem_Take2 (PyDictObject * op ,PyObject * key ,PyObject * value );
@@ -76,6 +80,7 @@ extern PyObject *_PyDict_Pop_KnownHash(PyObject *, PyObject *, Py_hash_t, PyObje
7680#define DKIX_DUMMY (-2)/* Used internally */
7781#define DKIX_ERROR (-3)
7882#define DKIX_KEY_CHANGED (-4)/* Used internally */
83+ #define DKIX_VALUE_ERROR (-5)/* Used internally */
7984
8085typedef enum {
8186DICT_KEYS_GENERAL = 0 ,
@@ -94,7 +99,10 @@ struct _dictkeysobject {
9499uint8_t dk_log2_index_bytes ;
95100
96101/* Kind of keys */
97- uint8_t dk_kind ;
102+ uint8_t dk_kind :7 ;
103+
104+ /* Contains lazy imports */
105+ uint8_t dk_lazy_imports :1 ;
98106
99107/* Version number -- Reset to 0 by any modification to keys */
100108uint32_t dk_version ;