Twig-1.3.0/lib/Twig/Node/Expression/GetAttr.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) 2009 Fabien Potencier
       
     7  * (c) 2009 Armin Ronacher
       
     8  *
       
     9  * For the full copyright and license information, please view the LICENSE
       
    10  * file that was distributed with this source code.
       
    11  */
       
    12 class Twig_Node_Expression_GetAttr extends Twig_Node_Expression
       
    13 {
       
    14     public function __construct(Twig_Node_Expression $node, Twig_Node_Expression $attribute, Twig_NodeInterface $arguments, $type, $lineno)
       
    15     {
       
    16         parent::__construct(array('node' => $node, 'attribute' => $attribute, 'arguments' => $arguments), array('type' => $type), $lineno);
       
    17     }
       
    18 
       
    19     public function compile(Twig_Compiler $compiler)
       
    20     {
       
    21         $compiler->raw('$this->getAttribute(');
       
    22 
       
    23         if ($this->hasAttribute('is_defined_test') && $compiler->getEnvironment()->isStrictVariables()) {
       
    24             $compiler->subcompile(new Twig_Node_Expression_Filter(
       
    25                 $this->getNode('node'),
       
    26                 new Twig_Node_Expression_Constant('default', $this->getLine()),
       
    27                 new Twig_Node(),
       
    28                 $this->getLine()
       
    29             ));
       
    30         } else {
       
    31             $compiler->subcompile($this->getNode('node'));
       
    32         }
       
    33 
       
    34         $compiler
       
    35             ->raw(', ')
       
    36             ->subcompile($this->getNode('attribute'))
       
    37             ->raw(', array(')
       
    38         ;
       
    39 
       
    40         foreach ($this->getNode('arguments') as $node) {
       
    41             $compiler
       
    42                 ->subcompile($node)
       
    43                 ->raw(', ')
       
    44             ;
       
    45         }
       
    46 
       
    47         $compiler
       
    48             ->raw('), ')
       
    49             ->repr($this->getAttribute('type'))
       
    50             ->raw($this->hasAttribute('is_defined_test') ? ', true' : ', false')
       
    51             ->raw(')');
       
    52     }
       
    53 }