{
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);
}
/**
$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)")
+ ;
+ }
}
}
+++ /dev/null
-<?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")
- ;
- }
-}
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;
$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()
$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'));
}
/**