Fix cases where error recovery could infinite loop (#4257)
* Rename corpus test functions to allow easy filtering by language * Use usize for seed argument * Avoid retaining useless stack versions when reductions merge We found this problem when debugging an infinite loop that happened during error recovery when using the Zig grammar. The large number of unnecessary paused stack versions were preventing the correct recovery strategy from being tried. * Fix leaked lookahead token when reduction results in a merged stack * Enable running PHP tests in CI * Fix possible infinite loop during error recovery at EOF * Account for external scanner state changes when detecting changed ranges in subtrees
This commit is contained in:
parent
8138dba800
commit
066fd77d39
8 changed files with 110 additions and 56 deletions
|
|
@ -36,6 +36,9 @@ void ts_stack_delete(Stack *self);
|
|||
// Get the stack's current number of versions.
|
||||
uint32_t ts_stack_version_count(const Stack *self);
|
||||
|
||||
// Get the stack's current number of halted versions.
|
||||
uint32_t ts_stack_halted_version_count(Stack *self);
|
||||
|
||||
// Get the state at the top of the given version of the stack. If the stack is
|
||||
// empty, this returns the initial state, 0.
|
||||
TSStateId ts_stack_state(const Stack *self, StackVersion version);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue