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