Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ExpressionParser.php

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

Twig

Code

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);
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal