use Twig\Node\Node;
class NullCoalesceExpression extends ConditionalExpression
{ public function __construct(Node
$left, Node
$right, int
$lineno) { $test =
new DefinedTest(clone $left, 'defined',
new Node(),
$left->
getTemplateLine());
// for "block()", we don't need the null test as the return value is always a string
if (!
$left instanceof BlockReferenceExpression
) { $test =
new AndBinary( $test,
new NotUnary(new NullTest($left, 'null',
new Node(),
$left->
getTemplateLine()),
$left->
getTemplateLine()),
$left->
getTemplateLine() );
} parent::
__construct($test,
$left,
$right,
$lineno);
} public function compile(Compiler
$compiler): void
{ /*
* This optimizes only one case. PHP 7 also supports more complex expressions
* that can return null. So, for instance, if log is defined, log("foo") ?? "..." works,
* but log($a["foo"]) ?? "..." does not if $a["foo"] is not defined. More advanced
* cases might be implemented as an optimizer node visitor, but has not been done
* as benefits are probably not worth the added complexity.
*/