1<?php 2 3/* 4 * This file is part of Twig. 5 * 6 * (c) Fabien Potencier 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Twig\Node\Expression; 13 14use Twig\Compiler; 15use Twig\Node\Node; 16 17/** 18 * Represents an arrow function. 19 * 20 * @author Fabien Potencier <fabien@symfony.com> 21 */ 22class ArrowFunctionExpression extends AbstractExpression 23{ 24 public function __construct(AbstractExpression $expr, Node $names, $lineno, $tag = null) 25 { 26 parent::__construct(['expr' => $expr, 'names' => $names], [], $lineno, $tag); 27 } 28 29 public function compile(Compiler $compiler) 30 { 31 $compiler 32 ->addDebugInfo($this) 33 ->raw('function (') 34 ; 35 foreach ($this->getNode('names') as $i => $name) { 36 if ($i) { 37 $compiler->raw(', '); 38 } 39 40 $compiler 41 ->raw('$__') 42 ->raw($name->getAttribute('name')) 43 ->raw('__') 44 ; 45 } 46 $compiler 47 ->raw(') use ($context, $macros) { ') 48 ; 49 foreach ($this->getNode('names') as $name) { 50 $compiler 51 ->raw('$context["') 52 ->raw($name->getAttribute('name')) 53 ->raw('"] = $__') 54 ->raw($name->getAttribute('name')) 55 ->raw('__; ') 56 ; 57 } 58 $compiler 59 ->raw('return ') 60 ->subcompile($this->getNode('expr')) 61 ->raw('; }') 62 ; 63 } 64} 65