MCPcopy Index your code
hub / github.com/python/mypy / transform_blocks

Method transform_blocks

mypyc/transform/ir_transform.py:79–106  ·  view source on GitHub ↗

Transform basic blocks that represent a single function. The result of the transform will be collected at self.builder.blocks.

(self, blocks: list[BasicBlock])

Source from the content-addressed store, hash-verified

77 self.op_map: dict[Value, Value | None] = {}
78
79 def transform_blocks(self, blocks: list[BasicBlock]) -> None:
80 """Transform basic blocks that represent a single function.
81
82 The result of the transform will be collected at self.builder.blocks.
83 """
84 block_map: dict[BasicBlock, BasicBlock] = {}
85 op_map = self.op_map
86 empties = set()
87 for block in blocks:
88 new_block = BasicBlock()
89 block_map[block] = new_block
90 self.builder.activate_block(new_block)
91 new_block.error_handler = block.error_handler
92 for op in block.ops:
93 new_op = op.accept(self)
94 if new_op is not op:
95 op_map[op] = new_op
96 # A transform can produce empty blocks which can be removed.
97 if is_empty_block(new_block) and not is_empty_block(block):
98 empties.add(new_block)
99 self.builder.blocks = [block for block in self.builder.blocks if block not in empties]
100 # Update all op/block references to point to the transformed ones.
101 patcher = PatchVisitor(op_map, block_map)
102 for block in self.builder.blocks:
103 for op in block.ops:
104 op.accept(patcher)
105 if block.error_handler is not None:
106 block.error_handler = block_map.get(block.error_handler, block.error_handler)
107
108 def add(self, op: Op) -> Value:
109 return self.builder.add(op)

Callers 4

do_copy_propagationFunction · 0.80
lower_irFunction · 0.80
do_flag_eliminationFunction · 0.80

Calls 8

BasicBlockClass · 0.90
setClass · 0.85
is_empty_blockFunction · 0.85
PatchVisitorClass · 0.85
activate_blockMethod · 0.45
acceptMethod · 0.45
addMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected