
Victor Stinner wrote:
Since Cython is a common consumer of this C API, can somone please dig into Cython to see exactly what it needs in terms of API? How does Cython create all arguments of the __Pyx_PyCode_New() macro? Does it copy an existing function to only override some fields, something like CodeType.replace(field=new_value)? If possible, I would prefer that Cython only uses the *public* C API. Otherwise, it will be very likely that Cython will break at every single Python release. Cython has a small team to maintain the code base, whereas CPython evolves much faster with a larger team. Victor
Cython only uses it here, to construct a fake code object with mostly blank values for each of the Cython function objects: https://github.com/cython/cython/blob/8af0271186cc642436306274564986888d5e64... It's not actually intending to execute the code object at any point, it's created so that fake tracebacks get a filename/line number, the function objects have the argument count values for inspect to read and so Cython can emulate profiler/tracer events. So for Cython's case in particular it could a more stable API function, though said hypothetical API would have to have updated to handle pos-only args anyway also.