]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Fix template errors with empty blocks.
authorBen Darnell <ben@bendarnell.com>
Mon, 27 Aug 2012 01:03:12 +0000 (18:03 -0700)
committerBen Darnell <ben@bendarnell.com>
Mon, 27 Aug 2012 01:03:12 +0000 (18:03 -0700)
Emits a "pass" statement in every generated block whether it's empty or not;
I verified with the disassembler that the unnecessary pass statements
don't generate extra bytecodes.

Closes #546.

tornado/template.py
tornado/test/template_test.py

index 13eb7808131fc7e7ec465dd31e74118861d34c12..14306d9a529032f60780e6f94d55ad58df317417 100644 (file)
@@ -501,6 +501,8 @@ class _ControlBlock(_Node):
         writer.write_line("%s:" % self.statement, self.line)
         with writer.indent():
             self.body.generate(writer)
+            # Just in case the body was empty
+            writer.write_line("pass", self.line)
 
 
 class _IntermediateControlBlock(_Node):
@@ -509,6 +511,8 @@ class _IntermediateControlBlock(_Node):
         self.line = line
 
     def generate(self, writer):
+        # In case the previous block was empty
+        writer.write_line("pass", self.line)
         writer.write_line("%s:" % self.statement, self.line, writer.indent_size() - 1)
 
 
index a4b9453b7a2da8c6b6c25758d966ce64c5f3ee08..6e14abb92d0853bcbe89c85979e90bdc66a361e4 100644 (file)
@@ -101,6 +101,10 @@ class TemplateTest(LogTrapTestCase):
         self.assertEqual(template.generate(x=5), b("yes"))
         self.assertEqual(template.generate(x=3), b("no"))
 
+    def test_if_empty_body(self):
+        template = Template(utf8("{% if True %}{% else %}{% end %}"))
+        self.assertEqual(template.generate(), b(""))
+
     def test_try(self):
         template = Template(utf8("""{% try %}
 try{% set y = 1/x %}