evaluateExpr method

EvaluateExprOutput evaluateExpr(
  1. EvaluateExprInput input
)

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);
}