Home | History | Annotate | Download | only in Compiler

Lines Matching refs:flow

36     """Control flow graph node. Sequence of assignments and name references.
103 """Control-flow graph.
477 def __init__(self, name, flow):
479 self.flow = flow
483 for block in self.flow.blocks:
496 for block in self.flow.blocks:
523 def check_definitions(flow, compiler_directives):
524 flow.initialize()
525 flow.reaching_definitions()
533 for block in flow.blocks:
536 i_assmts = flow.assmts[stat.entry]
537 state = flow.map_one(i_state, stat.entry)
634 for entry in flow.entries:
685 self.flow = ControlFlow()
688 check_definitions(self.flow, self.current_directives)
707 self.stack.append(self.flow)
708 self.flow = ControlFlow()
712 if self.flow.is_tracked(entry):
713 self.flow.entries.add(entry)
717 self.flow.nextblock()
722 self.flow.mark_argument(node.star_arg,
727 self.flow.mark_argument(node.starstar_arg,
737 if self.flow.block:
738 self.flow.block.add_child(self.flow.exit_point)
741 self.flow.normalize()
742 check_definitions(self.flow, self.current_directives)
743 self.flow.blocks.add(self.flow.entry_point)
745 self.gv_ctx.add(GV(node.local_scope.name, self.flow))
747 self.flow = self.stack.pop()
762 if not self.flow.block:
764 if self.flow.exceptions:
765 exc_descr = self.flow.exceptions[-1]
766 self.flow.block.add_child(exc_descr.entry_point)
767 self.flow.nextblock()
778 self.flow.mark_assignment(lhs, rhs, entry)
785 if self.flow.exceptions:
786 exc_descr = self.flow.exceptions[-1]
787 self.flow.block.add_child(exc_descr.entry_point)
788 self.flow.nextblock()
793 self.flow.mark_position(node)
842 self.flow.mark_deletion(arg, entry)
851 self.flow.mark_argument(
856 if self.flow.block:
859 self.flow.mark_reference(node, entry)
868 if self.flow.block:
871 if not self.flow.block:
882 next_block = self.flow.newblock()
883 parent = self.flow.block
886 parent = self.flow.nextblock(parent)
888 self.flow.nextblock()
890 if self.flow.block:
891 self.flow.block.add_child(next_block)
894 self.flow.nextblock(parent=parent)
896 if self.flow.block:
897 self.flow.block.add_child(next_block)
902 self.flow.block = next_block
904 self.flow.block = None
908 condition_block = self.flow.nextblock()
909 next_block = self.flow.newblock()
911 self.flow.loops.append(LoopDescr(next_block, condition_block))
915 self.flow.nextblock()
917 self.flow.loops.pop()
919 if self.flow.block:
920 self.flow.block.add_child(condition_block)
921 self.flow.block.add_child(next_block)
924 self.flow.nextblock(parent=condition_block)
926 if self.flow.block:
927 self.flow.block.add_child(next_block)
932 self.flow.block = next_block
934 self.flow.block = None
989 condition_block = self.flow.nextblock()
990 next_block = self.flow.newblock()
992 self.flow.loops.append(LoopDescr(next_block, condition_block))
995 self.flow.nextblock()
1007 self.flow.nextblock()
1009 self.flow.loops.pop()
1012 if self.flow.block:
1013 self.flow.block.add_child(condition_block)
1016 self.flow.nextblock(parent=condition_block)
1018 if self.flow.block:
1019 self.flow.block.add_child(next_block)
1024 self.flow.block = next_block
1026 self.flow.block = None
1032 self.flow.mark_deletion(private_node, private_node.entry)
1064 condition_block = self.flow.nextblock()
1065 next_block = self.flow.newblock()
1067 self.flow.loops.append(LoopDescr(next_block, condition_block))
1073 self.flow.nextblock()
1080 self.flow.nextblock()
1082 self.flow.loops.pop()
1084 if self.flow.block:
1085 self.flow.block.add_child(condition_block)
1088 self.flow.nextblock(parent=condition_block)
1090 if self.flow.block:
1091 self.flow.block.add_child(next_block)
1096 self.flow.block = next_block
1098 self.flow.block = None
1116 next_block = self.flow.newblock()
1118 self.flow.newblock()
1120 entry_point = self.flow.newblock()
1121 self.flow.exceptions.append(ExceptionDescr(entry_point))
1122 self.flow.nextblock()
1125 self.flow.block.add_child(entry_point)
1126 self.flow.nextblock()
1128 self.flow.exceptions.pop()
1131 if self.flow.block:
1133 self.flow.nextblock()
1135 if self.flow.block:
1136 self.flow.block.add_child(next_block)
1139 self.flow.block = entry_point
1146 entry_point = self.flow.newblock(parent=self.flow.block)
1147 self.flow.nextblock()
1151 if self.flow.block:
1152 self.flow.block.add_child(next_block)
1154 if self.flow.exceptions:
1155 entry_point.add_child(self.flow.exceptions[-1].entry_point)
1158 self.flow.block = next_block
1160 self.flow.block = None
1164 body_block = self.flow.nextblock()
1167 entry_point = self.flow.newblock()
1168 self.flow.block = entry_point
1171 if self.flow.block and self.flow.exceptions:
1172 self.flow.block.add_child(self.flow.exceptions[-1].entry_point)
1175 finally_enter = self.flow.newblock()
1176 self.flow.block = finally_enter
1178 finally_exit = self.flow.block
1181 self.flow.exceptions.append(descr)
1182 if self.flow.loops:
1183 self.flow.loops[-1].exceptions.append(descr)
1184 self.flow.block = body_block
1187 self.flow.nextblock()
1189 self.flow.exceptions.pop()
1190 if self.flow.loops:
1191 self.flow.loops[-1].exceptions.pop()
1193 if self.flow.block:
1194 self.flow.block.add_child(finally_enter)
1196 self.flow.block = self.flow.nextblock(parent=finally_exit)
1198 self.flow.block = None
1204 if self.flow.exceptions:
1205 self.flow.block.add_child(self.flow.exceptions[-1].entry_point)
1206 self.flow.block = None
1211 if self.flow.exceptions:
1212 self.flow.block.add_child(self.flow.exceptions[-1].entry_point)
1213 self.flow.block = None
1220 for exception in self.flow.exceptions[::-1]:
1222 self.flow.block.add_child(exception.finally_enter)
1224 exception.finally_exit.add_child(self.flow.exit_point)
1227 if self.flow.block:
1228 self.flow.block.add_child(self.flow.exit_point)
1229 self.flow.block = None
1233 if not self.flow.loops:
1236 loop = self.flow.loops[-1]
1240 self.flow.block.add_child(exception.finally_enter)
1245 self.flow.block.add_child(loop.next_block)
1246 self.flow.block = None
1250 if not self.flow.loops:
1253 loop = self.flow.loops[-1]
1257 self.flow.block.add_child(exception.finally_enter)
1262 self.flow.block.add_child(loop.loop_block)
1263 self.flow.block = None
1288 self.flow.mark_assignment(node.target, object_expr_not_none,
1292 self.flow.nextblock()
1294 self.flow.nextblock()