Issue #3080: Reindent and simplify import_submodule()

This commit is contained in:
Victor Stinner 2011-03-13 22:38:38 -04:00
parent c24c8108b6
commit 9599de5110
1 changed files with 39 additions and 42 deletions

View File

@ -2779,9 +2779,7 @@ PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
corresponding entry is not found in sys.modules, Py_None is returned. corresponding entry is not found in sys.modules, Py_None is returned.
*/ */
static PyObject * static PyObject *
get_parent(PyObject *globals, get_parent(PyObject *globals, PyObject **p_name, int level)
PyObject **p_name,
int level)
{ {
Py_UNICODE name[MAXPATHLEN+1]; Py_UNICODE name[MAXPATHLEN+1];
const Py_ssize_t bufsize = MAXPATHLEN+1; const Py_ssize_t bufsize = MAXPATHLEN+1;
@ -3167,7 +3165,10 @@ static PyObject *
import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname) import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname)
{ {
PyObject *modules = PyImport_GetModuleDict(); PyObject *modules = PyImport_GetModuleDict();
PyObject *m = NULL, *bufobj; PyObject *m = NULL, *bufobj, *path, *loader;
char buf[MAXPATHLEN+1];
struct filedescr *fdp;
FILE *fp;
/* Require: /* Require:
if mod == None: subname == fullname if mod == None: subname == fullname
@ -3176,52 +3177,48 @@ import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname)
if ((m = PyDict_GetItem(modules, fullname)) != NULL) { if ((m = PyDict_GetItem(modules, fullname)) != NULL) {
Py_INCREF(m); Py_INCREF(m);
return m;
} }
if (mod == Py_None)
path = NULL;
else { else {
PyObject *path, *loader; path = PyObject_GetAttrString(mod, "__path__");
char buf[MAXPATHLEN+1]; if (path == NULL) {
struct filedescr *fdp;
FILE *fp;
if (mod == Py_None)
path = NULL;
else {
path = PyObject_GetAttrString(mod, "__path__");
if (path == NULL) {
PyErr_Clear();
Py_INCREF(Py_None);
return Py_None;
}
}
fdp = find_module(_PyUnicode_AsString(fullname),
_PyUnicode_AsString(subname),
path, buf, MAXPATHLEN+1,
&fp, &loader);
Py_XDECREF(path);
if (fdp == NULL) {
if (!PyErr_ExceptionMatches(PyExc_ImportError))
return NULL;
PyErr_Clear(); PyErr_Clear();
Py_INCREF(Py_None); Py_INCREF(Py_None);
return Py_None; return Py_None;
} }
bufobj = PyUnicode_DecodeFSDefault(buf);
if (bufobj != NULL) {
m = load_module(fullname, fp, bufobj, fdp->type, loader);
Py_DECREF(bufobj);
}
else
m = NULL;
Py_XDECREF(loader);
if (fp)
fclose(fp);
if (m != NULL && !add_submodule(mod, m, fullname, subname, modules)) {
Py_XDECREF(m);
m = NULL;
}
} }
fdp = find_module(_PyUnicode_AsString(fullname),
_PyUnicode_AsString(subname),
path, buf, MAXPATHLEN+1,
&fp, &loader);
Py_XDECREF(path);
if (fdp == NULL) {
if (!PyErr_ExceptionMatches(PyExc_ImportError))
return NULL;
PyErr_Clear();
Py_INCREF(Py_None);
return Py_None;
}
bufobj = PyUnicode_DecodeFSDefault(buf);
if (bufobj != NULL) {
m = load_module(fullname, fp, bufobj, fdp->type, loader);
Py_DECREF(bufobj);
}
else
m = NULL;
Py_XDECREF(loader);
if (fp)
fclose(fp);
if (m == NULL)
return NULL;
if (!add_submodule(mod, m, fullname, subname, modules)) {
Py_XDECREF(m);
return NULL;
}
return m; return m;
} }