mirror of
https://github.com/python/cpython.git
synced 2025-11-03 11:23:31 +00:00
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).
This commit is contained in:
parent
1aba577093
commit
83cb797380
1 changed files with 19 additions and 1 deletions
|
|
@ -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)
|
||||||
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 */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue