parseOn method
Parses the given context.
Overridden in concrete subclasses to implement the parser-specific logic.
Takes a parse context and returns the resulting context, which is either
a Success or Failure context.
Implementation
@override
Result<List<R>> parseOn(Context context) {
var current = context;
final elements = <R>[];
while (elements.length < min) {
final result = delegate.parseOn(current);
if (result is Failure) return result;
assert(
current.position < result.position,
'$delegate must always consume',
);
elements.add(result.value);
current = result;
}
for (;;) {
final limiter = limit.parseOn(current);
if (limiter is Failure) {
if (elements.length >= max) return limiter;
final result = delegate.parseOn(current);
if (result is Failure) return limiter;
assert(
current.position < result.position,
'$delegate must always consume',
);
elements.add(result.value);
current = result;
} else {
return current.success(elements);
}
}
}