arguments property

Parser<List<Expression>> get arguments

Implementation

Parser<List<Expression>> get arguments {
  // Non-empty argument list: expression followed by zero or more (comma + expression)
  final nonEmptyArgs = (expression & (char(',').trim() & expression).star())
      .map<List<Expression>>((values) {
    final first = values[0] as Expression;
    final rest = values[1] as List;
    final result = <Expression>[first];

    for (var pair in rest) {
      // pair is a list: [comma_char, expression]
      // The & operator ensures both comma AND expression must be present
      result.add(pair[1] as Expression);
    }
    return result;
  });

  // Allow either non-empty args or empty args (for empty parentheses)
  return nonEmptyArgs.or(epsilon().map((_) => <Expression>[])).cast<List<Expression>>();
}