fail packrat parsers if they need more input
This commit changes the contract for the combinator parse functions: (1) The input state on failure must retain valid overrun and last_chunk fields. The latter is never changed, but overrun would be cleared by various combinators that backtrack in case of failure. All other fields of the input stream are still considered indeterminate after a failed parse. (2) If an overrun condition is encountered before the final chunk (last_chunk is false), the parse *must* fail. A helper want_suspend() is introduced as a shorthand for this check. Fixes the packrat/iterative/dummy test.
Showing
- src/backends/packrat.c 1 addition, 1 deletionsrc/backends/packrat.c
- src/parsers/and.c 3 additions, 3 deletionssrc/parsers/and.c
- src/parsers/butnot.c 6 additions, 4 deletionssrc/parsers/butnot.c
- src/parsers/choice.c 2 additions, 0 deletionssrc/parsers/choice.c
- src/parsers/difference.c 6 additions, 3 deletionssrc/parsers/difference.c
- src/parsers/many.c 2 additions, 0 deletionssrc/parsers/many.c
- src/parsers/not.c 5 additions, 4 deletionssrc/parsers/not.c
- src/parsers/optional.c 2 additions, 0 deletionssrc/parsers/optional.c
- src/parsers/parser_internal.h 5 additions, 0 deletionssrc/parsers/parser_internal.h
- src/parsers/permutation.c 3 additions, 0 deletionssrc/parsers/permutation.c
- src/parsers/whitespace.c 2 additions, 0 deletionssrc/parsers/whitespace.c
- src/parsers/xor.c 4 additions, 0 deletionssrc/parsers/xor.c
Loading
Please register or sign in to comment