You are here

public function Twig_Node_Set::compile in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/twig/twig/lib/Twig/Node/Set.php \Twig_Node_Set::compile()

Compiles the node to PHP.

Parameters

Twig_Compiler $compiler A Twig_Compiler instance:

Overrides Twig_Node::compile

File

vendor/twig/twig/lib/Twig/Node/Set.php, line 39

Class

Twig_Node_Set
Represents a set node.

Code

public function compile(Twig_Compiler $compiler) {
  $compiler
    ->addDebugInfo($this);
  if (count($this
    ->getNode('names')) > 1) {
    $compiler
      ->write('list(');
    foreach ($this
      ->getNode('names') as $idx => $node) {
      if ($idx) {
        $compiler
          ->raw(', ');
      }
      $compiler
        ->subcompile($node);
    }
    $compiler
      ->raw(')');
  }
  else {
    if ($this
      ->getAttribute('capture')) {
      $compiler
        ->write("ob_start();\n")
        ->subcompile($this
        ->getNode('values'));
    }
    $compiler
      ->subcompile($this
      ->getNode('names'), false);
    if ($this
      ->getAttribute('capture')) {
      $compiler
        ->raw(" = ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())");
    }
  }
  if (!$this
    ->getAttribute('capture')) {
    $compiler
      ->raw(' = ');
    if (count($this
      ->getNode('names')) > 1) {
      $compiler
        ->write('array(');
      foreach ($this
        ->getNode('values') as $idx => $value) {
        if ($idx) {
          $compiler
            ->raw(', ');
        }
        $compiler
          ->subcompile($value);
      }
      $compiler
        ->raw(')');
    }
    else {
      if ($this
        ->getAttribute('safe')) {
        $compiler
          ->raw("('' === \$tmp = ")
          ->subcompile($this
          ->getNode('values'))
          ->raw(") ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())");
      }
      else {
        $compiler
          ->subcompile($this
          ->getNode('values'));
      }
    }
  }
  $compiler
    ->raw(";\n");
}