Esempio n. 1
0
 public function __invoke(array $nodes, Environment $env, Node $self)
 {
     if (count($nodes) !== count($this->argNames)) {
         throw new BadCallException(sprintf('`%s` expects %d arguments, got %d near %s', $self instanceof IdentifierNode ? $self->rawIdent() : 'Anonymous Function', count($this->argNames), count($nodes), $self->context()));
     }
     $env->put('recur', $this);
     foreach (array_combine($this->argNames, $nodes) as $name => $node) {
         $env->put($name, $node->evaluate($env));
     }
     $value = null;
     $closure = new ClosureEnvironment($env, $this->wrappedEnv);
     foreach ($this->nodes as $node) {
         $value = $node->evaluate($closure);
     }
     return $value;
 }
Esempio n. 2
0
 private function checkNumeric($value, Node $node, Node $self)
 {
     if (!is_numeric($value)) {
         throw new BadCallException(sprintf('`%s` expected numeric arguments, got "%s" near %s', $self->rawIdent(), $value, $node->context()));
     }
 }