Dotclear

source: inc/libs/Twig/Node/Expression/Test/Defined.php @ 1149:1657e862089c

Revision 1149:1657e862089c, 1.6 KB checked in by dsls, 13 years ago (diff)

Fixed unix case-sensitive twig directory

Line 
1<?php
2
3/*
4 * This file is part of Twig.
5 *
6 * (c) 2011 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 * @package twig
23 * @author  Fabien Potencier <fabien@symfony.com>
24 */
25class Twig_Node_Expression_Test_Defined extends Twig_Node_Expression_Test
26{
27    public function __construct(Twig_NodeInterface $node, $name, Twig_NodeInterface $arguments = null, $lineno)
28    {
29        parent::__construct($node, $name, $arguments, $lineno);
30
31        if ($node instanceof Twig_Node_Expression_Name) {
32            $node->setAttribute('is_defined_test', true);
33        } elseif ($node instanceof Twig_Node_Expression_GetAttr) {
34            $node->setAttribute('is_defined_test', true);
35
36            $this->changeIgnoreStrictCheck($node);
37        } else {
38            throw new Twig_Error_Syntax('The "defined" test only works with simple variables', $this->getLine(), $compiler->getFilename());
39        }
40    }
41
42    protected function changeIgnoreStrictCheck(Twig_Node_Expression_GetAttr $node)
43    {
44        $node->setAttribute('ignore_strict_check', true);
45
46        if ($node->getNode('node') instanceof Twig_Node_Expression_GetAttr) {
47            $this->changeIgnoreStrictCheck($node->getNode('node'));
48        }
49    }
50
51    public function compile(Twig_Compiler $compiler)
52    {
53        $compiler->subcompile($this->getNode('node'));
54    }
55}
Note: See TracBrowser for help on using the repository browser.

Sites map