parseAsync method

  1. @override
void parseAsync(
  1. State<ChunkedData<StringReader>> state,
  2. ResultCallback<String> onDone
)
override

Implementation

@override
void parseAsync(
    State<ChunkedData<StringReader>> state, ResultCallback<String> onDone) {
  if (!backtrack(state)) {
    onDone(null);
    return;
  }

  final input = state.input;
  final start = input.start;
  final pos = state.pos;
  input.buffering++;
  void parse6() {
    p6.parseAsync(state, (result) {
      if (result == null) {
        input.buffering--;
        state.pos = pos;
        onDone(null);
      } else {
        input.buffering--;
        final data = input.data;
        final source = data.source!;
        if (state.pos != pos) {
          onDone(Result(source.substring(pos - start, state.pos - start)));
        } else {
          onDone(const Result(''));
        }
      }
    });
  }

  void parse5() {
    p5.parseAsync(state, (result) {
      if (result == null) {
        input.buffering--;
        state.pos = pos;
        onDone(null);
      } else {
        input.handle(parse6);
      }
    });
  }

  void parse4() {
    p4.parseAsync(state, (result) {
      if (result == null) {
        input.buffering--;
        state.pos = pos;
        onDone(null);
      } else {
        input.handle(parse5);
      }
    });
  }

  void parse3() {
    p3.parseAsync(state, (result) {
      if (result == null) {
        input.buffering--;
        state.pos = pos;
        onDone(null);
      } else {
        input.handle(parse4);
      }
    });
  }

  void parse2() {
    p2.parseAsync(state, (result) {
      if (result == null) {
        input.buffering--;
        state.pos = pos;
        onDone(null);
      } else {
        input.handle(parse3);
      }
    });
  }

  void parse() {
    p1.parseAsync(state, (result) {
      if (result == null) {
        input.buffering--;
        onDone(null);
      } else {
        input.handle(parse2);
      }
    });
  }

  parse();
}