]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Support chained comparisons in parser
authorKevin Brown <kevin@kevin-brown.com>
Fri, 15 May 2020 14:32:07 +0000 (10:32 -0400)
committerKevin Brown <kevin@kevin-brown.com>
Fri, 15 May 2020 14:32:07 +0000 (10:32 -0400)
grammar.ebnf
src/jinja2/new_parser.py

index b7ddf63c00045d8c0254ea18adb257d90a415e7a..11d26e6ec68df0eb96b41abb0d3cc726f68636a6 100644 (file)
@@ -332,7 +332,7 @@ conditional_expression_operator
     | (\r
         left:variable_identifier\r
         {SP}* operator:conditional_expression_operator_operations {SP}*\r
-        right:variable_identifier\r
+        right:conditional_expression\r
     )\r
     ;\r
 \r
index eb7634642eeaf395d046feacf2b7c2bd5580b72b..47c0b446f797e462c305f53a46301805cd0e265d 100644 (file)
@@ -539,14 +539,32 @@ def parse_conditional_expression_operator(ast):
         '<=': 'lteq',\r
     }\r
 \r
-    return nodes.Compare(\r
-        parse_variable(ast['left']),\r
-        [\r
+    expr = parse_variable(ast['left'])\r
+    operator = operand_map.get(ast['operator'], ast['operator'])\r
+    operands = []\r
+\r
+    right = parse_conditional_expression(ast['right'])\r
+\r
+    if isinstance(right, nodes.Compare):\r
+        operands.append(\r
             nodes.Operand(\r
-                operand_map.get(ast['operator'], ast['operator']),\r
-                parse_variable(ast['right'])\r
+                operator,\r
+                right.expr\r
             )\r
-        ],\r
+        )\r
+        operands.extend(right.ops)\r
+    else:\r
+\r
+        operands.append(\r
+            nodes.Operand(\r
+                operator,\r
+                right\r
+            )\r
+        )\r
+\r
+    return nodes.Compare(\r
+        expr,\r
+        operands,\r
         lineno=lineno_from_parseinfo(ast['parseinfo'])\r
     )\r
 \r