예제 #1
0
 function pushFunctionScope(Node\FunctionLike $func)
 {
     $isStatic = true;
     if ($func instanceof Node\Stmt\ClassMethod) {
         $isStatic = $func->isStatic();
     }
     $scope = new Scope($isStatic);
     foreach ($func->getParams() as $param) {
         $scope->setVarType(strval($param->name), strval($param->type));
     }
     if ($func instanceof Node\Expr\Closure) {
         $oldScope = end($this->scopeStack);
         foreach ($func->uses as $variable) {
             $type = $oldScope->getVarType($variable->var);
             if ($type == Scope::UNDEFINED) {
                 $type = Scope::MIXED_TYPE;
             }
             $scope->setVarType($variable->var, $type);
         }
     }
     array_push($this->scopeStack, $scope);
 }