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 30

Class

Twig_Node_Macro
Represents a macro node.

Code

public function compile(Twig_Compiler $compiler) {
  $arguments = array();
  foreach ($this
    ->getNode('arguments') as $argument) {
    $arguments[] = '$' . $argument
      ->getAttribute('name') . ' = null';
  }
  $compiler
    ->addDebugInfo($this)
    ->write(sprintf("public function get%s(%s)\n", $this
    ->getAttribute('name'), implode(', ', $arguments)), "{\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 $argument) {
      $compiler
        ->write('')
        ->string($argument
        ->getAttribute('name'))
        ->raw(' => $' . $argument
        ->getAttribute('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 ob_get_clean();\n")
    ->outdent()
    ->write("}\n\n");
}