skip unnecessary strcmp in create_builtin

This commit is contained in:
ahgamut 2022-06-21 09:45:37 +05:30
parent f242ef4a09
commit e44528ee86

View file

@ -95,8 +95,8 @@ module _imp
typedef struct { typedef struct {
const char *name; const char *name;
union { union {
struct _inittab *tab; const struct _inittab *tab;
struct _frozen *frz; const struct _frozen *frz;
}; };
} initentry; } initentry;
@ -1183,36 +1183,34 @@ _imp_create_builtin(PyObject *module, PyObject *spec)
if (res != NULL) { if (res != NULL) {
p = res->tab; p = res->tab;
PyModuleDef *def; PyModuleDef *def;
if (_PyUnicode_EqualToASCIIString(name, p->name)) { if (p->initfunc == NULL) {
if (p->initfunc == NULL) { /* Cannot re-init internal module ("sys" or "builtins") */
/* Cannot re-init internal module ("sys" or "builtins") */ mod = PyImport_AddModule(namestr);
mod = PyImport_AddModule(namestr); Py_DECREF(name);
Py_DECREF(name); return mod;
return mod; }
} mod = (*p->initfunc)();
mod = (*p->initfunc)(); if (mod == NULL) {
if (mod == NULL) { Py_DECREF(name);
return NULL;
}
if (PyObject_TypeCheck(mod, &PyModuleDef_Type)) {
Py_DECREF(name);
return PyModule_FromDefAndSpec((PyModuleDef*)mod, spec);
} else {
/* Remember pointer to module init function. */
def = PyModule_GetDef(mod);
if (def == NULL) {
Py_DECREF(name); Py_DECREF(name);
return NULL; return NULL;
} }
if (PyObject_TypeCheck(mod, &PyModuleDef_Type)) { def->m_base.m_init = p->initfunc;
if (_PyImport_FixupExtensionObject(mod, name, name) < 0) {
Py_DECREF(name); Py_DECREF(name);
return PyModule_FromDefAndSpec((PyModuleDef*)mod, spec); return NULL;
} else {
/* Remember pointer to module init function. */
def = PyModule_GetDef(mod);
if (def == NULL) {
Py_DECREF(name);
return NULL;
}
def->m_base.m_init = p->initfunc;
if (_PyImport_FixupExtensionObject(mod, name, name) < 0) {
Py_DECREF(name);
return NULL;
}
Py_DECREF(name);
return mod;
} }
Py_DECREF(name);
return mod;
} }
} }
Py_DECREF(name); Py_DECREF(name);