Автор: Elliot Levin (elliotlevin@hotmail.com)
Наследование: extends Expression
Пример #1
0
 public function visitAssignment(O\AssignmentExpression $expression)
 {
     $assignTo = $expression->getAssignTo();
     $assignmentValue = $expression->getAssignmentValue();
     $this->walk($assignmentValue);
     $operator = $expression->getOperator();
     if ($operator === O\Operators\Assignment::EQUAL) {
         $this->analysisContext->setExpressionType($assignTo, $this->analysis[$assignmentValue]);
         $this->analysis[$expression] = $this->analysis[$assignmentValue];
     } elseif ($operator === O\Operators\Assignment::EQUAL_REFERENCE) {
         $this->analysisContext->removeExpressionType($assignTo);
         $this->analysisContext->setExpressionType($assignTo, $this->analysis[$assignmentValue]);
         $this->analysisContext->createReference($assignTo, $assignmentValue);
         $this->analysis[$expression] = $this->analysis[$assignmentValue];
     } else {
         $this->walk($assignTo);
         $binaryOperation = $this->typeSystem->getBinaryOperation($this->analysis[$assignTo], O\Operators\Assignment::toBinaryOperator($operator), $this->analysis[$assignmentValue]);
         $this->analysis[$expression] = $binaryOperation->getReturnType();
     }
 }
Пример #2
0
 protected final function visitOffsetSet(O\Expression $expression)
 {
     if ($expression instanceof O\MethodCallExpression) {
         $index = $this->getArgumentValueAt(0, $expression);
         $value = $this->getArgumentValueAt(1, $expression);
         $sourceExpression = $expression;
     } elseif ($expression instanceof O\AssignmentExpression) {
         $sourceExpression = $expression->getAssignTo();
         if ($sourceExpression instanceof O\IndexExpression) {
             $index = $this->getValue($sourceExpression->getIndex());
             $value = $this->getValue($expression->getAssignmentValue());
         } else {
             throw new PinqException('Cannot interpret set index operation: invalid source expression type, expecting %s, %s given', O\IndexExpression::getType(), $expression->getType());
         }
     } else {
         throw new PinqException('Cannot interpret set index operation: invalid expression type, expecting %s, %s given', O\MethodCallExpression::getType() . ' or ' . O\AssignmentExpression::getType(), $expression->getType());
     }
     $this->interpretation->interpretOffsetSet($this->getId('offset-set'), $this->getId('set-index'), $index, $this->getId('set-value'), $value);
     $this->interpretSourceAsScope($sourceExpression);
 }