Fixed a bug with the loop context of a for loop if the iterator passed has a volatile `__len__` like the listreverseiterator. `else` in inline if-expressions is optional now.
--HG--
branch : trunk
diff --git a/jinja2/parser.py b/jinja2/parser.py
index 1e43ed8..d365d4c 100644
--- a/jinja2/parser.py
+++ b/jinja2/parser.py
@@ -307,8 +307,10 @@
expr1 = self.parse_or()
while self.stream.skip_if('name:if'):
expr2 = self.parse_or()
- self.stream.expect('name:else')
- expr3 = self.parse_condexpr()
+ if self.stream.skip_if('name:else'):
+ expr3 = self.parse_condexpr()
+ else:
+ expr3 = None
expr1 = nodes.CondExpr(expr2, expr1, expr3, lineno=lineno)
lineno = self.stream.current.lineno
return expr1