]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Add support for dot accessors to be numbers
authorKevin Brown <kevin@kevin-brown.com>
Fri, 15 May 2020 21:07:10 +0000 (17:07 -0400)
committerKevin Brown <kevin@kevin-brown.com>
Fri, 15 May 2020 21:07:10 +0000 (17:07 -0400)
This is an interesting special case in the old parser where numbers
are allowed as dot accessors, but they are specifically convertred
to being an item accessor during the parsing phase. We now support
numbers being parsed for dot accessors in the new parser.

grammar.ebnf
src/jinja2/new_parser.py

index 6d2661083995369dd16fa26bbf9cc1021831a7b0..7b498b55b47b13a70f20c265e090bd40c1362345 100644 (file)
@@ -233,7 +233,7 @@ variable_accessor_call
 variable_accessor_dot\r
     =\r
     accessor_type:`dot`\r
-    "." parameter:IDENTIFIER\r
+    "." parameter:( IDENTIFIER | NUMBER_LITERAL )\r
     ;\r
 \r
 variable_accessor_call_parameters\r
index 1aac567f4c6c08a272e561bcd34a0c2738e2b8dc..56e100c9a660abcbb49b4acf6f3669ff2a198537 100644 (file)
@@ -801,8 +801,12 @@ def parse_variable_accessor(node, ast):
         accessor_node = nodes.Getitem()\r
         accessor_node.arg = parse_variable(ast['parameter'])\r
     elif accessor_type == 'dot':\r
-        accessor_node = nodes.Getattr()\r
-        accessor_node.attr = ast['parameter']\r
+        if isinstance(ast['parameter'], str):\r
+            accessor_node = nodes.Getattr()\r
+            accessor_node.attr = ast['parameter']\r
+        else:\r
+            accessor_node = nodes.Getitem()\r
+            accessor_node.arg = parse_literal(ast['parameter'])\r
     elif accessor_type == 'call':\r
         accessor_node = parse_variable_accessor_call(ast)\r
 \r