used the new nodetransformer to make mitsuhiko happy
authorChristoph Hack <christoph@tux21b.org>
Tue, 8 Apr 2008 21:01:58 +0000 (23:01 +0200)
committerChristoph Hack <christoph@tux21b.org>
Tue, 8 Apr 2008 21:01:58 +0000 (23:01 +0200)
--HG--
branch : trunk

jinja2/optimizer.py
test_optimizer.py

index b12b1f4bcea424dde35fd31102a802552ccd6388..c9787f655ea376ac89a42ac15db1897461c776b7 100644 (file)
@@ -8,7 +8,7 @@
         * eliminating constant nodes
         * evaluating filters and macros on constant nodes
         * unroll loops on constant values
-        * replace variables which are already known (because the doesn't
+        * replace variables which are already known (because they doesn't
           change often and you want to prerender a template) with constants
 
     After the optimation you will get a new, simplier template which can
@@ -24,27 +24,12 @@ from jinja2 import nodes
 from jinja2.visitor import NodeVisitor, NodeTransformer
 
 
-class Optimizer(NodeVisitor):
+class Optimizer(NodeTransformer):
 
     def __init__(self, environment, context={}):
         self.environment = environment
         self.context = context
 
-    def visit_Output(self, node):
-        node.nodes = [self.visit(n) for n in node.nodes]
-        return node
-
-    def visit_Template(self, node):
-        body = []
-        for n in node.body:
-            x = self.visit(n)
-            if isinstance(x, list):
-                body.extend(x)
-            else:
-                body.append(x)
-        node.body = body
-        return node
-
     def visit_Filter(self, node):
         """Try to evaluate filters if possible."""
         try:
@@ -77,10 +62,6 @@ class Optimizer(NodeVisitor):
             return node
         return nodes.Const(self.context[node.name])
 
-    def generic_visit(self, node, *args, **kwargs):
-        NodeVisitor.generic_visit(self, node, *args, **kwargs)
-        return node
-
 
 def optimize(node, environment):
     optimizer = Optimizer(environment)
index 73202432c4819a1fa899391b1afb5b0f3d459f98..e23d8621199d8b2fa236fd7fd5919c4c00c07f46 100644 (file)
@@ -8,8 +8,8 @@ ast = env.parse("""
     Hi {{ "<blub>"|e }},
     how are you?
 
-    {% for item in ('foo', 'bar', 'blub') %}
-        {{ item }}
+    {% for item in ('foo', 'bar', 'blub', '<42>') %}
+        {{ item|e }}
     {% endfor %}
 """)
 print ast