mirror of
https://github.com/janet-lang/janet
synced 2024-11-25 09:47:17 +00:00
Fix #971 - remove to rule optimization
For to and thru, we need to restore eveytime through the loop since rules need run with the right captures on the stack, especially if they have any sort of backrefs.
This commit is contained in:
parent
427f7c362e
commit
a895219d2f
@ -289,10 +289,8 @@ tail:
|
|||||||
while (text <= s->text_end) {
|
while (text <= s->text_end) {
|
||||||
CapState cs2 = cap_save(s);
|
CapState cs2 = cap_save(s);
|
||||||
next_text = peg_rule(s, rule_a, text);
|
next_text = peg_rule(s, rule_a, text);
|
||||||
if (next_text) {
|
if (next_text) break;
|
||||||
if (rule[0] == RULE_TO) cap_load(s, cs2);
|
cap_load(s, cs2);
|
||||||
break;
|
|
||||||
}
|
|
||||||
text++;
|
text++;
|
||||||
}
|
}
|
||||||
up1(s);
|
up1(s);
|
||||||
|
@ -54,5 +54,27 @@
|
|||||||
(for i 0 10
|
(for i 0 10
|
||||||
(assert (= i (os/execute [(dyn :executable) "-e" (string/format "(os/exit %d)" i)] :p)) (string "os/execute " i)))
|
(assert (= i (os/execute [(dyn :executable) "-e" (string/format "(os/exit %d)" i)] :p)) (string "os/execute " i)))
|
||||||
|
|
||||||
|
# to/thru bug
|
||||||
|
(def pattern
|
||||||
|
(peg/compile
|
||||||
|
'{:dd (sequence :d :d)
|
||||||
|
:sep (set "/-")
|
||||||
|
:date (sequence :dd :sep :dd)
|
||||||
|
:wsep (some (set " \t"))
|
||||||
|
:entry (group (sequence (capture :date) :wsep (capture :date)))
|
||||||
|
:main (some (thru :entry))}))
|
||||||
|
|
||||||
|
(def alt-pattern
|
||||||
|
(peg/compile
|
||||||
|
'{:dd (sequence :d :d)
|
||||||
|
:sep (set "/-")
|
||||||
|
:date (sequence :dd :sep :dd)
|
||||||
|
:wsep (some (set " \t"))
|
||||||
|
:entry (group (sequence (capture :date) :wsep (capture :date)))
|
||||||
|
:main (some (choice :entry 1))}))
|
||||||
|
|
||||||
|
(def text "1800-10-818-9-818 16/12\n17/12 19/12\n20/12 11/01")
|
||||||
|
(assert (deep= (peg/match pattern text) (peg/match alt-pattern text)) "to/thru bug #971")
|
||||||
|
|
||||||
(end-suite)
|
(end-suite)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user