Twig-1.3.0/lib/Twig/Node/Expression/Function.php
changeset 4 9a001a04b634
equal deleted inserted replaced
3:6d109e3804ac 4:9a001a04b634
       
     1 <?php
       
     2 
       
     3 /*
       
     4  * This file is part of Twig.
       
     5  *
       
     6  * (c) 2010 Fabien Potencier
       
     7  *
       
     8  * For the full copyright and license information, please view the LICENSE
       
     9  * file that was distributed with this source code.
       
    10  */
       
    11 class Twig_Node_Expression_Function extends Twig_Node_Expression
       
    12 {
       
    13     public function __construct($name, Twig_NodeInterface $arguments, $lineno)
       
    14     {
       
    15         parent::__construct(array('arguments' => $arguments), array('name' => $name), $lineno);
       
    16     }
       
    17 
       
    18     public function compile(Twig_Compiler $compiler)
       
    19     {
       
    20         $function = $compiler->getEnvironment()->getFunction($this->getAttribute('name'));
       
    21         if (false === $function) {
       
    22             throw new Twig_Error_Syntax(sprintf('The function "%s" does not exist', $this->getAttribute('name')), $this->getLine());
       
    23         }
       
    24 
       
    25         $compiler
       
    26             ->raw($function->compile().'(')
       
    27             ->raw($function->needsEnvironment() ? '$this->env' : '')
       
    28         ;
       
    29 
       
    30         if ($function->needsContext()) {
       
    31             $compiler->raw($function->needsEnvironment() ? ', $context' : '$context');
       
    32         }
       
    33 
       
    34         $first = true;
       
    35         foreach ($this->getNode('arguments') as $node) {
       
    36             if (!$first) {
       
    37                 $compiler->raw(', ');
       
    38             } else {
       
    39                 if ($function->needsEnvironment() || $function->needsContext()) {
       
    40                     $compiler->raw(', ');
       
    41                 }
       
    42                 $first = false;
       
    43             }
       
    44             $compiler->subcompile($node);
       
    45         }
       
    46 
       
    47         $compiler->raw(')');
       
    48     }
       
    49 }