2011-10-05 06:22:53 +02:00
< ? php
/*
* This file is part of Twig .
*
2018-05-10 12:24:53 +02:00
* ( c ) Fabien Potencier
* ( c ) Armin Ronacher
2011-10-05 06:22:53 +02:00
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
/**
* Represents a block call node .
*
2013-08-01 21:20:12 +02:00
* @ author Fabien Potencier < fabien @ symfony . com >
2011-10-05 06:22:53 +02:00
*/
class Twig_Node_Expression_BlockReference extends Twig_Node_Expression
{
2018-05-10 12:24:53 +02:00
/**
* @ param Twig_Node | null $template
*/
public function __construct ( Twig_NodeInterface $name , $template = null , $lineno , $tag = null )
2011-10-05 06:22:53 +02:00
{
2018-05-10 12:24:53 +02:00
if ( is_bool ( $template )) {
@ trigger_error ( sprintf ( 'The %s method "$asString" argument is deprecated since version 1.28 and will be removed in 2.0.' , __METHOD__ ), E_USER_DEPRECATED );
$template = null ;
}
$nodes = array ( 'name' => $name );
if ( null !== $template ) {
$nodes [ 'template' ] = $template ;
}
parent :: __construct ( $nodes , array ( 'is_defined_test' => false , 'output' => false ), $lineno , $tag );
2011-10-05 06:22:53 +02:00
}
public function compile ( Twig_Compiler $compiler )
{
2018-05-10 12:24:53 +02:00
if ( $this -> getAttribute ( 'is_defined_test' )) {
$this -> compileTemplateCall ( $compiler , 'hasBlock' );
} else {
if ( $this -> getAttribute ( 'output' )) {
$compiler -> addDebugInfo ( $this );
$this
-> compileTemplateCall ( $compiler , 'displayBlock' )
-> raw ( " ; \n " );
} else {
$this -> compileTemplateCall ( $compiler , 'renderBlock' );
}
2011-10-05 06:22:53 +02:00
}
2018-05-10 12:24:53 +02:00
}
2011-10-05 06:22:53 +02:00
2018-05-10 12:24:53 +02:00
private function compileTemplateCall ( Twig_Compiler $compiler , $method )
{
if ( ! $this -> hasNode ( 'template' )) {
$compiler -> write ( '$this' );
2011-10-05 06:22:53 +02:00
} else {
$compiler
2018-05-10 12:24:53 +02:00
-> write ( '$this->loadTemplate(' )
-> subcompile ( $this -> getNode ( 'template' ))
-> raw ( ', ' )
-> repr ( $this -> getTemplateName ())
-> raw ( ', ' )
-> repr ( $this -> getTemplateLine ())
-> raw ( ')' )
2011-10-05 06:22:53 +02:00
;
}
2018-05-10 12:24:53 +02:00
$compiler -> raw ( sprintf ( '->%s' , $method ));
$this -> compileBlockArguments ( $compiler );
return $compiler ;
}
private function compileBlockArguments ( Twig_Compiler $compiler )
{
$compiler
-> raw ( '(' )
-> subcompile ( $this -> getNode ( 'name' ))
-> raw ( ', $context' );
if ( ! $this -> hasNode ( 'template' )) {
$compiler -> raw ( ', $blocks' );
}
return $compiler -> raw ( ')' );
2011-10-05 06:22:53 +02:00
}
}
2018-05-10 12:24:53 +02:00
class_alias ( 'Twig_Node_Expression_BlockReference' , 'Twig\Node\Expression\BlockReferenceExpression' , false );