def _build_cfg(statements):
enter = id(statements[0])
exits = [enter]
graph = Graph()
jumps = Jumps()
for i, node in enumerate(statements):
cfg = _build_node_cfg(node)
graph.update(cfg.graph)
if i > 0:
for exit_ in exits:
graph.add_edge(exit_, cfg.enter)
exits = cfg.exits
jumps = jumps.join(cfg.jumps)
if type(node) in (ast.Break, ast.Continue, ast.Return):
# Issue a warning about unreachable code?
break
return ControlFlowSubgraph(graph, enter, exits=exits, jumps=jumps)
评论列表
文章目录