evalBinaryExpression method
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');
}