]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Parse arguments to calls
authorKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 16:54:08 +0000 (12:54 -0400)
committerKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 16:54:08 +0000 (12:54 -0400)
This can be combined with the logic for parsing arguments to filters
then they both generate the same AST.

new_parser.py

index 3bfedb363526aaac960e2f3a90b6e1826c3ec340..1dbd839d6632cdbfbe6eb5ca19bbd8b5013213b7 100644 (file)
@@ -256,9 +256,7 @@ def parse_variable_accessor(node, ast):
         accessor_node = nodes.Getattr()\r
         accessor_node.attr = ast['parameter']\r
     elif accessor_type == 'call':\r
-        accessor_node = nodes.Call()\r
-        accessor_node.args = []\r
-        accessor_node.kwargs = []\r
+        accessor_node = parse_variable_accessor_call(ast)\r
 \r
     accessor_node.node = node\r
     accessor_node.ctx = "load"\r
@@ -266,6 +264,31 @@ def parse_variable_accessor(node, ast):
 \r
     return accessor_node\r
 \r
+def parse_variable_accessor_call(ast):\r
+    args = []\r
+    kwargs = []\r
+    dynamic_args = None\r
+    dynamic_kwargs = None\r
+\r
+    if ast['parameters']:\r
+        for argument in ast['parameters']:\r
+            value = parse_variable(argument['value'])\r
+\r
+            if 'key' in argument:\r
+                kwargs.append(\r
+                    nodes.Keyword(argument['key'], value)\r
+                )\r
+            else:\r
+                args.append(value)\r
+\r
+    node = nodes.Call()\r
+    node.args = args\r
+    node.kwargs = kwargs\r
+    node.dyn_args = dynamic_args\r
+    node.dyn_kwargs = dynamic_kwargs\r
+\r
+    return node\r
+\r
 def parse_variable_filter(node, ast):\r
     args = []\r
     kwargs = []\r