mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	gh-91102: Port 8-argument _warnings.warn_explicit to Argument Clinic (#92891)
Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
		
							parent
							
								
									6dadf6ca01
								
							
						
					
					
						commit
						41e0585ffa
					
				
					 3 changed files with 106 additions and 25 deletions
				
			
		| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					:meth:`_warnings.warn_explicit` is ported to Argument Clinic.
 | 
				
			||||||
| 
						 | 
					@ -1030,28 +1030,31 @@ get_source_line(PyInterpreterState *interp, PyObject *module_globals, int lineno
 | 
				
			||||||
    return source_line;
 | 
					    return source_line;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*[clinic input]
 | 
				
			||||||
 | 
					warn_explicit as warnings_warn_explicit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    message: object
 | 
				
			||||||
 | 
					    category: object
 | 
				
			||||||
 | 
					    filename: unicode
 | 
				
			||||||
 | 
					    lineno: int
 | 
				
			||||||
 | 
					    module as mod: object = NULL
 | 
				
			||||||
 | 
					    registry: object = None
 | 
				
			||||||
 | 
					    module_globals: object = None
 | 
				
			||||||
 | 
					    source as sourceobj: object = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Issue a warning, or maybe ignore it or raise an exception.
 | 
				
			||||||
 | 
					[clinic start generated code]*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static PyObject *
 | 
					static PyObject *
 | 
				
			||||||
warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds)
 | 
					warnings_warn_explicit_impl(PyObject *module, PyObject *message,
 | 
				
			||||||
 | 
					                            PyObject *category, PyObject *filename,
 | 
				
			||||||
 | 
					                            int lineno, PyObject *mod, PyObject *registry,
 | 
				
			||||||
 | 
					                            PyObject *module_globals, PyObject *sourceobj)
 | 
				
			||||||
 | 
					/*[clinic end generated code: output=c49c62b15a49a186 input=df6eeb8b45e712f1]*/
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static char *kwd_list[] = {"message", "category", "filename", "lineno",
 | 
					 | 
				
			||||||
                                "module", "registry", "module_globals",
 | 
					 | 
				
			||||||
                                "source", 0};
 | 
					 | 
				
			||||||
    PyObject *message;
 | 
					 | 
				
			||||||
    PyObject *category;
 | 
					 | 
				
			||||||
    PyObject *filename;
 | 
					 | 
				
			||||||
    int lineno;
 | 
					 | 
				
			||||||
    PyObject *module = NULL;
 | 
					 | 
				
			||||||
    PyObject *registry = NULL;
 | 
					 | 
				
			||||||
    PyObject *module_globals = NULL;
 | 
					 | 
				
			||||||
    PyObject *sourceobj = NULL;
 | 
					 | 
				
			||||||
    PyObject *source_line = NULL;
 | 
					    PyObject *source_line = NULL;
 | 
				
			||||||
    PyObject *returned;
 | 
					    PyObject *returned;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOUi|OOOO:warn_explicit",
 | 
					 | 
				
			||||||
                kwd_list, &message, &category, &filename, &lineno, &module,
 | 
					 | 
				
			||||||
                ®istry, &module_globals, &sourceobj))
 | 
					 | 
				
			||||||
        return NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    PyThreadState *tstate = get_current_tstate();
 | 
					    PyThreadState *tstate = get_current_tstate();
 | 
				
			||||||
    if (tstate == NULL) {
 | 
					    if (tstate == NULL) {
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
| 
						 | 
					@ -1070,8 +1073,8 @@ warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds)
 | 
				
			||||||
            return NULL;
 | 
					            return NULL;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    returned = warn_explicit(tstate, category, message, filename, lineno, module,
 | 
					    returned = warn_explicit(tstate, category, message, filename, lineno,
 | 
				
			||||||
                             registry, source_line, sourceobj);
 | 
					                             mod, registry, source_line, sourceobj);
 | 
				
			||||||
    Py_XDECREF(source_line);
 | 
					    Py_XDECREF(source_line);
 | 
				
			||||||
    return returned;
 | 
					    return returned;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1331,13 +1334,9 @@ _PyErr_WarnUnawaitedCoroutine(PyObject *coro)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PyDoc_STRVAR(warn_explicit_doc,
 | 
					 | 
				
			||||||
"Low-level interface to warnings functionality.");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static PyMethodDef warnings_functions[] = {
 | 
					static PyMethodDef warnings_functions[] = {
 | 
				
			||||||
    WARNINGS_WARN_METHODDEF
 | 
					    WARNINGS_WARN_METHODDEF
 | 
				
			||||||
    {"warn_explicit", _PyCFunction_CAST(warnings_warn_explicit),
 | 
					    WARNINGS_WARN_EXPLICIT_METHODDEF
 | 
				
			||||||
        METH_VARARGS | METH_KEYWORDS, warn_explicit_doc},
 | 
					 | 
				
			||||||
    {"_filters_mutated", _PyCFunction_CAST(warnings_filters_mutated), METH_NOARGS,
 | 
					    {"_filters_mutated", _PyCFunction_CAST(warnings_filters_mutated), METH_NOARGS,
 | 
				
			||||||
        NULL},
 | 
					        NULL},
 | 
				
			||||||
    /* XXX(brett.cannon): add showwarning? */
 | 
					    /* XXX(brett.cannon): add showwarning? */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										83
									
								
								Python/clinic/_warnings.c.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										83
									
								
								Python/clinic/_warnings.c.h
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -66,4 +66,85 @@ skip_optional_pos:
 | 
				
			||||||
exit:
 | 
					exit:
 | 
				
			||||||
    return return_value;
 | 
					    return return_value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*[clinic end generated code: output=0435c68611fa2fe9 input=a9049054013a1b77]*/
 | 
					
 | 
				
			||||||
 | 
					PyDoc_STRVAR(warnings_warn_explicit__doc__,
 | 
				
			||||||
 | 
					"warn_explicit($module, /, message, category, filename, lineno,\n"
 | 
				
			||||||
 | 
					"              module=<unrepresentable>, registry=None,\n"
 | 
				
			||||||
 | 
					"              module_globals=None, source=None)\n"
 | 
				
			||||||
 | 
					"--\n"
 | 
				
			||||||
 | 
					"\n"
 | 
				
			||||||
 | 
					"Issue a warning, or maybe ignore it or raise an exception.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define WARNINGS_WARN_EXPLICIT_METHODDEF    \
 | 
				
			||||||
 | 
					    {"warn_explicit", _PyCFunction_CAST(warnings_warn_explicit), METH_FASTCALL|METH_KEYWORDS, warnings_warn_explicit__doc__},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static PyObject *
 | 
				
			||||||
 | 
					warnings_warn_explicit_impl(PyObject *module, PyObject *message,
 | 
				
			||||||
 | 
					                            PyObject *category, PyObject *filename,
 | 
				
			||||||
 | 
					                            int lineno, PyObject *mod, PyObject *registry,
 | 
				
			||||||
 | 
					                            PyObject *module_globals, PyObject *sourceobj);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static PyObject *
 | 
				
			||||||
 | 
					warnings_warn_explicit(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PyObject *return_value = NULL;
 | 
				
			||||||
 | 
					    static const char * const _keywords[] = {"message", "category", "filename", "lineno", "module", "registry", "module_globals", "source", NULL};
 | 
				
			||||||
 | 
					    static _PyArg_Parser _parser = {NULL, _keywords, "warn_explicit", 0};
 | 
				
			||||||
 | 
					    PyObject *argsbuf[8];
 | 
				
			||||||
 | 
					    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 4;
 | 
				
			||||||
 | 
					    PyObject *message;
 | 
				
			||||||
 | 
					    PyObject *category;
 | 
				
			||||||
 | 
					    PyObject *filename;
 | 
				
			||||||
 | 
					    int lineno;
 | 
				
			||||||
 | 
					    PyObject *mod = NULL;
 | 
				
			||||||
 | 
					    PyObject *registry = Py_None;
 | 
				
			||||||
 | 
					    PyObject *module_globals = Py_None;
 | 
				
			||||||
 | 
					    PyObject *sourceobj = Py_None;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 8, 0, argsbuf);
 | 
				
			||||||
 | 
					    if (!args) {
 | 
				
			||||||
 | 
					        goto exit;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    message = args[0];
 | 
				
			||||||
 | 
					    category = args[1];
 | 
				
			||||||
 | 
					    if (!PyUnicode_Check(args[2])) {
 | 
				
			||||||
 | 
					        _PyArg_BadArgument("warn_explicit", "argument 'filename'", "str", args[2]);
 | 
				
			||||||
 | 
					        goto exit;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (PyUnicode_READY(args[2]) == -1) {
 | 
				
			||||||
 | 
					        goto exit;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    filename = args[2];
 | 
				
			||||||
 | 
					    lineno = _PyLong_AsInt(args[3]);
 | 
				
			||||||
 | 
					    if (lineno == -1 && PyErr_Occurred()) {
 | 
				
			||||||
 | 
					        goto exit;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!noptargs) {
 | 
				
			||||||
 | 
					        goto skip_optional_pos;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (args[4]) {
 | 
				
			||||||
 | 
					        mod = args[4];
 | 
				
			||||||
 | 
					        if (!--noptargs) {
 | 
				
			||||||
 | 
					            goto skip_optional_pos;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (args[5]) {
 | 
				
			||||||
 | 
					        registry = args[5];
 | 
				
			||||||
 | 
					        if (!--noptargs) {
 | 
				
			||||||
 | 
					            goto skip_optional_pos;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (args[6]) {
 | 
				
			||||||
 | 
					        module_globals = args[6];
 | 
				
			||||||
 | 
					        if (!--noptargs) {
 | 
				
			||||||
 | 
					            goto skip_optional_pos;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    sourceobj = args[7];
 | 
				
			||||||
 | 
					skip_optional_pos:
 | 
				
			||||||
 | 
					    return_value = warnings_warn_explicit_impl(module, message, category, filename, lineno, mod, registry, module_globals, sourceobj);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit:
 | 
				
			||||||
 | 
					    return return_value;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/*[clinic end generated code: output=596b370838b95386 input=a9049054013a1b77]*/
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue