diff options
Diffstat (limited to 'Python/_warnings.c')
| -rw-r--r-- | Python/_warnings.c | 41 | 
1 files changed, 23 insertions, 18 deletions
diff --git a/Python/_warnings.c b/Python/_warnings.c index 6cfae77..67f4c6b 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -1,5 +1,6 @@  #include "Python.h"  #include "frameobject.h" +#include "clinic/_warnings.c.h"  #define MODULE_NAME "_warnings" @@ -26,7 +27,7 @@ check_matched(PyObject *obj, PyObject *arg)      if (obj == Py_None)          return 1; -    result = _PyObject_CallMethodId(obj, &PyId_match, "O", arg); +    result = _PyObject_CallMethodIdObjArgs(obj, &PyId_match, arg, NULL);      if (result == NULL)          return -1; @@ -476,7 +477,7 @@ warn_explicit(PyObject *category, PyObject *message,      }      else {          text = message; -        message = PyObject_CallFunction(category, "O", message); +        message = PyObject_CallFunctionObjArgs(category, message, NULL);          if (message == NULL)              goto cleanup;      } @@ -485,6 +486,10 @@ warn_explicit(PyObject *category, PyObject *message,      if (lineno_obj == NULL)          goto cleanup; +    if (source == Py_None) { +        source = NULL; +    } +      /* Create key. */      key = PyTuple_Pack(3, text, category, lineno_obj);      if (key == NULL) @@ -805,22 +810,26 @@ do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level,      return res;  } -static PyObject * -warnings_warn(PyObject *self, PyObject *args, PyObject *kwds) -{ -    static char *kw_list[] = {"message", "category", "stacklevel", -                              "source", NULL}; -    PyObject *message, *category = NULL, *source = NULL; -    Py_ssize_t stack_level = 1; +/*[clinic input] +warn as warnings_warn -    if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OnO:warn", kw_list, -                                     &message, &category, &stack_level, &source)) -        return NULL; +    message: object +    category: object = None +    stacklevel: Py_ssize_t = 1 +    source: object = None +Issue a warning, or maybe ignore it or raise an exception. +[clinic start generated code]*/ + +static PyObject * +warnings_warn_impl(PyObject *module, PyObject *message, PyObject *category, +                   Py_ssize_t stacklevel, PyObject *source) +/*[clinic end generated code: output=31ed5ab7d8d760b2 input=bfdf5cf99f6c4edd]*/ +{      category = get_category(message, category);      if (category == NULL)          return NULL; -    return do_warn(message, category, stack_level, source); +    return do_warn(message, category, stacklevel, source);  }  static PyObject * @@ -1098,15 +1107,11 @@ exit:  } -PyDoc_STRVAR(warn_doc, -"Issue a warning, or maybe ignore it or raise an exception."); -  PyDoc_STRVAR(warn_explicit_doc,  "Low-level inferface to warnings functionality.");  static PyMethodDef warnings_functions[] = { -    {"warn", (PyCFunction)warnings_warn, METH_VARARGS | METH_KEYWORDS, -        warn_doc}, +    WARNINGS_WARN_METHODDEF      {"warn_explicit", (PyCFunction)warnings_warn_explicit,          METH_VARARGS | METH_KEYWORDS, warn_explicit_doc},      {"_filters_mutated", (PyCFunction)warnings_filters_mutated, METH_NOARGS,  | 
