*/ private array $use = []; /** @var array */ private array $nodes; public function __construct(Node ...$nodes) { $this->nodes = $nodes; } /** * @no-named-arguments * @param non-empty-string ...$names */ public function uses(string ...$names): self { $self = clone $this; $self->use = array_map(fn (string $name) => '$' . $name, $names); return $self; } public function compile(Compiler $compiler): Compiler { $use = $this->use !== [] ? ' use (' . implode(', ', $this->use) . ')' : ''; $body = $compiler->sub()->indent()->compile(...$this->nodes)->code(); $code = <<write($code); } }