summaryrefslogtreecommitdiffstats
path: root/Python/import.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2010-08-09 00:59:10 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2010-08-09 00:59:10 (GMT)
commit44c6c155d6cc0d218decd250d84a238196be8daa (patch)
treef038342371164ade0080be02a588a136e6d14ee5 /Python/import.c
parente43f9d0ed69addbc34bac4af1b3ad7f1bdd3b149 (diff)
downloadcpython-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.c70
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: {