diff --git a/.gitignore b/.gitignore index d38435f9b..fc9107066 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ test/vendor/* /lib/**/tests/** /lib/**/Test/** /lib/**/Tests/** +!/lib/twig/**/Expression/Test/** # all datas but listing prevention /data/** diff --git a/lib/twig/twig/lib/Twig/Node/Expression/Test/Constant.php b/lib/twig/twig/lib/Twig/Node/Expression/Test/Constant.php new file mode 100644 index 000000000..bc796ec35 --- /dev/null +++ b/lib/twig/twig/lib/Twig/Node/Expression/Test/Constant.php @@ -0,0 +1,11 @@ + + */ +class ConstantTest extends TestExpression +{ + public function compile(Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === constant(') + ; + + if ($this->getNode('arguments')->hasNode(1)) { + $compiler + ->raw('get_class(') + ->subcompile($this->getNode('arguments')->getNode(1)) + ->raw(')."::".') + ; + } + + $compiler + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw('))') + ; + } +} + +class_alias('Twig\Node\Expression\Test\ConstantTest', 'Twig_Node_Expression_Test_Constant'); diff --git a/lib/twig/twig/src/Node/Expression/Test/DefinedTest.php b/lib/twig/twig/src/Node/Expression/Test/DefinedTest.php new file mode 100644 index 000000000..2222e11cf --- /dev/null +++ b/lib/twig/twig/src/Node/Expression/Test/DefinedTest.php @@ -0,0 +1,71 @@ + + */ +class DefinedTest extends TestExpression +{ + public function __construct(\Twig_NodeInterface $node, $name, \Twig_NodeInterface $arguments = null, $lineno) + { + if ($node instanceof NameExpression) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof GetAttrExpression) { + $node->setAttribute('is_defined_test', true); + $this->changeIgnoreStrictCheck($node); + } elseif ($node instanceof BlockReferenceExpression) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof FunctionExpression && 'constant' === $node->getAttribute('name')) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof ConstantExpression || $node instanceof ArrayExpression) { + $node = new ConstantExpression(true, $node->getTemplateLine()); + } else { + throw new SyntaxError('The "defined" test only works with simple variables.', $lineno); + } + + parent::__construct($node, $name, $arguments, $lineno); + } + + protected function changeIgnoreStrictCheck(GetAttrExpression $node) + { + $node->setAttribute('ignore_strict_check', true); + + if ($node->getNode('node') instanceof GetAttrExpression) { + $this->changeIgnoreStrictCheck($node->getNode('node')); + } + } + + public function compile(Compiler $compiler) + { + $compiler->subcompile($this->getNode('node')); + } +} + +class_alias('Twig\Node\Expression\Test\DefinedTest', 'Twig_Node_Expression_Test_Defined'); diff --git a/lib/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php b/lib/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php new file mode 100644 index 000000000..05c8ad8f7 --- /dev/null +++ b/lib/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php @@ -0,0 +1,38 @@ + + */ +class DivisiblebyTest extends TestExpression +{ + public function compile(Compiler $compiler) + { + $compiler + ->raw('(0 == ') + ->subcompile($this->getNode('node')) + ->raw(' % ') + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw(')') + ; + } +} + +class_alias('Twig\Node\Expression\Test\DivisiblebyTest', 'Twig_Node_Expression_Test_Divisibleby'); diff --git a/lib/twig/twig/src/Node/Expression/Test/EvenTest.php b/lib/twig/twig/src/Node/Expression/Test/EvenTest.php new file mode 100644 index 000000000..3b955d26a --- /dev/null +++ b/lib/twig/twig/src/Node/Expression/Test/EvenTest.php @@ -0,0 +1,37 @@ + + */ +class EvenTest extends TestExpression +{ + public function compile(Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 == 0') + ->raw(')') + ; + } +} + +class_alias('Twig\Node\Expression\Test\EvenTest', 'Twig_Node_Expression_Test_Even'); diff --git a/lib/twig/twig/src/Node/Expression/Test/NullTest.php b/lib/twig/twig/src/Node/Expression/Test/NullTest.php new file mode 100644 index 000000000..24d399781 --- /dev/null +++ b/lib/twig/twig/src/Node/Expression/Test/NullTest.php @@ -0,0 +1,36 @@ + + */ +class NullTest extends TestExpression +{ + public function compile(Compiler $compiler) + { + $compiler + ->raw('(null === ') + ->subcompile($this->getNode('node')) + ->raw(')') + ; + } +} + +class_alias('Twig\Node\Expression\Test\NullTest', 'Twig_Node_Expression_Test_Null'); diff --git a/lib/twig/twig/src/Node/Expression/Test/OddTest.php b/lib/twig/twig/src/Node/Expression/Test/OddTest.php new file mode 100644 index 000000000..2dc693a9a --- /dev/null +++ b/lib/twig/twig/src/Node/Expression/Test/OddTest.php @@ -0,0 +1,37 @@ + + */ +class OddTest extends TestExpression +{ + public function compile(Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 == 1') + ->raw(')') + ; + } +} + +class_alias('Twig\Node\Expression\Test\OddTest', 'Twig_Node_Expression_Test_Odd'); diff --git a/lib/twig/twig/src/Node/Expression/Test/SameasTest.php b/lib/twig/twig/src/Node/Expression/Test/SameasTest.php new file mode 100644 index 000000000..75f2b82a5 --- /dev/null +++ b/lib/twig/twig/src/Node/Expression/Test/SameasTest.php @@ -0,0 +1,36 @@ + + */ +class SameasTest extends TestExpression +{ + public function compile(Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === ') + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw(')') + ; + } +} + +class_alias('Twig\Node\Expression\Test\SameasTest', 'Twig_Node_Expression_Test_Sameas');