cascadeExpression method

Parser<ValueNode> cascadeExpression()

Implementation

Parser<ValueNode> cascadeExpression() =>
    seq2(
      ref0(keywordExpression),
      seq2(ref1(token, ';'), ref0(message)).star(),
    ).map2((first, rest) {
      if (rest.isEmpty) return first;
      final cascade = CascadeNode();
      cascade.messages.add(first as MessageNode);
      final receiver = cascade.receiver;
      for (final (semicolon, (tokens, args)) in rest) {
        final msg = MessageNode(receiver);
        msg.selectorToken.addAll(tokens);
        msg.arguments.addAll(args);
        cascade.messages.add(msg);
        cascade.semicolons.add(semicolon);
      }
      return cascade;
    });