lister.visit(node)
return lister.output_list
+def resort_statements(ol):
+ return [statement for i, statement in
+ sorted(ol, key=lambda x: x[0])]
+
def group_by_targets(sl):
groups = []
- for statement in flat_iteration(sl):
+ for statement_order, statement in enumerate(flat_iteration(sl)):
targets = list_targets(statement)
- processed = False
- for g in groups:
- if not targets.isdisjoint(g[0]):
- g[0].update(targets)
- g[1].append(statement)
- processed = True
- break
- if not processed:
- groups.append((targets, [statement]))
- return groups
+
+ chk_groups = [(targets.isdisjoint(g[0]), g) for g in groups]
+ merge_groups = [g for dj, g in chk_groups if not dj]
+ groups = [g for dj, g in chk_groups if dj]
+
+ new_group = (set(targets), [(statement_order, statement)])
+
+ for g in merge_groups:
+ new_group[0].update(g[0])
+ new_group[1].extend(g[1])
+
+ groups.append(new_group)
+
+ return [(target, resort_statements(stmts))
+ for target, stmts in groups]
def list_special_ios(f, ins, outs, inouts):
r = set()