Skip to content

Make the restart work correctly.#9

Open
fiddlerwoaroof wants to merge 2 commits into
drewc:masterfrom
fiddlerwoaroof:master
Open

Make the restart work correctly.#9
fiddlerwoaroof wants to merge 2 commits into
drewc:masterfrom
fiddlerwoaroof:master

Conversation

@fiddlerwoaroof

Copy link
Copy Markdown
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