[Python-checkins] r82673 - in python/branches/import_unicode: Include/import.h Python/import.c
victor.stinner
python-checkins at python.org
Fri Jul 9 01:32:24 CEST 2010
Author: victor.stinner
Date: Fri Jul 9 01:32:24 2010
New Revision: 82673
Log:
Create PyImport_ExecCodeModuleWithUnicodePathnames()
I love long function names!
Modified:
python/branches/import_unicode/Include/import.h
python/branches/import_unicode/Python/import.c
Modified: python/branches/import_unicode/Include/import.h
==============================================================================
--- python/branches/import_unicode/Include/import.h (original)
+++ python/branches/import_unicode/Include/import.h Fri Jul 9 01:32:24 2010
@@ -17,6 +17,11 @@
PyObject *co,
char *pathname,
char *cpathname);
+PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleWithUnicodePathnames(
+ char *name,
+ PyObject *co,
+ PyObject *pathname,
+ PyObject *cpathname);
PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void);
PyAPI_FUNC(PyObject *) PyImport_AddModule(const char *name);
PyAPI_FUNC(PyObject *) PyImport_ImportModule(const char *name);
Modified: python/branches/import_unicode/Python/import.c
==============================================================================
--- python/branches/import_unicode/Python/import.c (original)
+++ python/branches/import_unicode/Python/import.c Fri Jul 9 01:32:24 2010
@@ -736,8 +736,8 @@
PyObject *
PyImport_ExecCodeModule(char *name, PyObject *co)
{
- return PyImport_ExecCodeModuleWithPathnames(
- name, co, (char *)NULL, (char *)NULL);
+ return PyImport_ExecCodeModuleWithUnicodePathnames(
+ name, co, NULL, NULL);
}
PyObject *
@@ -748,8 +748,8 @@
}
PyObject *
-PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
- char *cpathname)
+PyImport_ExecCodeModuleWithUnicodePathnames(char *name, PyObject *co,
+ PyObject *pathobj, PyObject *cpathobj)
{
PyObject *modules = PyImport_GetModuleDict();
PyObject *m, *d, *v;
@@ -767,11 +767,8 @@
}
/* Remember the filename as the __file__ attribute */
v = NULL;
- if (pathname != NULL) {
- PyObject *pathobj = PyUnicode_DecodeFSDefault(pathname);
- /* FIXME: check pathobj != NULL */
+ if (pathobj != NULL) {
v = get_sourcefile(pathobj);
- Py_DECREF(pathobj);
if (v == NULL)
PyErr_Clear();
}
@@ -784,18 +781,12 @@
Py_DECREF(v);
/* Remember the pyc path name as the __cached__ attribute. */
- if (cpathname == NULL) {
- v = Py_None;
- Py_INCREF(v);
- }
- else if ((v = PyUnicode_FromString(cpathname)) == NULL) {
- PyErr_Clear(); /* Not important enough to report */
+ if (cpathobj != NULL)
+ v = cpathobj;
+ else
v = Py_None;
- Py_INCREF(v);
- }
if (PyDict_SetItemString(d, "__cached__", v) != 0)
PyErr_Clear(); /* Not important enough to report */
- Py_DECREF(v);
v = PyEval_EvalCode((PyCodeObject *)co, d, d);
if (v == NULL)
@@ -818,6 +809,29 @@
return NULL;
}
+PyObject *
+PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
+ char *cpathname)
+{
+ PyObject *m, *pathobj, *cpathobj;
+ if (pathname != NULL) {
+ pathobj = PyUnicode_DecodeFSDefault(pathname);
+ if (pathobj == NULL)
+ return NULL;
+ } else
+ pathobj = NULL;
+ if (cpathname != NULL) {
+ cpathobj = PyUnicode_DecodeFSDefault(cpathname);
+ if (cpathobj == NULL)
+ PyErr_Clear(); /* Not important enough to report */
+ } else
+ cpathobj = NULL;
+ m = PyImport_ExecCodeModuleWithUnicodePathnames(name, co, pathobj, cpathobj);
+ Py_XDECREF(pathobj);
+ Py_XDECREF(cpathobj);
+ return m;
+}
+
/* Like strrchr(string, '/') but searches for the rightmost of either SEP
or ALTSEP, if the latter is defined.
@@ -1068,6 +1082,7 @@
long magic;
PyCodeObject *co;
PyObject *m;
+ PyObject *cpathobj;
magic = PyMarshal_ReadLongFromFile(fp);
if (magic != pyc_magic) {
@@ -1082,8 +1097,10 @@
if (Py_VerboseFlag)
PySys_WriteStderr("import %s # precompiled from %s\n",
name, cpathname);
- m = PyImport_ExecCodeModuleWithPathnames(
- name, (PyObject *)co, cpathname, cpathname);
+ cpathobj = PyUnicode_DecodeFSDefault(cpathname);
+ m = PyImport_ExecCodeModuleWithUnicodePathnames(
+ name, (PyObject *)co, cpathobj, cpathobj);
+ Py_DECREF(cpathobj);
Py_DECREF(co);
return m;
More information about the Python-checkins
mailing list