madlisp/src/UserFunc.php

51 lines
975 B
PHP
Raw Normal View History

<?php
2020-12-14 01:49:07 +00:00
/**
* MadLisp language
* @link http://madlisp.com/
* @copyright Copyright (c) 2020 Pekka Laiho
*/
namespace MadLisp;
use Closure;
class UserFunc extends Func
{
protected $ast;
protected Env $tempEnv;
2020-12-05 01:13:17 +00:00
protected Seq $bindings;
2020-12-06 01:26:27 +00:00
public function __construct(Closure $closure, $ast, Env $tempEnv, Seq $bindings, bool $macro = false)
{
2020-12-06 01:26:27 +00:00
parent::__construct($closure, null, $macro);
$this->ast = $ast;
$this->tempEnv = $tempEnv;
$this->bindings = $bindings;
}
public function getAst()
{
return $this->ast;
}
2020-12-05 01:13:17 +00:00
public function getBindings(): Seq
{
return $this->bindings;
}
public function getEnv(array $args)
{
2020-06-06 08:31:09 +00:00
$newEnv = new Env('apply', $this->tempEnv);
Util::bindArguments($newEnv, $this->bindings->getData(), $args);
return $newEnv;
}
public function call(array $args)
{
return ($this->closure)(...$args);
}
}