diff options
author | Fred Drake <fdrake@acm.org> | 2000-08-15 15:49:03 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2000-08-15 15:49:03 (GMT) |
commit | 83cb7973802441f1f6c7115bc8eb83d64534b853 (patch) | |
tree | 2480cf6ef04a93abc00517e34963e295fd82db9f /Python/pythonrun.c | |
parent | 1aba5770939c497c707eecd167856f98c9bb74c0 (diff) | |
download | cpython-83cb7973802441f1f6c7115bc8eb83d64534b853.zip cpython-83cb7973802441f1f6c7115bc8eb83d64534b853.tar.gz cpython-83cb7973802441f1f6c7115bc8eb83d64534b853.tar.bz2 |
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).
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r-- | Python/pythonrun.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 7812de4..44b55d2 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -20,6 +20,7 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. #include "compile.h" #include "eval.h" #include "marshal.h" +#include "osdefs.h" /* SEP */ #ifdef HAVE_UNISTD_H #include <unistd.h> @@ -1003,9 +1004,26 @@ err_input(perrdetail *err) break; } w = Py_BuildValue("(sO)", msg, v); - Py_XDECREF(v); PyErr_SetObject(errtype, 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 */ |