evaluateExpr method
Implementation
EvaluateExprOutput evaluateExpr(EvaluateExprInput input) {
if ([Type.TYPE_NUM, Type.TYPE_STR, Type.TYPE_BOOL]
.contains(input.expr.type)) {
return evaluateScalar(input);
}
if (input.expr.type == Type.TYPE_OBJ) {
final o = input.expr.obj;
if (o.keys.contains("eval")) {
return evaluateEval(input);
} else if (o.keys.contains("obj")) {
return evaluateObj(input);
} else if (o.keys.contains("arr")) {
return evaluateArr(input);
} else if (o.keys.contains("json")) {
return evaluateJson(input);
} else if (o.keys.contains("for")) {
return evaluateRangeIter(input);
} else if (o.keys.contains("get")) {
return evaluateGetElem(input);
} else if (o.keys.contains("ref")) {
return evaluateFunCall(input);
} else if (o.keys.contains("cases")) {
return evaluateCases(input);
} else if (OpUnary_Operator.values
.where((e) => e != OpUnary_Operator.UNSPECIFIED)
.any((op) => o.keys.contains(opUnaryKeyName(op)))) {
return evaluateOpUnary(input);
} else if (OpBinary_Operator.values
.where((e) => e != OpBinary_Operator.UNSPECIFIED)
.any((op) => o.keys.contains(opBinaryKeyName(op)))) {
return evaluateOpBinary(input);
} else if (OpVariadic_Operator.values
.where((e) => e != OpVariadic_Operator.UNSPECIFIED)
.any((op) => o.keys.contains(opVariadicKeyName(op)))) {
return evaluateOpVariadic(input);
}
}
return _errorUnsupportedExpr(input.path, input.expr);
}