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); }