def MAKE_FUNCTION(self, instr):
code = self.ast_stack.pop()
ndefaults = bitrange(instr.oparg, 0, 8)
nkwonly_defaults = bitrange(instr.oparg, 8, 16)
nannotations = bitrange(instr.oparg, 16, 32) - 1
annotations = []
for i in range(nannotations):
annotations.insert(0, self.ast_stack.pop())
kw_defaults = []
for i in range(nkwonly_defaults * 2):
kw_defaults.insert(0, self.ast_stack.pop())
defaults = []
for i in range(ndefaults):
defaults.insert(0, self.ast_stack.pop())
function = make_function(code, defaults, lineno=instr.lineno, annotations=annotations, kw_defaults=kw_defaults)
doc = code.co_consts[0] if code.co_consts else None
if isinstance(doc, str):
function.body.insert(0, _ast.Expr(value=_ast.Str(s=doc, lineno=instr.lineno, col_offset=0),
lineno=instr.lineno, col_offset=0))
self.ast_stack.append(function)
评论列表
文章目录