function ExpressionParser::parseArrow
Return value
1 call to ExpressionParser::parseArrow()
- ExpressionParser::parseExpression in vendor/
twig/ twig/ src/ ExpressionParser.php
File
-
vendor/
twig/ twig/ src/ ExpressionParser.php, line 180
Class
- ExpressionParser
- Parses expressions.
Namespace
TwigCode
private function parseArrow() {
$stream = $this->parser
->getStream();
// short array syntax (one argument, no parentheses)?
if ($stream->look(1)
->test(Token::ARROW_TYPE)) {
$line = $stream->getCurrent()
->getLine();
$token = $stream->expect(Token::NAME_TYPE);
$names = [
new AssignContextVariable($token->getValue(), $token->getLine()),
];
$stream->expect(Token::ARROW_TYPE);
return new ArrowFunctionExpression($this->parseExpression(), new Nodes($names), $line);
}
// first, determine if we are parsing an arrow function by finding => (long form)
$i = 0;
if (!$stream->look($i)
->test(Token::PUNCTUATION_TYPE, '(')) {
return null;
}
++$i;
while (true) {
// variable name
++$i;
if (!$stream->look($i)
->test(Token::PUNCTUATION_TYPE, ',')) {
break;
}
++$i;
}
if (!$stream->look($i)
->test(Token::PUNCTUATION_TYPE, ')')) {
return null;
}
++$i;
if (!$stream->look($i)
->test(Token::ARROW_TYPE)) {
return null;
}
// yes, let's parse it properly
$token = $stream->expect(Token::PUNCTUATION_TYPE, '(');
$line = $token->getLine();
$names = [];
while (true) {
$token = $stream->expect(Token::NAME_TYPE);
$names[] = new AssignContextVariable($token->getValue(), $token->getLine());
if (!$stream->nextIf(Token::PUNCTUATION_TYPE, ',')) {
break;
}
}
$stream->expect(Token::PUNCTUATION_TYPE, ')');
$stream->expect(Token::ARROW_TYPE);
return new ArrowFunctionExpression($this->parseExpression(), new Nodes($names), $line);
}