Skip to content

Commit 2d3681e

Browse files
committed
PeRfoRManCe
1 parent 4cd4322 commit 2d3681e

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

Python/import.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "Python.h"
44
#include "pycore_audit.h" // _PySys_Audit()
55
#include "pycore_ceval.h"
6+
#include "pycore_dict.h" // _PyDict_Contains_KnownHash()
67
#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION()
78
#include "pycore_hashtable.h" // _Py_hashtable_new_full()
89
#include "pycore_import.h" // _PyImport_BootstrapImp()
@@ -3822,7 +3823,8 @@ _PyImport_LoadLazyImportTstate(PyThreadState *tstate, PyObject *lazy_import)
38223823
}
38233824
}
38243825

3825-
int is_loading = PySet_Contains(importing, lazy_import);
3826+
assert(PyAnySet_CheckExact(importing));
3827+
int is_loading = _PySet_Contains((PySetObject *)importing, lazy_import);
38263828
if (is_loading < 0) {
38273829
_PyImport_ReleaseLock(interp);
38283830
return NULL;
@@ -4215,7 +4217,8 @@ static PyObject *
42154217
get_mod_dict(PyObject *module)
42164218
{
42174219
if (PyModule_Check(module)) {
4218-
return Py_XNewRef(PyModule_GetDict(module));
4220+
// Use internal function for direct md_dict access, avoiding function call overhead
4221+
return Py_NewRef(_PyModule_GetDict(module));
42194222
}
42204223

42214224
return PyObject_GetAttr(module, &_Py_ID(__dict__));
@@ -4291,6 +4294,7 @@ register_lazy_on_parent(PyThreadState *tstate, PyObject *name, PyObject *builtin
42914294
goto done;
42924295
}
42934296
}
4297+
assert(PyAnySet_CheckExact(lazy_submodules));
42944298
if (PySet_Add(lazy_submodules, child) < 0) {
42954299
Py_DECREF(lazy_submodules);
42964300
goto done;
@@ -4387,6 +4391,7 @@ _PyImport_LazyImportModuleLevelObject(PyThreadState *tstate,
43874391
// Add the module name to sys.lazy_modules set (PEP 810)
43884392
PyObject *lazy_modules_set = interp->imports.lazy_modules_set;
43894393
if (lazy_modules_set != NULL) {
4394+
assert(PyAnySet_CheckExact(lazy_modules_set));
43904395
if (PySet_Add(lazy_modules_set, abs_name) < 0) {
43914396
Py_DECREF(res);
43924397
Py_DECREF(abs_name);
@@ -5418,11 +5423,13 @@ _imp__set_lazy_attributes_impl(PyObject *module, PyObject *child_module,
54185423
if (child_dict == NULL || !PyDict_CheckExact(child_dict)) {
54195424
goto done;
54205425
}
5426+
assert(PyAnySet_CheckExact(lazy_submodules));
54215427
PyObject *attr_name;
54225428
Py_ssize_t pos = 0;
54235429
Py_hash_t hash;
54245430
while (_PySet_NextEntry(lazy_submodules, &pos, &attr_name, &hash)) {
5425-
if (PyDict_Contains(child_dict, attr_name)) {
5431+
// Use _PyDict_Contains_KnownHash since we already have the hash from _PySet_NextEntry
5432+
if (_PyDict_Contains_KnownHash(child_dict, attr_name, hash)) {
54265433
continue;
54275434
}
54285435
PyObject *builtins = _PyEval_GetBuiltins(tstate);

0 commit comments

Comments
 (0)