Pinq\Analysis\ExpressionAnalyser::visitClosure PHP Метод

visitClosure() публичный Метод

public visitClosure ( ClosureExpression $expression )
$expression Pinq\Expressions\ClosureExpression
    public function visitClosure(O\ClosureExpression $expression)
    {
        $originalContext = $this->analysisContext;
        $this->analysisContext = $originalContext->inNewScope();
        foreach ($expression->getParameters() as $parameter) {
            $this->walk($parameter);
            $typeHintType = $this->typeSystem->getTypeFromTypeHint($parameter->getTypeHint());
            if (!$parameter->hasDefaultValue() || $this->analysis[$parameter->getDefaultValue()]->isEqualTo($typeHintType)) {
                $this->analysisContext->setExpressionType($parameter->asVariable(), $typeHintType);
            } else {
                $this->analysisContext->setExpressionType($parameter->asVariable(), $this->typeSystem->getNativeType(INativeType::TYPE_MIXED));
            }
        }
        foreach ($expression->getUsedVariables() as $usedVariable) {
            $variable = $usedVariable->asVariable();
            //TODO: handle references with used variables. Probably impossible though.
            $this->analysisContext->setExpressionType($variable, $originalContext->getExpressionType($variable));
        }
        $this->walkAll($expression->getBodyExpressions());
        $this->analysis[$expression] = $this->typeSystem->getObjectType('Closure');
        $this->analysisContext = $originalContext;
    }