py/objfun: Implement function.__code__ and function constructor.

This allows retrieving the code object of a function using
`function.__code__`, and then reconstructing a function from a code object
using `FunctionType(code_object)`.

This feature is controlled by `MICROPY_PY_FUNCTION_ATTRS_CODE` and is
enabled at the full-features level.

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George
2025-01-20 22:23:48 +11:00
parent 62e821ccb8
commit ceb8ba60b4
8 changed files with 133 additions and 5 deletions

View File

@@ -0,0 +1,19 @@
# Test MicroPython-specific restrictions of function.__code__ attribute.
try:
(lambda: 0).__code__
except AttributeError:
print("SKIP")
raise SystemExit
def f_with_children():
def g():
pass
# Can't access __code__ when function has children.
try:
f_with_children.__code__
except AttributeError:
print("AttributeError")