diff -r 6d109e3804ac -r 9a001a04b634 Twig-1.3.0/lib/Twig/Node/Expression/Test.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Twig-1.3.0/lib/Twig/Node/Expression/Test.php Tue Oct 25 23:56:28 2011 +0200 @@ -0,0 +1,60 @@ + $node, 'arguments' => $arguments), array('name' => $name), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + $testMap = $compiler->getEnvironment()->getTests(); + if (!isset($testMap[$this->getAttribute('name')])) { + throw new Twig_Error_Syntax(sprintf('The test "%s" does not exist', $this->getAttribute('name')), $this->getLine()); + } + + $name = $this->getAttribute('name'); + $node = $this->getNode('node'); + + // defined is a special case + if ('defined' === $name) { + if ($node instanceof Twig_Node_Expression_Name || $node instanceof Twig_Node_Expression_GetAttr) { + $node->setAttribute('is_defined_test', true); + $compiler->subcompile($node); + $node->removeAttribute('is_defined_test'); + } else { + throw new Twig_Error_Syntax('The "defined" test only works with simple variables', $this->getLine()); + } + return; + } + + $compiler + ->raw($testMap[$name]->compile().'(') + ->subcompile($node) + ; + + if (null !== $this->getNode('arguments')) { + $compiler->raw(', '); + + $max = count($this->getNode('arguments')) - 1; + foreach ($this->getNode('arguments') as $i => $arg) { + $compiler->subcompile($arg); + + if ($i != $max) { + $compiler->raw(', '); + } + } + } + + $compiler->raw(')'); + } +}