2020-05-28 04:55:58 +00:00
|
|
|
<?php
|
|
|
|
namespace MadLisp;
|
|
|
|
|
|
|
|
class Env extends Hash
|
|
|
|
{
|
|
|
|
protected ?Env $parent;
|
|
|
|
|
|
|
|
public function __construct(?Env $parent = null)
|
|
|
|
{
|
|
|
|
$this->parent = $parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function get(string $key)
|
|
|
|
{
|
|
|
|
if ($this->has($key)) {
|
|
|
|
return $this->data[$key];
|
|
|
|
} elseif ($this->parent) {
|
|
|
|
return $this->parent->get($key);
|
|
|
|
}
|
|
|
|
|
|
|
|
throw new MadLispException("symbol $key not defined in env");
|
|
|
|
}
|
2020-06-04 09:06:56 +00:00
|
|
|
|
|
|
|
public function set(string $key, $value)
|
|
|
|
{
|
|
|
|
// Do not allow overwriting values in root env
|
|
|
|
if ($this->has($key) && $this->parent == null) {
|
|
|
|
throw new MadLispException("attempt to overwrite $key in root env");
|
|
|
|
}
|
|
|
|
|
|
|
|
return parent::set($key, $value);
|
|
|
|
}
|
2020-05-28 04:55:58 +00:00
|
|
|
}
|