From 00d5d2149af1593d791f9cbd3a7c9df9eec85d4e Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Sun, 13 Apr 2008 01:10:18 +0200 Subject: some more stuff for jinja2 --HG-- branch : trunk --- jinja2/optimizer.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'jinja2/optimizer.py') diff --git a/jinja2/optimizer.py b/jinja2/optimizer.py index bd97fa0..d2550f4 100644 --- a/jinja2/optimizer.py +++ b/jinja2/optimizer.py @@ -95,6 +95,32 @@ class Optimizer(NodeTransformer): finally: context.pop() + def visit_FilterBlock(self, node, context): + """Try to filter a block at compile time.""" + node = self.generic_visit(node, context) + context.push() + + # check if we can evaluate the wrapper body into a string + # at compile time + buffer = [] + for child in node.body: + if not isinstance(child, nodes.Output): + return node + for item in child.optimized_nodes(): + if isinstance(item, nodes.Node): + return node + buffer.append(item) + + # now check if we can evaluate the filter at compile time. + try: + data = node.filter.as_const(u''.join(buffer)) + except nodes.Impossible: + return node + + context.pop() + const = nodes.Const(data, lineno=node.lineno) + return nodes.Output([const], lineno=node.lineno) + def visit_For(self, node, context): """Loop unrolling for iterable constant values.""" try: -- cgit v1.2.1