eval method
Implementation
dynamic eval(Expression? expression, Map<String?, dynamic> context) {
if (expression == null) throw ArgumentError.notNull('expression');
if (expression is Literal) return evalLiteral(expression, context);
if (expression is Variable) return evalVariable(expression, context);
if (expression is ThisExpression) return evalThis(expression, context);
if (expression is MemberExpression) {
return evalMemberExpression(expression, context);
}
if (expression is IndexExpression) {
return evalIndexExpression(expression, context);
}
if (expression is CallExpression) {
return evalCallExpression(expression, context);
}
if (expression is UnaryExpression) {
return evalUnaryExpression(expression, context);
}
if (expression is BinaryExpression) {
dynamic result = evalBinaryExpression(expression, context);
if (result is Decimal) {
return result.toDouble();
} else {
return result;
}
}
if (expression is ConditionalExpression) {
return evalConditionalExpression(expression, context);
}
throw ArgumentError("Unknown expression type '${expression.runtimeType}'");
}