From 26757ab327fedf6e690d748f34e9e3a8879743a6 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 27 Jul 2011 11:23:08 +0200 Subject: [PATCH] simplified code for previous merge/commits --- lib/Twig/Node/Expression/BlockReference.php | 21 +++++++++---- lib/Twig/Node/OptimizedBlockReference.php | 40 ------------------------- lib/Twig/NodeVisitor/Optimizer.php | 4 ++- test/Twig/Tests/NodeVisitor/OptimizerTest.php | 10 +++++- 4 files changed, 26 insertions(+), 49 deletions(-) delete mode 100644 lib/Twig/Node/OptimizedBlockReference.php diff --git a/lib/Twig/Node/Expression/BlockReference.php b/lib/Twig/Node/Expression/BlockReference.php index 1dc0a68..174d909 100644 --- a/lib/Twig/Node/Expression/BlockReference.php +++ b/lib/Twig/Node/Expression/BlockReference.php @@ -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 index f694091..0000000 --- a/lib/Twig/Node/OptimizedBlockReference.php +++ /dev/null @@ -1,40 +0,0 @@ - - */ -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") - ; - } -} diff --git a/lib/Twig/NodeVisitor/Optimizer.php b/lib/Twig/NodeVisitor/Optimizer.php index 7955b68..3679746 100644 --- a/lib/Twig/NodeVisitor/Optimizer.php +++ b/lib/Twig/NodeVisitor/Optimizer.php @@ -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; diff --git a/test/Twig/Tests/NodeVisitor/OptimizerTest.php b/test/Twig/Tests/NodeVisitor/OptimizerTest.php index 17e171a..4a04f2f 100644 --- a/test/Twig/Tests/NodeVisitor/OptimizerTest.php +++ b/test/Twig/Tests/NodeVisitor/OptimizerTest.php @@ -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')); } /** -- 1.7.2.5