\r
variable_identifier_raw\r
=\r
+ [ signed:( "-" | "+" ) ]\r
variable:( LITERAL | IDENTIFIER )\r
accessors:{ variable_accessor }*\r
{ {SP}* filters+:variable_filter }*\r
NUMBER_LITERAL\r
=\r
literal_type:`number`\r
- whole:SIGNED_INTEGER_LITERAL\r
+ whole:INTEGER_LITERAL\r
[ "." fractional:INTEGER_LITERAL ]\r
[ ( "e" | "E" ) exponent:SIGNED_INTEGER_LITERAL ]\r
;\r
target = parse_variable(block_parameters[0]['value'], variable_context='store')\r
iter = parse_variable(block_parameters[2]['value'])\r
\r
+ if not isinstance(target, (nodes.Name, nodes.Tuple)):\r
+ raise TemplateSyntaxError(\r
+ "expected token 'in'",\r
+ lineno=target.lineno\r
+ )\r
+\r
if len(block_parameters) > 3:\r
if block_parameters[3]['value']['variable'] == 'if':\r
test = parse_conditional_expression(block_parameters[4]['value'])\r
for accessor_ast in ast['accessors']:\r
node = parse_variable_accessor(node, accessor_ast)\r
\r
+ signed_node_map = {\r
+ '-': nodes.Neg,\r
+ '+': nodes.Pos,\r
+ }\r
+\r
+ if 'signed' in ast:\r
+ node_class = signed_node_map[ast['signed']]\r
+\r
+ node = node_class(node)\r
+\r
if ast['filters']:\r
for filter_ast in ast['filters']:\r
node = parse_variable_filter(node, filter_ast)\r