fixed optimization for rendering blocks with variable name

This commit is contained in:
Martin Hason
2011-07-27 08:19:59 +02:00
parent d67832ea5d
commit 3c5c51260e
2 changed files with 15 additions and 1 deletions
+6 -1
View File
@@ -83,7 +83,12 @@ 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_BlockReference($node->getNode('expr')->getNode('name')->getAttribute('value'), $node->getLine(), $node->getNodeTag());
$name = $node->getNode('expr')->getNode('name');
if ($name instanceof Twig_Node_Expression_Constant) {
return new Twig_Node_BlockReference($name->getAttribute('value'), $node->getLine(), $node->getNodeTag());
} else {
return new Twig_Node_BlockReference($name, $node->getLine(), $node->getNodeTag());
}
}
return $node;
@@ -20,6 +20,15 @@ class Twig_Tests_NodeVisitor_OptimizerTest extends PHPUnit_Framework_TestCase
$this->assertInstanceOf('Twig_Node_BlockReference', $stream->getNode('body'));
}
public function testRenderVariableBlockOptimizer()
{
$env = new Twig_Environment(new Twig_Loader_String(), array('cache' => false, 'autoescape' => false));
$env->addExtension(new Twig_Extension_Optimizer());
$stream = $env->parse($env->tokenize('{{ block(name|lower) }}', 'index'));
$this->assertInstanceOf('Twig_Node_BlockReference', $stream->getNode('body'));
}
/**
* @dataProvider getTestsForForOptimizer
*/