blob: eaad03c9c05663b225ca3d261a8229b696bc6964 [file] [log] [blame]
Matthias Andreas Benkard12a57352021-12-28 18:02:04 +01001<?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): void
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}