Yaffs site version 1.1
[yaffs-website] / vendor / twig / twig / lib / Twig / Node / Expression / Test / Defined.php
1 <?php
2
3 /*
4  * This file is part of Twig.
5  *
6  * (c) 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
12 /**
13  * Checks if a variable is defined in the current context.
14  *
15  * <pre>
16  * {# defined works with variable names and variable attributes #}
17  * {% if foo is defined %}
18  *     {# ... #}
19  * {% endif %}
20  * </pre>
21  *
22  * @author Fabien Potencier <fabien@symfony.com>
23  */
24 class Twig_Node_Expression_Test_Defined extends Twig_Node_Expression_Test
25 {
26     public function __construct(Twig_NodeInterface $node, $name, Twig_NodeInterface $arguments = null, $lineno)
27     {
28         if ($node instanceof Twig_Node_Expression_Name) {
29             $node->setAttribute('is_defined_test', true);
30         } elseif ($node instanceof Twig_Node_Expression_GetAttr) {
31             $node->setAttribute('is_defined_test', true);
32             $this->changeIgnoreStrictCheck($node);
33         } elseif ($node instanceof Twig_Node_Expression_BlockReference) {
34             $node->setAttribute('is_defined_test', true);
35         } elseif ($node instanceof Twig_Node_Expression_Function && 'constant' === $node->getAttribute('name')) {
36             $node->setAttribute('is_defined_test', true);
37         } elseif ($node instanceof Twig_Node_Expression_Constant || $node instanceof Twig_Node_Expression_Array) {
38             $node = new Twig_Node_Expression_Constant(true, $node->getTemplateLine());
39         } else {
40             throw new Twig_Error_Syntax('The "defined" test only works with simple variables.', $this->getTemplateLine());
41         }
42
43         parent::__construct($node, $name, $arguments, $lineno);
44     }
45
46     protected function changeIgnoreStrictCheck(Twig_Node_Expression_GetAttr $node)
47     {
48         $node->setAttribute('ignore_strict_check', true);
49
50         if ($node->getNode('node') instanceof Twig_Node_Expression_GetAttr) {
51             $this->changeIgnoreStrictCheck($node->getNode('node'));
52         }
53     }
54
55     public function compile(Twig_Compiler $compiler)
56     {
57         $compiler->subcompile($this->getNode('node'));
58     }
59 }
60
61 class_alias('Twig_Node_Expression_Test_Defined', 'Twig\Node\Expression\Test\DefinedTest', false);