mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
bpo-44525: Copy free variables in bytecode to allow calls to inner functions to be specialized (GH-29595)
* Make internal APIs that take PyFrameConstructor take a PyFunctionObject instead. * Add reference to function to frame, borrow references to builtins and globals. * Add COPY_FREE_VARS instruction to allow specialization of calls to inner functions.
This commit is contained in:
parent
d82f2caf94
commit
135cabd328
25 changed files with 268 additions and 156 deletions
|
@ -141,6 +141,8 @@ from test.support import (cpython_only,
|
|||
check_impl_detail, requires_debug_ranges,
|
||||
gc_collect)
|
||||
from test.support.script_helper import assert_python_ok
|
||||
from opcode import opmap
|
||||
COPY_FREE_VARS = opmap['COPY_FREE_VARS']
|
||||
|
||||
|
||||
def consts(t):
|
||||
|
@ -185,7 +187,7 @@ class CodeTest(unittest.TestCase):
|
|||
|
||||
def new_code(c):
|
||||
'''A new code object with a __class__ cell added to freevars'''
|
||||
return c.replace(co_freevars=c.co_freevars + ('__class__',))
|
||||
return c.replace(co_freevars=c.co_freevars + ('__class__',), co_code=bytes([COPY_FREE_VARS, 1])+c.co_code)
|
||||
|
||||
def add_foreign_method(cls, name, f):
|
||||
code = new_code(f.__code__)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue