aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lpcode.c5
-rw-r--r--testlabel.lua9
2 files changed, 13 insertions, 1 deletions
diff --git a/lpcode.c b/lpcode.c
index 1ee6ed1..70a8d3c 100644
--- a/lpcode.c
+++ b/lpcode.c
@@ -192,10 +192,13 @@ int checkaux (TTree *tree, int pred) {
192 if (!checkaux(sib1(tree), pred)) return 0; 192 if (!checkaux(sib1(tree), pred)) return 0;
193 /* else return checkaux(sib2(tree), pred); */ 193 /* else return checkaux(sib2(tree), pred); */
194 tree = sib2(tree); goto tailcall; 194 tree = sib2(tree); goto tailcall;
195 case TChoice: case TLabChoice: /* labeled failure */ 195 case TChoice:
196 if (checkaux(sib2(tree), pred)) return 1; 196 if (checkaux(sib2(tree), pred)) return 1;
197 /* else return checkaux(sib1(tree), pred); */ 197 /* else return checkaux(sib1(tree), pred); */
198 tree = sib1(tree); goto tailcall; 198 tree = sib1(tree); goto tailcall;
199 case TLabChoice: /* labeled failure */
200 /* in a labeled ordered choice we do not know whether sib2 will be evaluated */
201 tree = sib1(tree); goto tailcall;
199 case TCapture: case TGrammar: case TRule: 202 case TCapture: case TGrammar: case TRule:
200 /* return checkaux(sib1(tree), pred); */ 203 /* return checkaux(sib1(tree), pred); */
201 tree = sib1(tree); goto tailcall; 204 tree = sib1(tree); goto tailcall;
diff --git a/testlabel.lua b/testlabel.lua
index d4cc815..1962fbf 100644
--- a/testlabel.lua
+++ b/testlabel.lua
@@ -101,6 +101,15 @@ assert(p:match("aa") == nil)
101p = (m.P"a" + m.T(0))^0 101p = (m.P"a" + m.T(0))^0
102assert(p:match("aa") == 3) 102assert(p:match("aa") == 3)
103 103
104-- Bug reported by Matthew Allen
105-- some optmizations performed by LPeg should not be
106-- applied in case of labeled choices
107p = m.Lc(m.P"A", m.P(true), 1) + m.P("B")
108assert(p:match("B") == 2)
109
110p = m.Lc(m.P"A", m.P(false), 1) + m.P("B")
111assert(p:match("B") == 2)
112
104 113
105--[[ 114--[[
106S -> A /{1} 'a' 115S -> A /{1} 'a'