mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Issue #10785: Store the filename as Unicode in the Python parser.
This commit is contained in:
parent
9bdb43e43f
commit
7f2fee3640
9 changed files with 94 additions and 42 deletions
|
@ -62,6 +62,7 @@ static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
|
|||
static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
|
||||
PyCompilerFlags *);
|
||||
static void err_input(perrdetail *);
|
||||
static void err_free(perrdetail *);
|
||||
static void initsigs(void);
|
||||
static void call_py_exitfuncs(void);
|
||||
static void wait_for_thread_shutdown(void);
|
||||
|
@ -1887,12 +1888,13 @@ PyParser_ASTFromString(const char *s, const char *filename, int start,
|
|||
flags->cf_flags |= iflags & PyCF_MASK;
|
||||
mod = PyAST_FromNode(n, flags, filename, arena);
|
||||
PyNode_Free(n);
|
||||
return mod;
|
||||
}
|
||||
else {
|
||||
err_input(&err);
|
||||
return NULL;
|
||||
mod = NULL;
|
||||
}
|
||||
err_free(&err);
|
||||
return mod;
|
||||
}
|
||||
|
||||
mod_ty
|
||||
|
@ -1917,14 +1919,15 @@ PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
|
|||
flags->cf_flags |= iflags & PyCF_MASK;
|
||||
mod = PyAST_FromNode(n, flags, filename, arena);
|
||||
PyNode_Free(n);
|
||||
return mod;
|
||||
}
|
||||
else {
|
||||
err_input(&err);
|
||||
if (errcode)
|
||||
*errcode = err.error;
|
||||
return NULL;
|
||||
mod = NULL;
|
||||
}
|
||||
err_free(&err);
|
||||
return mod;
|
||||
}
|
||||
|
||||
/* Simplified interface to parsefile -- return node or set exception */
|
||||
|
@ -1938,6 +1941,7 @@ PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int fla
|
|||
start, NULL, NULL, &err, flags);
|
||||
if (n == NULL)
|
||||
err_input(&err);
|
||||
err_free(&err);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
@ -1952,6 +1956,7 @@ PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
|
|||
start, &err, flags);
|
||||
if (n == NULL)
|
||||
err_input(&err);
|
||||
err_free(&err);
|
||||
return n;
|
||||
}
|
||||
|
||||
|
@ -1964,6 +1969,7 @@ PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
|
|||
&_PyParser_Grammar, start, &err, flags);
|
||||
if (n == NULL)
|
||||
err_input(&err);
|
||||
err_free(&err);
|
||||
return n;
|
||||
}
|
||||
|
||||
|
@ -1976,12 +1982,24 @@ PyParser_SimpleParseStringFilename(const char *str, const char *filename, int st
|
|||
/* May want to move a more generalized form of this to parsetok.c or
|
||||
even parser modules. */
|
||||
|
||||
void
|
||||
PyParser_ClearError(perrdetail *err)
|
||||
{
|
||||
err_free(err);
|
||||
}
|
||||
|
||||
void
|
||||
PyParser_SetError(perrdetail *err)
|
||||
{
|
||||
err_input(err);
|
||||
}
|
||||
|
||||
static void
|
||||
err_free(perrdetail *err)
|
||||
{
|
||||
Py_CLEAR(err->filename);
|
||||
}
|
||||
|
||||
/* Set the error appropriate to the given input error code (see errcode.h) */
|
||||
|
||||
static void
|
||||
|
@ -1989,7 +2007,6 @@ err_input(perrdetail *err)
|
|||
{
|
||||
PyObject *v, *w, *errtype, *errtext;
|
||||
PyObject *msg_obj = NULL;
|
||||
PyObject *filename;
|
||||
char *msg = NULL;
|
||||
|
||||
errtype = PyExc_SyntaxError;
|
||||
|
@ -2075,17 +2092,8 @@ err_input(perrdetail *err)
|
|||
errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
|
||||
"replace");
|
||||
}
|
||||
if (err->filename != NULL)
|
||||
filename = PyUnicode_DecodeFSDefault(err->filename);
|
||||
else {
|
||||
Py_INCREF(Py_None);
|
||||
filename = Py_None;
|
||||
}
|
||||
if (filename != NULL)
|
||||
v = Py_BuildValue("(NiiN)", filename,
|
||||
err->lineno, err->offset, errtext);
|
||||
else
|
||||
v = NULL;
|
||||
v = Py_BuildValue("(OiiN)", err->filename,
|
||||
err->lineno, err->offset, errtext);
|
||||
if (v != NULL) {
|
||||
if (msg_obj)
|
||||
w = Py_BuildValue("(OO)", msg_obj, v);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue