summaryrefslogtreecommitdiffstats
path: root/Python/ast.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2013-08-26 20:28:21 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2013-08-26 20:28:21 (GMT)
commit14e461d5b92000ec4e89182fa25ab0d5b5b31234 (patch)
tree21e37d8661cbe50e7ddbedc1b35a486adc1eae87 /Python/ast.c
parent33824f6fd70f89dd39fcb7ed1651e8097c57d340 (diff)
downloadcpython-14e461d5b92000ec4e89182fa25ab0d5b5b31234.zip
cpython-14e461d5b92000ec4e89182fa25ab0d5b5b31234.tar.gz
cpython-14e461d5b92000ec4e89182fa25ab0d5b5b31234.tar.bz2
Close #11619: The parser and the import machinery do not encode Unicode
filenames anymore on Windows.
Diffstat (limited to 'Python/ast.c')
-rw-r--r--Python/ast.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/Python/ast.c b/Python/ast.c
index a72ba20..073d59f 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -491,7 +491,7 @@ PyAST_Validate(mod_ty mod)
struct compiling {
char *c_encoding; /* source encoding */
PyArena *c_arena; /* arena for allocating memeory */
- const char *c_filename; /* filename */
+ PyObject *c_filename; /* filename */
PyObject *c_normalize; /* Normalization function from unicodedata. */
PyObject *c_normalize_args; /* Normalization argument tuple. */
};
@@ -573,24 +573,13 @@ static int
ast_error(struct compiling *c, const node *n, const char *errmsg)
{
PyObject *value, *errstr, *loc, *tmp;
- PyObject *filename_obj;
- loc = PyErr_ProgramText(c->c_filename, LINENO(n));
+ loc = PyErr_ProgramTextObject(c->c_filename, LINENO(n));
if (!loc) {
Py_INCREF(Py_None);
loc = Py_None;
}
- if (c->c_filename) {
- filename_obj = PyUnicode_DecodeFSDefault(c->c_filename);
- if (!filename_obj) {
- Py_DECREF(loc);
- return 0;
- }
- } else {
- Py_INCREF(Py_None);
- filename_obj = Py_None;
- }
- tmp = Py_BuildValue("(NiiN)", filename_obj, LINENO(n), n->n_col_offset, loc);
+ tmp = Py_BuildValue("(OiiN)", c->c_filename, LINENO(n), n->n_col_offset, loc);
if (!tmp)
return 0;
errstr = PyUnicode_FromString(errmsg);
@@ -673,8 +662,8 @@ num_stmts(const node *n)
*/
mod_ty
-PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename,
- PyArena *arena)
+PyAST_FromNodeObject(const node *n, PyCompilerFlags *flags,
+ PyObject *filename, PyArena *arena)
{
int i, j, k, num;
asdl_seq *stmts = NULL;
@@ -684,6 +673,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename,
mod_ty res = NULL;
c.c_arena = arena;
+ /* borrowed reference */
c.c_filename = filename;
c.c_normalize = c.c_normalize_args = NULL;
if (flags && flags->cf_flags & PyCF_SOURCE_IS_UTF8) {
@@ -797,6 +787,21 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename,
return res;
}
+mod_ty
+PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename_str,
+ PyArena *arena)
+{
+ mod_ty mod;
+ PyObject *filename;
+ filename = PyUnicode_DecodeFSDefault(filename_str);
+ if (filename == NULL)
+ return NULL;
+ mod = PyAST_FromNodeObject(n, flags, filename, arena);
+ Py_DECREF(filename);
+ return mod;
+
+}
+
/* Return the AST repr. of the operator represented as syntax (|, ^, etc.)
*/