Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make the restart work correctly. #9

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

fiddlerwoaroof
Copy link
Contributor

When the restart is active, it can be triggered via the (replace-invalid) function. For this to work, the parser that throws the error cannot be being run directly, but must be called by another parser. When the restart is triggered, it unwinds the parser stack one parser higher than the parser that signaled the condition and then fixes its input and reruns it.

This fixes a couple errors in the last pull request. However, there's a slight difficulty with the current pull-request: when #'run is called on a parser that raises an exception, invoking the restart will often lead to a loop because, once the replacement is made, it is fed back into the parser and tested again: if all a parser does is raise an exception, this will cause an infinite loop.

When the restart is active, it can be triggered via the
(replace-invalid) function.  For this to work, the parser that throws
the error cannot be being run directly, but must be called by another
parser.  When the restart is triggered, it unwinds the parser stack one
parser higher than the parser that signaled the condition and then
fixes its input and reruns it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant