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