parseExprList<T extends ASTNode> method

List<T> parseExprList<T extends ASTNode>({
  1. required String endToken,
  2. String? separateToken,
  3. required T? parseFunction(),
})

A functional programming way to parse expression seperated by comma, such as parameter list, argumetn list, list, group... etc. the comma after the last expression is optional. Note that this method will not consume either the start or the end mark.

Implementation

List<T> parseExprList<T extends ASTNode>({
  required String endToken,
  String? separateToken,
  required T? Function() parseFunction,
}) {
  final List<T> listResult = [];
  while (curTok.lexeme != endToken && curTok.lexeme != Token.endOfFile) {
    // deal with comments or empty liens before spread syntax
    final precedings = savePrecedings();
    if (curTok.lexeme == endToken) break;
    final expr = parseFunction();
    if (expr != null) {
      expr.precedings = precedings;
      listResult.add(expr);
      final hasSeparateToken =
          handleTrailing(expr, separateToken: separateToken);
      if (separateToken != null && !hasSeparateToken) {
        break;
      }
    }
  }
  return listResult;
}