def make_list_comp(self, get_iter, for_iter):
block = self.make_block(for_iter.to, inclusive=False, raise_=False)
jump_abs = block.pop()
assert jump_abs.opname == 'JUMP_ABSOLUTE', jump_abs.opname
jump_map = {for_iter.i:for_iter.to}
stmnts = self.decompile_block(block, stack_items=[None], jump_map=jump_map).stmnt()
if len(stmnts) > 1:
assign = stmnts.pop(0)
assert len(stmnts) == 1
assert isinstance(assign, _ast.Assign)
list_expr = self.ast_stack.pop()
# empty ast.List object
list_ = self.ast_stack.pop()
ifs = []
elt = refactor_ifs(stmnts[0], ifs)
assert len(assign.targets) == 1
generators = [_ast.comprehension(target=assign.targets[0], iter=list_expr, ifs=ifs, lineno=get_iter.lineno, col_offset=0)]
if isinstance(list_, _ast.Assign):
comp = _ast.comprehension(target=list_.targets[0], iter=None, ifs=ifs, lineno=get_iter.lineno, col_offset=0)
generators.insert(0, comp)
list_comp = _ast.ListComp(elt=elt, generators=generators, lineno=get_iter.lineno, col_offset=0)
else:
list_expr = self.ast_stack.pop()
list_comp = stmnts[0]
generators = list_comp.generators
# empty ast.List object
list_ = self.ast_stack.pop()
if not isinstance(list_, _ast.Assign):
comp = _ast.comprehension(target=list_.targets[0], iter=None, ifs=[], lineno=get_iter.lineno, col_offset=0)
generators.insert(0, comp)
generators[0].iter = list_expr
self.ast_stack.append(list_comp)
评论列表
文章目录