fixed macro calls on PHP 5.4
authorFabien Potencier <fabien.potencier@gmail.com>
Mon, 15 Oct 2012 08:22:12 +0000 (10:22 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Mon, 15 Oct 2012 08:22:32 +0000 (10:22 +0200)
CHANGELOG
lib/Twig/Node/Expression/MethodCall.php
lib/Twig/Node/Expression/Name.php

index 447363d..18d428a 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,6 @@
 * 1.10.2 (2012-XX-XX)
 
- * n/a
+ * fixed macro calls on PHP 5.4
 
 * 1.10.1 (2012-10-15)
 
index 5093808..2c24c2c 100644 (file)
  */
 class Twig_Node_Expression_MethodCall extends Twig_Node_Expression
 {
-    public function __construct(Twig_Node_Expression $node, $method, Twig_Node_Expression_Array $arguments, $lineno)
+    public function __construct(Twig_Node_Expression_Name $node, $method, Twig_Node_Expression_Array $arguments, $lineno)
     {
         parent::__construct(array('node' => $node, 'arguments' => $arguments), array('method' => $method, 'safe' => false), $lineno);
     }
 
     public function compile(Twig_Compiler $compiler)
     {
+        $this->getNode('node')->setAttribute('always_defined', true);
+
         $compiler
             ->subcompile($this->getNode('node'))
             ->raw('->')
index 8f5a1ea..2e5321d 100644 (file)
@@ -19,7 +19,7 @@ class Twig_Node_Expression_Name extends Twig_Node_Expression
 
     public function __construct($name, $lineno)
     {
-        parent::__construct(array(), array('name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false), $lineno);
+        parent::__construct(array(), array('name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false, 'always_defined' => false), $lineno);
     }
 
     public function compile(Twig_Compiler $compiler)
@@ -34,6 +34,12 @@ class Twig_Node_Expression_Name extends Twig_Node_Expression
             }
         } elseif ($this->isSpecial()) {
             $compiler->raw($this->specialVars[$name]);
+        } elseif ($this->getAttribute('always_defined')) {
+            $compiler
+                ->raw('$context[')
+                ->string($name)
+                ->raw(']')
+            ;
         } else {
             // remove the non-PHP 5.4 version when PHP 5.3 support is dropped
             // as the non-optimized version is just a workaround for slow ternary operator