mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-13 02:46:29 +00:00
fixed optimization for rendering blocks with variable name
This commit is contained in:
@@ -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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user