fixed ternary operator when used for the default filter
authorFabien Potencier <fabien.potencier@gmail.com>
Thu, 30 Dec 2010 10:58:28 +0000 (11:58 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Thu, 30 Dec 2010 10:58:28 +0000 (11:58 +0100)
lib/Twig/Node/Expression/Filter.php
test/Twig/Tests/Fixtures/filters/default.test

index 9cc00fc..8181215 100644 (file)
@@ -29,6 +29,7 @@ class Twig_Node_Expression_Filter extends Twig_Node_Expression
         // is a name (like obj) or an attribute (like obj.attr)
         // In such a case, it's compiled to {{ obj is defined ? obj|default('bar') : 'bar' }}
         if ('default' === $name && ($this->getNode('node') instanceof Twig_Node_Expression_Name || $this->getNode('node') instanceof Twig_Node_Expression_GetAttr)) {
+            $compiler->raw('(');
             if ($this->getNode('node') instanceof Twig_Node_Expression_Name) {
                 $testMap = $compiler->getEnvironment()->getTests();
                 $compiler
@@ -45,6 +46,7 @@ class Twig_Node_Expression_Filter extends Twig_Node_Expression
             $this->compileFilter($compiler, $filter);
             $compiler->raw(' : ');
             $compiler->subcompile($this->getNode('arguments')->getNode(0));
+            $compiler->raw(')');
         } else {
             $this->compileFilter($compiler, $filter);
         }
index 0c975dd..ad1a338 100644 (file)
@@ -4,9 +4,11 @@
 {{ foo|default('bar') }}
 {{ bar|default('foo') }}
 {{ not_defined|default('bar') }}
+{{ 'a' ~ foo|default('b') }}
 --DATA--
 return array('foo' => null, 'bar' => 'bar')
 --EXPECT--
 bar
 bar
 bar
+ab