public override Parser <TInput> VisitRule <TOutput>(RuleParser <TInput, TOutput> parser) { if (state.LastResult < 0) { // last parser failed, so fail the whole rule state.InputLength = -state.InputLength + state.LastResult; output.SetCount(state.OriginalOutputCount); return(null); } else { state.InputLength += state.LastResult; if (state.State >= parser.Parsers.Count) { var value = parser.ListProducer(output, state.OutputStart); output.SetCount(state.OutputStart); output.Add(value); return(null); } else { var next = parser.Parsers[state.State]; state.State++; state.NextOutputStart = output.Count; return(next); } } }