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

Breadcrumb

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

function ExpressionParser::parseArrow

Return value

ArrowFunctionExpression|null

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

Twig

Code

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

API Navigation

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