diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2022-05-02 17:23:02 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2022-05-02 17:23:02 -0400 |
| commit | e071ac7b12260b4dcbc80f4c864706de29a6d3c9 (patch) | |
| tree | 3ba3cdf2b8420a8a3d786efdb92071969f61a249 | |
| parent | 892708a651bd6194e3fad242bcf35f0ad868c86e (diff) | |
Bugfix for left recursion
| -rw-r--r-- | match.c | 2 | ||||
| -rw-r--r-- | tests/29-left-recursion3.in | 1 | ||||
| -rw-r--r-- | tests/29-left-recursion3.out | 1 | ||||
| -rw-r--r-- | tests/29-left-recursion3.sh | 2 |
4 files changed, 6 insertions, 0 deletions
@@ -667,7 +667,9 @@ static match_t *match(match_ctx_t *ctx, const char *str, pat_t *pat) while (1) { const char *prev = m->end; rec_op.args.leftrec.match = m; + ctx2.cache = &(cache_t){0}; match_t *m2 = match(&ctx2, str, ref); + cache_destroy(&ctx2); if (!m2) break; if (m2->end <= prev) { recycle_match(&m2); diff --git a/tests/29-left-recursion3.in b/tests/29-left-recursion3.in new file mode 100644 index 0000000..0830ff2 --- /dev/null +++ b/tests/29-left-recursion3.in @@ -0,0 +1 @@ +f!!! diff --git a/tests/29-left-recursion3.out b/tests/29-left-recursion3.out new file mode 100644 index 0000000..8ca1cbc --- /dev/null +++ b/tests/29-left-recursion3.out @@ -0,0 +1 @@ +{f!!!} diff --git a/tests/29-left-recursion3.sh b/tests/29-left-recursion3.sh new file mode 100644 index 0000000..7de7379 --- /dev/null +++ b/tests/29-left-recursion3.sh @@ -0,0 +1,2 @@ +# Left recursion has some tricky edge cases like this: +bp -p 'shout: phrase `!; phrase: shout / id; phrase => "{@0}"' |
