public function Twig_Node_Expression_Function::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/Expression/Function.php, line 18

Class

Twig_Node_Expression_Function

Code

public function compile(Twig_Compiler $compiler) {
  $name = $this
    ->getAttribute('name');
  if (false === ($function = $compiler
    ->getEnvironment()
    ->getFunction($name))) {
    $message = sprintf('The function "%s" does not exist', $name);
    if ($alternatives = $compiler
      ->getEnvironment()
      ->computeAlternatives($name, array_keys($compiler
      ->getEnvironment()
      ->getFunctions()))) {
      $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives));
    }
    throw new Twig_Error_Syntax($message, $this
      ->getLine());
  }
  $compiler
    ->raw($function
    ->compile() . '(');
  $first = true;
  if ($function
    ->needsEnvironment()) {
    $compiler
      ->raw('$this->env');
    $first = false;
  }
  if ($function
    ->needsContext()) {
    if (!$first) {
      $compiler
        ->raw(', ');
    }
    $compiler
      ->raw('$context');
    $first = false;
  }
  foreach ($function
    ->getArguments() as $argument) {
    if (!$first) {
      $compiler
        ->raw(', ');
    }
    $compiler
      ->string($argument);
    $first = false;
  }
  foreach ($this
    ->getNode('arguments') as $node) {
    if (!$first) {
      $compiler
        ->raw(', ');
    }
    $compiler
      ->subcompile($node);
    $first = false;
  }
  $compiler
    ->raw(')');
}