parseAsync method
Experimental. Not yet fully implemented
Implementation
@override
AsyncResult<Object?> parseAsync(State<ChunkedData<I>> state) {
final result = AsyncResult<Object?>();
final input = state.input;
final pos = state.pos;
late AsyncResult<O1> r1;
late AsyncResult<O2> r2;
late AsyncResult<O3> r3;
late AsyncResult<O4> r4;
late AsyncResult<O5> r5;
late AsyncResult<O6> r6;
late AsyncResult<O7> r7;
late AsyncResult<O8> r8;
var action = 0;
void parse() {
while (true) {
switch (action) {
case 0:
r1 = p1.parseAsync(state);
action = 1;
if (r1.ok == null) {
r1.handler = parse;
return;
}
break;
case 1:
if (r1.ok == false) {
result.ok = false;
input.handler = result.handler;
return;
}
r2 = p2.parseAsync(state);
action = 2;
if (r2.ok == null) {
r2.handler = parse;
return;
}
break;
case 2:
if (r2.ok == false) {
state.pos = pos;
result.ok = false;
input.handler = result.handler;
return;
}
r3 = p3.parseAsync(state);
action = 3;
if (r3.ok == null) {
r3.handler = parse;
return;
}
break;
case 3:
if (r3.ok == false) {
state.pos = pos;
result.ok = false;
input.handler = result.handler;
return;
}
r4 = p4.parseAsync(state);
action = 4;
if (r4.ok == null) {
r4.handler = parse;
return;
}
break;
case 4:
if (r4.ok == false) {
state.pos = pos;
result.ok = false;
input.handler = result.handler;
return;
}
r5 = p5.parseAsync(state);
action = 5;
if (r5.ok == null) {
r5.handler = parse;
return;
}
break;
case 5:
if (r5.ok == false) {
state.pos = pos;
result.ok = false;
input.handler = result.handler;
return;
}
r6 = p6.parseAsync(state);
action = 6;
if (r6.ok == null) {
r6.handler = parse;
return;
}
break;
case 6:
if (r6.ok == false) {
state.pos = pos;
result.ok = false;
input.handler = result.handler;
return;
}
r7 = p7.parseAsync(state);
action = 7;
if (r7.ok == null) {
r7.handler = parse;
return;
}
break;
case 7:
if (r7.ok == false) {
state.pos = pos;
result.ok = false;
input.handler = result.handler;
return;
}
r8 = p8.parseAsync(state);
action = 8;
if (r8.ok == null) {
r8.handler = parse;
return;
}
break;
case 8:
if ((result.ok = r8.ok) == false) {
state.pos = pos;
} else {
result.value = const Result<Object?>(null);
}
input.handler = result.handler;
action = -1;
return;
default:
throw StateError('Invalid state: $action');
}
}
}
parse();
return result;
}