simplified code for previous merge/commits
authorFabien Potencier <fabien.potencier@gmail.com>
Wed, 27 Jul 2011 09:23:08 +0000 (11:23 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Wed, 27 Jul 2011 09:23:08 +0000 (11:23 +0200)
lib/Twig/Node/Expression/BlockReference.php
lib/Twig/Node/OptimizedBlockReference.php [deleted file]
lib/Twig/NodeVisitor/Optimizer.php
test/Twig/Tests/NodeVisitor/OptimizerTest.php

index 1dc0a68..174d909 100644 (file)
@@ -20,7 +20,7 @@ class Twig_Node_Expression_BlockReference extends Twig_Node_Expression
 {
     public function __construct(Twig_NodeInterface $name, $asString = false, $lineno, $tag = null)
     {
-        parent::__construct(array('name' => $name), array('as_string' => $asString), $lineno, $tag);
+        parent::__construct(array('name' => $name), array('as_string' => $asString, 'output' => false), $lineno, $tag);
     }
 
     /**
@@ -34,10 +34,19 @@ class Twig_Node_Expression_BlockReference extends Twig_Node_Expression
             $compiler->raw('(string) ');
         }
 
-        $compiler
-            ->raw("\$this->renderBlock(")
-            ->subcompile($this->getNode('name'))
-            ->raw(", \$context, \$blocks)")
-        ;
+        if ($this->getAttribute('output')) {
+            $compiler
+                ->addDebugInfo($this)
+                ->write("\$this->displayBlock(")
+                ->subcompile($this->getNode('name'))
+                ->raw(", \$context, \$blocks);\n")
+            ;
+        } else {
+            $compiler
+                ->raw("\$this->renderBlock(")
+                ->subcompile($this->getNode('name'))
+                ->raw(", \$context, \$blocks)")
+            ;
+        }
     }
 }
diff --git a/lib/Twig/Node/OptimizedBlockReference.php b/lib/Twig/Node/OptimizedBlockReference.php
deleted file mode 100644 (file)
index f694091..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-/*
- * This file is part of Twig.
- *
- * (c) 2009 Fabien Potencier
- * (c) 2009 Armin Ronacher
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-/**
- * Represents a block call node.
- *
- * @package    twig
- * @author     Fabien Potencier <fabien@symfony.com>
- */
-class Twig_Node_OptimizedBlockReference extends Twig_Node_BlockReference implements Twig_NodeOutputInterface
-{
-    public function __construct(Twig_NodeInterface $name, $lineno, $tag = null)
-    {
-        call_user_func('Twig_Node::__construct', array('name' => $name), array(), $lineno, $tag);
-    }
-
-    /**
-     * Compiles the node to PHP.
-     *
-     * @param Twig_Compiler A Twig_Compiler instance
-     */
-    public function compile(Twig_Compiler $compiler)
-    {
-        $compiler
-            ->addDebugInfo($this)
-            ->write("\$this->displayBlock(")
-            ->subcompile($this->getNode('name'))
-            ->raw(", \$context, \$blocks);\n")
-        ;
-    }
-}
index 7955b68..3679746 100644 (file)
@@ -83,7 +83,9 @@ class Twig_NodeVisitor_Optimizer implements Twig_NodeVisitorInterface
     protected function optimizeRenderBlock($node, $env)
     {
         if ($node instanceof Twig_Node_Print && $node->getNode('expr') instanceof Twig_Node_Expression_BlockReference) {
-            return new Twig_Node_OptimizedBlockReference($node->getNode('expr')->getNode('name'), $node->getLine(), $node->getNodeTag());
+            $node->getNode('expr')->setAttribute('output', true);
+
+            return $node->getNode('expr');
         }
 
         return $node;
index 17e171a..4a04f2f 100644 (file)
@@ -17,7 +17,10 @@ class Twig_Tests_NodeVisitor_OptimizerTest extends PHPUnit_Framework_TestCase
 
         $stream = $env->parse($env->tokenize('{{ block("foo") }}', 'index'));
 
-        $this->assertInstanceOf('Twig_Node_BlockReference', $stream->getNode('body'));
+        $node = $stream->getNode('body');
+
+        $this->assertInstanceOf('Twig_Node_Expression_BlockReference', $node);
+        $this->assertTrue($node->getAttribute('output'));
     }
 
     public function testRenderVariableBlockOptimizer()
@@ -26,7 +29,10 @@ class Twig_Tests_NodeVisitor_OptimizerTest extends PHPUnit_Framework_TestCase
         $env->addExtension(new Twig_Extension_Optimizer());
         $stream = $env->parse($env->tokenize('{{ block(name|lower) }}', 'index'));
 
-        $this->assertInstanceOf('Twig_Node_BlockReference', $stream->getNode('body'));
+        $node = $stream->getNode('body');
+
+        $this->assertInstanceOf('Twig_Node_Expression_BlockReference', $node);
+        $this->assertTrue($node->getAttribute('output'));
     }
 
     /**