mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-26 03:26:24 +00:00
fixed deep nested defined tests
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user