6
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
|
# File 'lib/twig/token_parser/yield.rb', line 6
def parse(token)
stream = parser.stream
lineno = token.lineno
expr = parser.parse_expression
arguments = []
stream.expect(Token::NAME_TYPE, 'do')
if stream.next_if(Token::OPERATOR_TYPE, '|')
until stream.test(Token::OPERATOR_TYPE, '|')
unless arguments.empty?
stream.expect(Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma')
end
arguments.push(stream.expect(Token::NAME_TYPE).value)
end
stream.expect(Token::OPERATOR_TYPE, '|')
end
stream.expect(Token::BLOCK_END_TYPE)
body = parser.subparse(method(:decide_yield_end), drop_needle: true)
stream.expect(Token::BLOCK_END_TYPE)
if expr.is_a?(Node::Expression::Variable::Context)
expr = Node::Expression::HelperMethod.new(
expr.attributes[:name],
Node::Nodes.new({}),
lineno
)
end
Node::Yield.new(expr, body, arguments, lineno)
end
|