@@ -31,7 +31,8 @@ PyAPI_FUNC(int) _PyDict_SetItem_KnownHash(PyObject *mp, PyObject *key,
3131PyAPI_FUNC (int ) _PyDict_DelItem_KnownHash (PyObject * mp , PyObject * key ,
3232 Py_hash_t hash );
3333
34- extern int _PyDict_DelItem_KnownHash_LockHeld (PyObject * mp , PyObject * key ,
34+ // Exported for external JIT support
35+ PyAPI_FUNC (int ) _PyDict_DelItem_KnownHash_LockHeld (PyObject * mp , PyObject * key ,
3536 Py_hash_t hash );
3637
3738extern int _PyDict_Contains_KnownHash (PyObject * , PyObject * , Py_hash_t );
@@ -88,8 +89,9 @@ extern PyDictKeysObject *_PyDict_NewKeysForClass(PyHeapTypeObject *);
8889extern PyObject * _PyDict_FromKeys (PyObject * , PyObject * , PyObject * );
8990
9091/* Gets a version number unique to the current state of the keys of dict, if possible.
91- * Returns the version number, or zero if it was not possible to get a version number. */
92- extern uint32_t _PyDictKeys_GetVersionForCurrentState (
92+ * Returns the version number, or zero if it was not possible to get a version number.
93+ * Exported for external JIT support */
94+ PyAPI_FUNC (uint32_t ) _PyDictKeys_GetVersionForCurrentState (
9395 PyInterpreterState * interp , PyDictKeysObject * dictkeys );
9496
9597/* Gets a version number unique to the current state of the keys of dict, if possible.
@@ -99,8 +101,9 @@ extern uint32_t _PyDictKeys_GetVersionForCurrentState(
99101 *
100102 * The caller must hold the per-object lock on dict.
101103 *
102- * Returns the version number, or zero if it was not possible to get a version number. */
103- extern uint32_t _PyDict_GetKeysVersionForCurrentState (
104+ * Returns the version number, or zero if it was not possible to get a version number.
105+ * Exported for external JIT support */
106+ PyAPI_FUNC (uint32_t ) _PyDict_GetKeysVersionForCurrentState (
104107 PyInterpreterState * interp , PyDictObject * dict );
105108
106109extern size_t _PyDict_KeysSize (PyDictKeysObject * keys );
@@ -109,16 +112,18 @@ extern void _PyDictKeys_DecRef(PyDictKeysObject *keys);
109112
110113/* _Py_dict_lookup() returns index of entry which can be used like DK_ENTRIES(dk)[index].
111114 * -1 when no entry found, -3 when compare raises error.
115+ * Exported for external JIT support
112116 */
113- extern Py_ssize_t _Py_dict_lookup (PyDictObject * mp , PyObject * key , Py_hash_t hash , PyObject * * value_addr );
117+ PyAPI_FUNC ( Py_ssize_t ) _Py_dict_lookup (PyDictObject * mp , PyObject * key , Py_hash_t hash , PyObject * * value_addr );
114118extern Py_ssize_t _Py_dict_lookup_threadsafe (PyDictObject * mp , PyObject * key , Py_hash_t hash , PyObject * * value_addr );
115119extern Py_ssize_t _Py_dict_lookup_threadsafe_stackref (PyDictObject * mp , PyObject * key , Py_hash_t hash , _PyStackRef * value_addr );
116120
117121extern int _PyDict_GetMethodStackRef (PyDictObject * dict , PyObject * name , _PyStackRef * method );
118122
119- extern Py_ssize_t _PyDict_LookupIndexAndValue (PyDictObject * , PyObject * , PyObject * * );
120- extern Py_ssize_t _PyDict_LookupIndex (PyDictObject * , PyObject * );
121- extern Py_ssize_t _PyDictKeys_StringLookup (PyDictKeysObject * dictkeys , PyObject * key );
123+ // Exported for external JIT support
124+ PyAPI_FUNC (Py_ssize_t ) _PyDict_LookupIndexAndValue (PyDictObject * , PyObject * , PyObject * * );
125+ PyAPI_FUNC (Py_ssize_t ) _PyDict_LookupIndex (PyDictObject * , PyObject * );
126+ PyAPI_FUNC (Py_ssize_t ) _PyDictKeys_StringLookup (PyDictKeysObject * dictkeys , PyObject * key );
122127
123128/* Look up a string key in an all unicode dict keys, assign the keys object a version, and
124129 * store it in version.
@@ -127,9 +132,11 @@ extern Py_ssize_t _PyDictKeys_StringLookup(PyDictKeysObject* dictkeys, PyObject
127132 * strings.
128133 *
129134 * Returns DKIX_EMPTY if the key is not present.
135+ *
136+ * Exported for external JIT support
130137 */
131- extern Py_ssize_t _PyDictKeys_StringLookupAndVersion (PyDictKeysObject * dictkeys , PyObject * key , uint32_t * version );
132- extern Py_ssize_t _PyDictKeys_StringLookupSplit (PyDictKeysObject * dictkeys , PyObject * key );
138+ PyAPI_FUNC ( Py_ssize_t ) _PyDictKeys_StringLookupAndVersion (PyDictKeysObject * dictkeys , PyObject * key , uint32_t * version );
139+ PyAPI_FUNC ( Py_ssize_t ) _PyDictKeys_StringLookupSplit (PyDictKeysObject * dictkeys , PyObject * key );
133140PyAPI_FUNC (PyObject * )_PyDict_LoadGlobal (PyDictObject * , PyDictObject * , PyObject * );
134141PyAPI_FUNC (void ) _PyDict_LoadGlobalStackRef (PyDictObject * , PyDictObject * , PyObject * , _PyStackRef * );
135142
@@ -139,7 +146,8 @@ extern PyObject *_PyDict_LoadBuiltinsFromGlobals(PyObject *globals);
139146/* Consumes references to key and value */
140147PyAPI_FUNC (int ) _PyDict_SetItem_Take2 (PyDictObject * op , PyObject * key , PyObject * value );
141148PyAPI_FUNC (int ) _PyDict_SetItem_Take2_KnownHash (PyDictObject * op , PyObject * key , PyObject * value , Py_hash_t hash );
142- extern int _PyDict_SetItem_LockHeld (PyDictObject * dict , PyObject * name , PyObject * value );
149+ // Exported for external JIT support
150+ PyAPI_FUNC (int ) _PyDict_SetItem_LockHeld (PyDictObject * dict , PyObject * name , PyObject * value );
143151// Export for '_asyncio' shared extension
144152PyAPI_FUNC (int ) _PyDict_SetItem_KnownHash_LockHeld (PyDictObject * mp , PyObject * key ,
145153 PyObject * value , Py_hash_t hash );
@@ -324,6 +332,10 @@ _PyDictValues_AddToInsertionOrder(PyDictValues *values, Py_ssize_t ix)
324332 values -> size = size + 1 ;
325333}
326334
335+ // Exported for external JIT support
336+ PyAPI_FUNC (void )
337+ _PyDict_InsertSplitValue (PyDictObject * mp , PyObject * key , PyObject * value , Py_ssize_t ix );
338+
327339static inline size_t
328340shared_keys_usable_size (PyDictKeysObject * keys )
329341{
0 commit comments