if block_name == 'if':\r
return parse_block_if(ast)\r
\r
+ if block_name == 'macro':\r
+ return parse_block_macro(ast)\r
+\r
if block_name == 'set':\r
return parse_block_set(ast)\r
\r
lineno=lineno_from_parseinfo(ast['parseinfo'])\r
)\r
\r
+def parse_block_macro(ast):\r
+ definition = parse_variable(ast['start']['parameters'][0]['value'])\r
+ name = definition.node.name\r
+ params = []\r
+ defaults = []\r
+ body = parse(ast['contents'])\r
+\r
+ for arg in definition.args:\r
+ params.append(arg)\r
+\r
+ for kwarg in definition.kwargs:\r
+ params.append(\r
+ nodes.Name(kwarg.key, "load")\r
+ )\r
+ defaults.append(kwarg.value)\r
+\r
+ return nodes.Macro(\r
+ name,\r
+ params,\r
+ defaults,\r
+ body,\r
+ lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+ )\r
+\r
def parse_block_set(ast):\r
if 'block' in ast:\r
assignment = ast['block']['parameters'][0]\r