summaryrefslogtreecommitdiff
path: root/jinja2/idtracking.py
diff options
context:
space:
mode:
authorAdrian Moennich <adrian@planetcoding.net>2017-08-22 22:59:57 +0200
committerAdrian Moennich <adrian@planetcoding.net>2017-08-22 23:12:09 +0200
commitcde2a54b87876bd02b283db2f52aca3d9272a92c (patch)
tree2cce6a0e6958fdb7d6c34cb9012f5216c2ab7d21 /jinja2/idtracking.py
parentd117425f5ed3f542100f20d3bf700ae7bc54039f (diff)
downloadjinja2-2.9-maintenance.tar.gz
Compile `elif` tag to `elif` instead of `else: if`2.9-maintenance
This avoids deep nesting in case of many `{% elif .. %}` blocks (which would fail during execution) and also deep recursion (which may fail during compilation) fixes #759
Diffstat (limited to 'jinja2/idtracking.py')
-rw-r--r--jinja2/idtracking.py3
1 files changed, 2 insertions, 1 deletions
diff --git a/jinja2/idtracking.py b/jinja2/idtracking.py
index 8479b72..30e348d 100644
--- a/jinja2/idtracking.py
+++ b/jinja2/idtracking.py
@@ -222,9 +222,10 @@ class FrameSymbolVisitor(NodeVisitor):
return rv
body_symbols = inner_visit(node.body)
+ elif_symbols = inner_visit(node.elif_)
else_symbols = inner_visit(node.else_ or ())
- self.symbols.branch_update([body_symbols, else_symbols])
+ self.symbols.branch_update([body_symbols, elif_symbols, else_symbols])
def visit_Macro(self, node, **kwargs):
self.symbols.store(node.name)