A super easy PHP Framework for web development!
				https://github.com/exacti/phacil-framework
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					49 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					49 lines
				
				1.9 KiB
			| 
								 
											7 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * This file is part of Twig.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * (c) Fabien Potencier
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * For the full copyright and license information, please view the LICENSE
							 | 
						||
| 
								 | 
							
								 * file that was distributed with this source code.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Twig_Node_Expression_NullCoalesce extends Twig_Node_Expression_Conditional
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public function __construct(Twig_Node $left, Twig_Node $right, $lineno)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $test = new Twig_Node_Expression_Binary_And(
							 | 
						||
| 
								 | 
							
								            new Twig_Node_Expression_Test_Defined(clone $left, 'defined', new Twig_Node(), $left->getTemplateLine()),
							 | 
						||
| 
								 | 
							
								            new Twig_Node_Expression_Unary_Not(new Twig_Node_Expression_Test_Null($left, 'null', new Twig_Node(), $left->getTemplateLine()), $left->getTemplateLine()),
							 | 
						||
| 
								 | 
							
								            $left->getTemplateLine()
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        parent::__construct($test, $left, $right, $lineno);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function compile(Twig_Compiler $compiler)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        /*
							 | 
						||
| 
								 | 
							
								         * 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.
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        if ($this->getNode('expr2') instanceof Twig_Node_Expression_Name) {
							 | 
						||
| 
								 | 
							
								            $this->getNode('expr2')->setAttribute('always_defined', true);
							 | 
						||
| 
								 | 
							
								            $compiler
							 | 
						||
| 
								 | 
							
								                ->raw('((')
							 | 
						||
| 
								 | 
							
								                ->subcompile($this->getNode('expr2'))
							 | 
						||
| 
								 | 
							
								                ->raw(') ?? (')
							 | 
						||
| 
								 | 
							
								                ->subcompile($this->getNode('expr3'))
							 | 
						||
| 
								 | 
							
								                ->raw('))')
							 | 
						||
| 
								 | 
							
								            ;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            parent::compile($compiler);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class_alias('Twig_Node_Expression_NullCoalesce', 'Twig\Node\Expression\NullCoalesceExpression', false);
							 |