public function Twig_Node_Macro::compile

Compiles the node to PHP.

Parameters

Twig_Compiler A Twig_Compiler instance:

Overrides Twig_Node::compile

File

drupal/core/vendor/twig/twig/lib/Twig/Node/Macro.php, line 29

Class

Twig_Node_Macro
Represents a macro node.

Code

public function compile(Twig_Compiler $compiler) {
  $compiler
    ->addDebugInfo($this)
    ->write(sprintf("public function get%s(", $this
    ->getAttribute('name')));
  $count = count($this
    ->getNode('arguments'));
  $pos = 0;
  foreach ($this
    ->getNode('arguments') as $name => $default) {
    $compiler
      ->raw('$_' . $name . ' = ')
      ->subcompile($default);
    if (++$pos < $count) {
      $compiler
        ->raw(', ');
    }
  }
  $compiler
    ->raw(")\n")
    ->write("{\n")
    ->indent();
  if (!count($this
    ->getNode('arguments'))) {
    $compiler
      ->write("\$context = \$this->env->getGlobals();\n\n");
  }
  else {
    $compiler
      ->write("\$context = \$this->env->mergeGlobals(array(\n")
      ->indent();
    foreach ($this
      ->getNode('arguments') as $name => $default) {
      $compiler
        ->write('')
        ->string($name)
        ->raw(' => $_' . $name)
        ->raw(",\n");
    }
    $compiler
      ->outdent()
      ->write("));\n\n");
  }
  $compiler
    ->write("\$blocks = array();\n\n")
    ->write("ob_start();\n")
    ->write("try {\n")
    ->indent()
    ->subcompile($this
    ->getNode('body'))
    ->outdent()
    ->write("} catch (Exception \$e) {\n")
    ->indent()
    ->write("ob_end_clean();\n\n")
    ->write("throw \$e;\n")
    ->outdent()
    ->write("}\n\n")
    ->write("return ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset());\n")
    ->outdent()
    ->write("}\n\n");
}