From 9dbad2d5829521ff9f5ee6dfa969aa3043144ea7 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Sun, 19 Feb 2017 16:42:39 -0600 Subject: [PATCH] Actually use topological sort in code printing --- grudge/symbolic/compiler.py | 51 ++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/grudge/symbolic/compiler.py b/grudge/symbolic/compiler.py index 47822baa..3636d775 100644 --- a/grudge/symbolic/compiler.py +++ b/grudge/symbolic/compiler.py @@ -370,38 +370,37 @@ class Code(object): for insn in self.instructions for var_name in insn.get_assignees()) - if 1: - # {{{ topological sort - - added_insns = set() - ordered_insns = [] - - def insert_insn(insn): - if insn in added_insns: - return - - for dep in insn.get_dependencies(): - try: - writer = var_to_writer[dep.name] - except KeyError: - # input variables won't be found - pass - else: - insert_insn(writer) + # {{{ topological sort - ordered_insns.append(insn) - added_insns.add(insn) + added_insns = set() + ordered_insns = [] - for insn in self.instructions: - insert_insn(insn) + def insert_insn(insn): + if insn in added_insns: + return - assert len(ordered_insns) == len(self.instructions) - assert len(added_insns) == len(self.instructions) + for dep in insn.get_dependencies(): + try: + writer = var_to_writer[dep.name] + except KeyError: + # input variables won't be found + pass + else: + insert_insn(writer) - # }}} + ordered_insns.append(insn) + added_insns.add(insn) - lines = [] for insn in self.instructions: + insert_insn(insn) + + assert len(ordered_insns) == len(self.instructions) + assert len(added_insns) == len(self.instructions) + + # }}} + + lines = [] + for insn in ordered_insns: lines.extend(str(insn).split("\n")) lines.append("RESULT: " + str(self.result)) -- GitLab