fixed deep nested defined tests

This commit is contained in:
Fabien Potencier
2011-10-26 09:33:02 +02:00
parent 5da378ceaa
commit 5e290cbb4d
2 changed files with 52 additions and 2 deletions
+12 -1
View File
@@ -16,14 +16,25 @@ class Twig_Node_Expression_Test extends Twig_Node_Expression
// defined is a special case
if ('defined' === $name) {
if ($node instanceof Twig_Node_Expression_Name || $node instanceof Twig_Node_Expression_GetAttr) {
if ($node instanceof Twig_Node_Expression_Name) {
$node->setAttribute('is_defined_test', true);
} elseif ($node instanceof Twig_Node_Expression_GetAttr) {
$this->changeIsDefined($node);
} else {
throw new Twig_Error_Syntax('The "defined" test only works with simple variables', $this->getLine());
}
}
}
protected function changeIsDefined(Twig_Node_Expression_GetAttr $node)
{
$node->setAttribute('is_defined_test', true);
if ($node->getNode('node') instanceof Twig_Node_Expression_GetAttr) {
$this->changeIsDefined($node->getNode('node'));
}
}
public function compile(Twig_Compiler $compiler)
{
$testMap = $compiler->getEnvironment()->getTests();