17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(func_new__doc__,
67db96d56Sopenharmony_ci"function(code, globals, name=None, argdefs=None, closure=None)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Create a function object.\n"
107db96d56Sopenharmony_ci"\n"
117db96d56Sopenharmony_ci"  code\n"
127db96d56Sopenharmony_ci"    a code object\n"
137db96d56Sopenharmony_ci"  globals\n"
147db96d56Sopenharmony_ci"    the globals dictionary\n"
157db96d56Sopenharmony_ci"  name\n"
167db96d56Sopenharmony_ci"    a string that overrides the name from the code object\n"
177db96d56Sopenharmony_ci"  argdefs\n"
187db96d56Sopenharmony_ci"    a tuple that specifies the default argument values\n"
197db96d56Sopenharmony_ci"  closure\n"
207db96d56Sopenharmony_ci"    a tuple that supplies the bindings for free variables");
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_cistatic PyObject *
237db96d56Sopenharmony_cifunc_new_impl(PyTypeObject *type, PyCodeObject *code, PyObject *globals,
247db96d56Sopenharmony_ci              PyObject *name, PyObject *defaults, PyObject *closure);
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_cistatic PyObject *
277db96d56Sopenharmony_cifunc_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
287db96d56Sopenharmony_ci{
297db96d56Sopenharmony_ci    PyObject *return_value = NULL;
307db96d56Sopenharmony_ci    static const char * const _keywords[] = {"code", "globals", "name", "argdefs", "closure", NULL};
317db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "function", 0};
327db96d56Sopenharmony_ci    PyObject *argsbuf[5];
337db96d56Sopenharmony_ci    PyObject * const *fastargs;
347db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
357db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 2;
367db96d56Sopenharmony_ci    PyCodeObject *code;
377db96d56Sopenharmony_ci    PyObject *globals;
387db96d56Sopenharmony_ci    PyObject *name = Py_None;
397db96d56Sopenharmony_ci    PyObject *defaults = Py_None;
407db96d56Sopenharmony_ci    PyObject *closure = Py_None;
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 2, 5, 0, argsbuf);
437db96d56Sopenharmony_ci    if (!fastargs) {
447db96d56Sopenharmony_ci        goto exit;
457db96d56Sopenharmony_ci    }
467db96d56Sopenharmony_ci    if (!PyObject_TypeCheck(fastargs[0], &PyCode_Type)) {
477db96d56Sopenharmony_ci        _PyArg_BadArgument("function", "argument 'code'", (&PyCode_Type)->tp_name, fastargs[0]);
487db96d56Sopenharmony_ci        goto exit;
497db96d56Sopenharmony_ci    }
507db96d56Sopenharmony_ci    code = (PyCodeObject *)fastargs[0];
517db96d56Sopenharmony_ci    if (!PyDict_Check(fastargs[1])) {
527db96d56Sopenharmony_ci        _PyArg_BadArgument("function", "argument 'globals'", "dict", fastargs[1]);
537db96d56Sopenharmony_ci        goto exit;
547db96d56Sopenharmony_ci    }
557db96d56Sopenharmony_ci    globals = fastargs[1];
567db96d56Sopenharmony_ci    if (!noptargs) {
577db96d56Sopenharmony_ci        goto skip_optional_pos;
587db96d56Sopenharmony_ci    }
597db96d56Sopenharmony_ci    if (fastargs[2]) {
607db96d56Sopenharmony_ci        name = fastargs[2];
617db96d56Sopenharmony_ci        if (!--noptargs) {
627db96d56Sopenharmony_ci            goto skip_optional_pos;
637db96d56Sopenharmony_ci        }
647db96d56Sopenharmony_ci    }
657db96d56Sopenharmony_ci    if (fastargs[3]) {
667db96d56Sopenharmony_ci        defaults = fastargs[3];
677db96d56Sopenharmony_ci        if (!--noptargs) {
687db96d56Sopenharmony_ci            goto skip_optional_pos;
697db96d56Sopenharmony_ci        }
707db96d56Sopenharmony_ci    }
717db96d56Sopenharmony_ci    closure = fastargs[4];
727db96d56Sopenharmony_ciskip_optional_pos:
737db96d56Sopenharmony_ci    return_value = func_new_impl(type, code, globals, name, defaults, closure);
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ciexit:
767db96d56Sopenharmony_ci    return return_value;
777db96d56Sopenharmony_ci}
787db96d56Sopenharmony_ci/*[clinic end generated code: output=3d96afa3396e5c82 input=a9049054013a1b77]*/
79