7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/twig/expression_parser/prefix/grouping.rb', line 7
def parse(parser, token)
stream = parser.stream
expr = parser.parse_expression(precedence)
if stream.next_if(Token::PUNCTUATION_TYPE, ')')
unless stream.test(Token::OPERATOR_TYPE, '=>')
return expr.set_explicit_parentheses
end
return Node::Expression::Array.new(AutoHash.new.add(expr), token.lineno)
end
unless stream.test(Token::PUNCTUATION_TYPE, ',')
stream.expect(Token::PUNCTUATION_TYPE, ')', 'An opened parenthesis is not properly closed.')
end
names = AutoHash.new.add(expr)
loop do
if stream.next_if(Token::PUNCTUATION_TYPE, ')')
break
end
stream.expect(Token::PUNCTUATION_TYPE, ',')
token = stream.expect(Token::NAME_TYPE)
names << Node::Expression::Variable::Context.new(token.value, token.lineno)
end
unless stream.test(Token::OPERATOR_TYPE, '=>')
raise Error::Syntax.new(
'A list of variables must be followed by an arrow.',
stream.current.lineno,
stream.source
)
end
Node::Expression::Array.new(names, token.lineno)
end
|