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

Breadcrumb

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

function WithNode::compile

Overrides Node::compile

File

vendor/twig/twig/src/Node/WithNode.php, line 35

Class

WithNode
Represents a nested "with" scope.

Namespace

Twig\Node

Code

public function compile(Compiler $compiler) : void {
    $compiler->addDebugInfo($this);
    $parentContextName = $compiler->getVarName();
    $compiler->write(\sprintf("\$%s = \$context;\n", $parentContextName));
    if ($this->hasNode('variables')) {
        $node = $this->getNode('variables');
        $varsName = $compiler->getVarName();
        $compiler->write(\sprintf('$%s = ', $varsName))
            ->subcompile($node)
            ->raw(";\n")
            ->write(\sprintf("if (!is_iterable(\$%s)) {\n", $varsName))
            ->indent()
            ->write("throw new RuntimeError('Variables passed to the \"with\" tag must be a mapping.', ")
            ->repr($node->getTemplateLine())
            ->raw(", \$this->getSourceContext());\n")
            ->outdent()
            ->write("}\n")
            ->write(\sprintf("\$%s = CoreExtension::toArray(\$%s);\n", $varsName, $varsName));
        if ($this->getAttribute('only')) {
            $compiler->write("\$context = [];\n");
        }
        $compiler->write(\sprintf("\$context = \$%s + \$context + \$this->env->getGlobals();\n", $varsName));
    }
    $compiler->subcompile($this->getNode('body'))
        ->write(\sprintf("\$context = \$%s;\n", $parentContextName));
}
RSS feed
Powered by Drupal