Kaydet (Commit) 83cb7973 authored tarafından Fred Drake's avatar Fred Drake

When raising a SyntaxError, make a best-effort attempt to set the

filename and lineno attributes, but do not mask the SyntaxError if we
fail.

This is part of what is needed to close SoruceForge bug #110628
(Jitterbug PR#278).
üst 1aba5770
...@@ -20,6 +20,7 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. ...@@ -20,6 +20,7 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#include "compile.h" #include "compile.h"
#include "eval.h" #include "eval.h"
#include "marshal.h" #include "marshal.h"
#include "osdefs.h" /* SEP */
#ifdef HAVE_UNISTD_H #ifdef HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
...@@ -1003,9 +1004,26 @@ err_input(perrdetail *err) ...@@ -1003,9 +1004,26 @@ err_input(perrdetail *err)
break; break;
} }
w = Py_BuildValue("(sO)", msg, v); w = Py_BuildValue("(sO)", msg, v);
Py_XDECREF(v);
PyErr_SetObject(errtype, w); PyErr_SetObject(errtype, w);
Py_XDECREF(w); Py_XDECREF(w);
if (v != NULL) {
PyObject *exc, *tb;
PyErr_Fetch(&errtype, &exc, &tb);
PyErr_NormalizeException(&errtype, &exc, &tb);
if (PyObject_SetAttrString(exc, "filename",
PyTuple_GET_ITEM(v, 0)))
PyErr_Clear();
if (PyObject_SetAttrString(exc, "lineno",
PyTuple_GET_ITEM(v, 1)))
PyErr_Clear();
if (PyObject_SetAttrString(exc, "offset",
PyTuple_GET_ITEM(v, 2)))
PyErr_Clear();
Py_DECREF(v);
PyErr_Restore(errtype, exc, tb);
}
} }
/* Print fatal error message and abort */ /* Print fatal error message and abort */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment