Pinq\Analysis\IAnalysisContext::setExpressionType PHP Метод

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

Sets the type of the expression.
public setExpressionType ( Expression $expression, Pinq\Analysis\IType $type ) : void
$expression Pinq\Expressions\Expression
$type Pinq\Analysis\IType
Результат void
    public function setExpressionType(O\Expression $expression, IType $type);

Usage Example

Пример #1
0
 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;
 }