Exemplo n.º 1
0
 /**
  * Converts the assignment expression with compound assignment operators
  * to the equivalent assignment and binary operator combination
  *
  * <code>
  * $variable += 5
  * </code>
  * becomes
  * <code>
  * $variable = $variable + 5
  * </code>
  *
  * @return AssignmentExpression
  */
 public function toBinaryOperationEquivalent()
 {
     $binaryOperator = Assignment::toBinaryOperator($this->operator);
     if ($binaryOperator === null) {
         return $this;
     }
     return $this->update($this->assignTo, Assignment::EQUAL, Expression::binaryOperation($this->assignTo, $binaryOperator, $this->assignmentValue));
 }
Exemplo n.º 2
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();
     }
 }
Exemplo n.º 3
0
 public function testAssignmentToBinaryOperator()
 {
     $this->assertSame(Binary::ADDITION, Assignment::toBinaryOperator(Assignment::ADDITION));
     $this->assertSame(Binary::CONCATENATION, Assignment::toBinaryOperator(Assignment::CONCATENATE));
     $this->assertSame(null, Assignment::toBinaryOperator(Assignment::EQUAL));
     $this->assertSame(null, Assignment::toBinaryOperator(Assignment::EQUAL_REFERENCE));
     $this->assertSame(null, Assignment::toBinaryOperator('no-such-operator'));
 }