Coverage Report

Created: 2025-07-11 06:59

/src/Python-3.8.3/Objects/clinic/funcobject.c.h
Line
Count
Source (jump to first uncovered line)
1
/*[clinic input]
2
preserve
3
[clinic start generated code]*/
4
5
PyDoc_STRVAR(func_new__doc__,
6
"function(code, globals, name=None, argdefs=None, closure=None)\n"
7
"--\n"
8
"\n"
9
"Create a function object.\n"
10
"\n"
11
"  code\n"
12
"    a code object\n"
13
"  globals\n"
14
"    the globals dictionary\n"
15
"  name\n"
16
"    a string that overrides the name from the code object\n"
17
"  argdefs\n"
18
"    a tuple that specifies the default argument values\n"
19
"  closure\n"
20
"    a tuple that supplies the bindings for free variables");
21
22
static PyObject *
23
func_new_impl(PyTypeObject *type, PyCodeObject *code, PyObject *globals,
24
              PyObject *name, PyObject *defaults, PyObject *closure);
25
26
static PyObject *
27
func_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
28
0
{
29
0
    PyObject *return_value = NULL;
30
0
    static const char * const _keywords[] = {"code", "globals", "name", "argdefs", "closure", NULL};
31
0
    static _PyArg_Parser _parser = {NULL, _keywords, "function", 0};
32
0
    PyObject *argsbuf[5];
33
0
    PyObject * const *fastargs;
34
0
    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
35
0
    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 2;
36
0
    PyCodeObject *code;
37
0
    PyObject *globals;
38
0
    PyObject *name = Py_None;
39
0
    PyObject *defaults = Py_None;
40
0
    PyObject *closure = Py_None;
41
42
0
    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 2, 5, 0, argsbuf);
43
0
    if (!fastargs) {
44
0
        goto exit;
45
0
    }
46
0
    if (!PyObject_TypeCheck(fastargs[0], &PyCode_Type)) {
47
0
        _PyArg_BadArgument("function", "argument 'code'", (&PyCode_Type)->tp_name, fastargs[0]);
48
0
        goto exit;
49
0
    }
50
0
    code = (PyCodeObject *)fastargs[0];
51
0
    if (!PyDict_Check(fastargs[1])) {
52
0
        _PyArg_BadArgument("function", "argument 'globals'", "dict", fastargs[1]);
53
0
        goto exit;
54
0
    }
55
0
    globals = fastargs[1];
56
0
    if (!noptargs) {
57
0
        goto skip_optional_pos;
58
0
    }
59
0
    if (fastargs[2]) {
60
0
        name = fastargs[2];
61
0
        if (!--noptargs) {
62
0
            goto skip_optional_pos;
63
0
        }
64
0
    }
65
0
    if (fastargs[3]) {
66
0
        defaults = fastargs[3];
67
0
        if (!--noptargs) {
68
0
            goto skip_optional_pos;
69
0
        }
70
0
    }
71
0
    closure = fastargs[4];
72
0
skip_optional_pos:
73
0
    return_value = func_new_impl(type, code, globals, name, defaults, closure);
74
75
0
exit:
76
0
    return return_value;
77
0
}
78
/*[clinic end generated code: output=3d96afa3396e5c82 input=a9049054013a1b77]*/