_PyFunction_FromConstructor creates a PyFunctionObject, populating its fields by pulling them from a PyFrameConstructor object. But it ignores the fc_closure field, which means it always creates a function that has no closure. Creating functions with closures is a totally legitimate use case and this is just a bug.
Your environment
CPython versions tested on: main
Operating system and architecture: linux
The text was updated successfully, but these errors were encountered:
PyEval_EvalCodeEx populates the fc_closure field with the closure argument passed in. CPython doesn't itself use PyEval_EvalCodeEx, it's a "legacy API". But it's an externally visible and supported API call.
Unfortunately, there's no straightforward way to test this change right now. I'm in the process of adding a use of PyEval_EvalCodeEx (adding support for a closure argument to exec) but that PR depends on fixing this bug first. So I'll make you a deal: my PR won't test this fix, but I'll test it in advance in my other PR, and that PR will add a test for this code path. Deal?
Bug report
_PyFunction_FromConstructorcreates aPyFunctionObject, populating its fields by pulling them from aPyFrameConstructorobject. But it ignores thefc_closurefield, which means it always creates a function that has no closure. Creating functions with closures is a totally legitimate use case and this is just a bug.Your environment
The text was updated successfully, but these errors were encountered: