Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
Closed
Labels
topic-argument-clinictype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
It seems like Argument Clinic generates code that define Py_BUILD_CORE and includes internal headers unconditionally; for example, a file with a METH_O function will have no need for those:
Details
/*[clinic input]preserve[clinic start generated code]*/#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) # include"pycore_gc.h"// PyGC_Head# include"pycore_runtime.h"// _Py_ID()#endifPyDoc_STRVAR(func__doc__, "func($module, a, /)\n""--\n""\n"); #defineFUNC_METHODDEF \{"func", (PyCFunction)func, METH_O, func__doc__}, /*[clinic end generated code: output=851b6645c29cfa0d input=a9049054013a1b77]*/OTOH, a METH_KEYWORDS function needs those:
Details
/*[clinic input]preserve[clinic start generated code]*/#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) # include"pycore_gc.h"// PyGC_Head# include"pycore_runtime.h"// _Py_ID()#endifPyDoc_STRVAR(func__doc__, "func($module, /, a, b)\n""--\n""\n"); #defineFUNC_METHODDEF \{"func", _PyCFunction_CAST(func), METH_FASTCALL|METH_KEYWORDS, func__doc__}, staticPyObject*func_impl(PyObject*module, PyObject*a, PyObject*b); staticPyObject*func(PyObject*module, PyObject*const*args, Py_ssize_tnargs, PyObject*kwnames){PyObject*return_value=NULL; #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) #defineNUM_KEYWORDS 2 staticstruct{PyGC_Head_this_is_not_used; PyObject_VAR_HEADPyObject*ob_item[NUM_KEYWORDS]} _kwtuple={.ob_base=PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) .ob_item={&_Py_ID(a), &_Py_ID(b), }, }; #undef NUM_KEYWORDS #defineKWTUPLE (&_kwtuple.ob_base.ob_base) #else// !Py_BUILD_CORE# defineKWTUPLE NULL #endif// !Py_BUILD_COREstaticconstchar*const_keywords[] ={"a", "b", NULL}; static_PyArg_Parser_parser={.keywords=_keywords, .fname="func", .kwtuple=KWTUPLE, }; #undef KWTUPLE PyObject*argsbuf[2]; PyObject*a; PyObject*b; args=_PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); if (!args){goto exit} a=args[0]; b=args[1]; return_value=func_impl(module, a, b); exit: returnreturn_value} /*[clinic end generated code: output=e790cd95ffc517a0 input=a9049054013a1b77]*/Argument Clinic should check if those defines/includes are needed before generating the output.
Linked PRs
Metadata
Metadata
Assignees
Labels
topic-argument-clinictype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error