示例#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;
 }
示例#2
0
 public function evaluate(Environment $env)
 {
     switch ($this->ident) {
         case 'true':
             return true;
             break;
         case 'false':
             return false;
             break;
         case 'null':
             return null;
             break;
         default:
             return $env->get($this->ident);
             break;
     }
 }