call method

Expr call()

Implementation

Expr call() {
  Expr expr = arrayOrMap();
  while (true) {
    if (match([TokenType.LEFT_PAREN])) {
      expr = finishCall(expr);
    } else if (match([TokenType.DOT])) {
      Token name =
          consume(TokenType.IDENTIFIER, "Expect property name after '.'.");
      if (name.lexeme == 'map' ||
          name.lexeme == 'forEach' ||
          name.lexeme == 'where' ||
          name.lexeme == 'sort') {
        expr = mappingExpr(expr, name);
      } else if (name.lexeme == 'then' || name.lexeme == 'catchError') {
        expr = thenExpr(expr, name);
      } else if (name.lexeme == 'listen') {
        expr = listenCall(expr);
      } else {
        expr = Get(expr, name);
      }
    } else if (match([TokenType.LEFT_BRACKET])) {
      expr = indexingExpr(expr);
    } else {
      break;
    }
  }
  return expr;
}