evalBinaryExpression method

dynamic evalBinaryExpression(
  1. BinaryExpression expression,
  2. Map<String?, dynamic> context
)

Implementation

dynamic evalBinaryExpression(
    BinaryExpression expression, Map<String?, dynamic> context) {
  var left = eval(expression.left, context);
  right() => eval(expression.right, context);
  switch (expression.operator) {
    case '||':
      return left || right();
    case '??':
      return left ??
          right(); //Added by isaac for alternate to nvl. Can be expressions on each side.
    case '&&':
      return left && right();
    case '|':
      return left | right();
    case '^':
      return pow(left, right());
    case '&':
      return left & right();
    case '==':
      return left == right();
    case '!=':
      return left != right();
    case '<=':
      return left <= right();
    case '>=':
      return left >= right();
    case '<':
      return left < right();
    case '>':
      return left > right();
    case '<<':
      return left << right();
    case '>>':
      return left >> right();
    case '=': // added by olajos
      return set(context, left, right());
    case '+':
      return Decimal.parse(left.toString()) +
          Decimal.parse(right().toString());
    case '-':
      return Decimal.parse(left.toString()) -
          Decimal.parse(right().toString());
    case '*':
      return Decimal.parse(left.toString()) *
          Decimal.parse(right().toString());
    case '/':
      return Decimal.parse(left.toString()) /
          Decimal.parse(right().toString());
    case '%':
      return Decimal.parse(left.toString()) %
          Decimal.parse(right().toString());
  }
  throw ArgumentError(
      'Unknown operator ${expression.operator} in expression');
}