function ExpressionParser::parseSubscriptExpressionDot
1 call to ExpressionParser::parseSubscriptExpressionDot()
- ExpressionParser::parseSubscriptExpression in vendor/
twig/ twig/ src/ ExpressionParser.php
File
-
vendor/
twig/ twig/ src/ ExpressionParser.php, line 925
Class
- ExpressionParser
- Parses expressions.
Namespace
TwigCode
private function parseSubscriptExpressionDot(Node $node) : AbstractExpression {
$stream = $this->parser
->getStream();
$token = $stream->getCurrent();
$lineno = $token->getLine();
$arguments = new ArrayExpression([], $lineno);
$type = Template::ANY_CALL;
if ($stream->nextIf(Token::PUNCTUATION_TYPE, '(')) {
$attribute = $this->parseExpression();
$stream->expect(Token::PUNCTUATION_TYPE, ')');
}
else {
$token = $stream->next();
if (Token::NAME_TYPE == $token->getType() || Token::NUMBER_TYPE == $token->getType() || Token::OPERATOR_TYPE == $token->getType() && preg_match(Lexer::REGEX_NAME, $token->getValue())) {
$attribute = new ConstantExpression($token->getValue(), $token->getLine());
}
else {
throw new SyntaxError(\sprintf('Expected name or number, got value "%s" of type %s.', $token->getValue(), Token::typeToEnglish($token->getType())), $token->getLine(), $stream->getSourceContext());
}
}
if ($stream->test(Token::PUNCTUATION_TYPE, '(')) {
$type = Template::METHOD_CALL;
$arguments = $this->createArguments($token->getLine());
}
if ($node instanceof NameExpression && (null !== $this->parser
->getImportedSymbol('template', $node->getAttribute('name')) || '_self' === $node->getAttribute('name') && $attribute instanceof ConstantExpression)) {
return new MacroReferenceExpression(new TemplateVariable($node->getAttribute('name'), $node->getTemplateLine()), 'macro_' . $attribute->getAttribute('value'), $arguments, $node->getTemplateLine());
}
return new GetAttrExpression($node, $attribute, $arguments, $type, $lineno);
}