Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ConstExprEvaluator.php

function ConstExprEvaluator::evaluateBinaryOp

Return value

mixed

1 call to ConstExprEvaluator::evaluateBinaryOp()
ConstExprEvaluator::evaluate in vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php

File

vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php, line 177

Class

ConstExprEvaluator
Evaluates constant expressions.

Namespace

PhpParser

Code

private function evaluateBinaryOp(Expr\BinaryOp $expr) {
    if ($expr instanceof Expr\BinaryOp\Coalesce && $expr->left instanceof Expr\ArrayDimFetch) {
        // This needs to be special cased to respect BP_VAR_IS fetch semantics
        return $this->evaluate($expr->left->var)[$this->evaluate($expr->left->dim)] ?? $this->evaluate($expr->right);
    }
    // The evaluate() calls are repeated in each branch, because some of the operators are
    // short-circuiting and evaluating the RHS in advance may be illegal in that case
    $l = $expr->left;
    $r = $expr->right;
    switch ($expr->getOperatorSigil()) {
        case '&':
            return $this->evaluate($l) & $this->evaluate($r);
        case '|':
            return $this->evaluate($l) | $this->evaluate($r);
        case '^':
            return $this->evaluate($l) ^ $this->evaluate($r);
        case '&&':
            return $this->evaluate($l) && $this->evaluate($r);
        case '||':
            return $this->evaluate($l) || $this->evaluate($r);
        case '??':
            return $this->evaluate($l) ?? $this->evaluate($r);
        case '.':
            return $this->evaluate($l) . $this->evaluate($r);
        case '/':
            return $this->evaluate($l) / $this->evaluate($r);
        case '==':
            return $this->evaluate($l) == $this->evaluate($r);
        case '>':
            return $this->evaluate($l) > $this->evaluate($r);
        case '>=':
            return $this->evaluate($l) >= $this->evaluate($r);
        case '===':
            return $this->evaluate($l) === $this->evaluate($r);
        case 'and':
            return $this->evaluate($l) and $this->evaluate($r);
        case 'or':
            return $this->evaluate($l) or $this->evaluate($r);
        case 'xor':
            return $this->evaluate($l) xor $this->evaluate($r);
        case '-':
            return $this->evaluate($l) - $this->evaluate($r);
        case '%':
            return $this->evaluate($l) % $this->evaluate($r);
        case '*':
            return $this->evaluate($l) * $this->evaluate($r);
        case '!=':
            return $this->evaluate($l) != $this->evaluate($r);
        case '!==':
            return $this->evaluate($l) !== $this->evaluate($r);
        case '+':
            return $this->evaluate($l) + $this->evaluate($r);
        case '**':
            return $this->evaluate($l) ** $this->evaluate($r);
        case '<<':
            return $this->evaluate($l) << $this->evaluate($r);
        case '>>':
            return $this->evaluate($l) >> $this->evaluate($r);
        case '<':
            return $this->evaluate($l) < $this->evaluate($r);
        case '<=':
            return $this->evaluate($l) <= $this->evaluate($r);
        case '<=>':
            return $this->evaluate($l) <=> $this->evaluate($r);
    }
    throw new \Exception('Should not happen');
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal