diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-08-09 00:59:10 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-08-09 00:59:10 (GMT) |
commit | 44c6c155d6cc0d218decd250d84a238196be8daa (patch) | |
tree | f038342371164ade0080be02a588a136e6d14ee5 /Python/import.c | |
parent | e43f9d0ed69addbc34bac4af1b3ad7f1bdd3b149 (diff) | |
download | cpython-44c6c155d6cc0d218decd250d84a238196be8daa.zip cpython-44c6c155d6cc0d218decd250d84a238196be8daa.tar.gz cpython-44c6c155d6cc0d218decd250d84a238196be8daa.tar.bz2 |
Issue #9425: Create load_builtin() subfunction
Just move the code and some variables.
Diffstat (limited to 'Python/import.c')
-rw-r--r-- | Python/import.c | 70 |
1 files changed, 40 insertions, 30 deletions
diff --git a/Python/import.c b/Python/import.c index 194e360..c06aa1c 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2013,15 +2013,52 @@ find_init_module(char *buf) static int init_builtin(char *); /* Forward */ +static PyObject* +load_builtin(char *name, char *pathname, int type) +{ + PyObject *m, *modules; + int err; + + if (pathname != NULL && pathname[0] != '\0') + name = pathname; + + if (type == C_BUILTIN) + err = init_builtin(name); + else + err = PyImport_ImportFrozenModule(name); + if (err < 0) + return NULL; + if (err == 0) { + PyErr_Format(PyExc_ImportError, + "Purported %s module %.200s not found", + type == C_BUILTIN ? + "builtin" : "frozen", + name); + return NULL; + } + + modules = PyImport_GetModuleDict(); + m = PyDict_GetItemString(modules, name); + if (m == NULL) { + PyErr_Format( + PyExc_ImportError, + "%s module %.200s not properly initialized", + type == C_BUILTIN ? + "builtin" : "frozen", + name); + return NULL; + } + Py_INCREF(m); + return m; +} + /* Load an external module using the default search path and return its module object WITH INCREMENTED REFERENCE COUNT */ static PyObject * load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader) { - PyObject *modules; PyObject *m; - int err; /* First check that there's an open file (if we need one) */ switch (type) { @@ -2057,34 +2094,7 @@ load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader) case C_BUILTIN: case PY_FROZEN: - if (pathname != NULL && pathname[0] != '\0') - name = pathname; - if (type == C_BUILTIN) - err = init_builtin(name); - else - err = PyImport_ImportFrozenModule(name); - if (err < 0) - return NULL; - if (err == 0) { - PyErr_Format(PyExc_ImportError, - "Purported %s module %.200s not found", - type == C_BUILTIN ? - "builtin" : "frozen", - name); - return NULL; - } - modules = PyImport_GetModuleDict(); - m = PyDict_GetItemString(modules, name); - if (m == NULL) { - PyErr_Format( - PyExc_ImportError, - "%s module %.200s not properly initialized", - type == C_BUILTIN ? - "builtin" : "frozen", - name); - return NULL; - } - Py_INCREF(m); + m = load_builtin(name, pathname, type); break; case IMP_HOOK: { |