You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
_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_FromConstructor
creates aPyFunctionObject
, populating its fields by pulling them from aPyFrameConstructor
object. But it ignores thefc_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
The text was updated successfully, but these errors were encountered: