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

Breadcrumb

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

function ArrayExpression::compile

Overrides Node::compile

2 calls to ArrayExpression::compile()
VariadicExpression::compile in vendor/twig/twig/src/Node/Expression/VariadicExpression.php
VariadicExpression::compile in vendor/twig/twig/src/Node/Expression/VariadicExpression.php
1 method overrides ArrayExpression::compile()
VariadicExpression::compile in vendor/twig/twig/src/Node/Expression/VariadicExpression.php

File

vendor/twig/twig/src/Node/Expression/ArrayExpression.php, line 68

Class

ArrayExpression

Namespace

Twig\Node\Expression

Code

public function compile(Compiler $compiler) : void {
    $keyValuePairs = $this->getKeyValuePairs();
    $needsArrayMergeSpread = \PHP_VERSION_ID < 80100 && $this->hasSpreadItem($keyValuePairs);
    if ($needsArrayMergeSpread) {
        $compiler->raw('CoreExtension::merge(');
    }
    $compiler->raw('[');
    $first = true;
    $reopenAfterMergeSpread = false;
    $nextIndex = 0;
    foreach ($keyValuePairs as $pair) {
        if ($reopenAfterMergeSpread) {
            $compiler->raw(', [');
            $reopenAfterMergeSpread = false;
        }
        if ($needsArrayMergeSpread && $pair['value']->hasAttribute('spread')) {
            $compiler->raw('], ')
                ->subcompile($pair['value']);
            $first = true;
            $reopenAfterMergeSpread = true;
            continue;
        }
        if (!$first) {
            $compiler->raw(', ');
        }
        $first = false;
        if ($pair['value']->hasAttribute('spread') && !$needsArrayMergeSpread) {
            $compiler->raw('...')
                ->subcompile($pair['value']);
            ++$nextIndex;
        }
        else {
            $key = null;
            if ($pair['key'] instanceof NameExpression) {
                $pair['key'] = new StringCastUnary($pair['key'], $pair['key']->getTemplateLine());
            }
            if ($pair['key'] instanceof TempNameExpression) {
                $key = $pair['key']->getAttribute('name');
                $pair['key'] = new ConstantExpression($key, $pair['key']->getTemplateLine());
            }
            if ($pair['key'] instanceof ConstantExpression) {
                $key = $pair['key']->getAttribute('value');
            }
            if ($nextIndex !== $key) {
                if (\is_int($key)) {
                    $nextIndex = $key + 1;
                }
                $compiler->subcompile($pair['key'])
                    ->raw(' => ');
            }
            else {
                ++$nextIndex;
            }
            $compiler->subcompile($pair['value']);
        }
    }
    if (!$reopenAfterMergeSpread) {
        $compiler->raw(']');
    }
    if ($needsArrayMergeSpread) {
        $compiler->raw(')');
    }
}
RSS feed
Powered by Drupal