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).
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 @@
 #include "compile.h"
 #include "eval.h"
 #include "marshal.h"
+#include "osdefs.h"			/* SEP */
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -1003,9 +1004,26 @@
 		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 */