summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
Diffstat (limited to 'Python')
-rw-r--r--Python/errors.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/Python/errors.c b/Python/errors.c
index 41050ce..7f30f7e 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -623,6 +623,48 @@ PyErr_Warn(PyObject *category, char *message)
}
}
+
+/* Warning with explicit origin */
+int
+PyErr_WarnExplicit(PyObject *category, char *message,
+ char *filename, int lineno,
+ char *module, PyObject *registry)
+{
+ PyObject *mod, *dict, *func = NULL;
+
+ mod = PyImport_ImportModule("warnings");
+ if (mod != NULL) {
+ dict = PyModule_GetDict(mod);
+ func = PyDict_GetItemString(dict, "warn_explicit");
+ Py_DECREF(mod);
+ }
+ if (func == NULL) {
+ PySys_WriteStderr("warning: %s\n", message);
+ return 0;
+ }
+ else {
+ PyObject *args, *res;
+
+ if (category == NULL)
+ category = PyExc_RuntimeWarning;
+ if (registry == NULL)
+ registry = Py_None;
+ args = Py_BuildValue("(sOsizO)", message, category,
+ filename, lineno, module, registry);
+ if (args == NULL)
+ return -1;
+ res = PyEval_CallObject(func, args);
+ Py_DECREF(args);
+ if (res == NULL)
+ return -1;
+ Py_DECREF(res);
+ return 0;
+ }
+}
+
+
+/* XXX There's a comment missing here */
+
void
PyErr_SyntaxLocation(char *filename, int lineno)
{