aboutsummaryrefslogtreecommitdiff
path: root/test.lua
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-06-19 11:14:02 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-06-19 11:14:02 -0300
commit9a9ee3d9ab8ce435d743d293ec43075151370200 (patch)
tree445290bfa04c2cd30f514b65b90b1d8b973f21f1 /test.lua
parenta561630f17e61548193666abf9a8b20f20462558 (diff)
downloadlpeg-9a9ee3d9ab8ce435d743d293ec43075151370200.tar.gz
lpeg-9a9ee3d9ab8ce435d743d293ec43075151370200.tar.bz2
lpeg-9a9ee3d9ab8ce435d743d293ec43075151370200.zip
Some fixes in vibibility check for back captures
Diffstat (limited to 'test.lua')
-rwxr-xr-xtest.lua29
1 files changed, 29 insertions, 0 deletions
diff --git a/test.lua b/test.lua
index cd85b31..7e61603 100755
--- a/test.lua
+++ b/test.lua
@@ -1005,6 +1005,35 @@ p = m.Cg(m.C(1) * m.C(1), "k") * m.Ct(m.Cb("k"))
1005t = p:match("ab") 1005t = p:match("ab")
1006checkeq(t, {"a", "b"}) 1006checkeq(t, {"a", "b"})
1007 1007
1008
1009do
1010 -- some basic cases
1011 assert(m.match(m.Cg(m.Cc(3), "a") * m.Cb("a"), "a") == 3)
1012 assert(m.match(m.Cg(m.C(1), 133) * m.Cb(133), "X") == "X")
1013
1014 -- first reference to 'x' should not see the group enclosing it
1015 local p = m.Cg(m.Cb('x'), 'x') * m.Cb('x')
1016 checkerr("back reference 'x' not found", m.match, p, '')
1017
1018 local p = m.Cg(m.Cb('x') * m.C(1), 'x') * m.Cb('x')
1019 checkerr("back reference 'x' not found", m.match, p, 'abc')
1020
1021 -- reference to 'x' should not see the group enclosed in another capture
1022 local s = string.rep("a", 30)
1023 local p = (m.C(1)^-4 * m.Cg(m.C(1), 'x')) / {} * m.Cb('x')
1024 checkerr("back reference 'x' not found", m.match, p, s)
1025
1026 local p = (m.C(1)^-20 * m.Cg(m.C(1), 'x')) / {} * m.Cb('x')
1027 checkerr("back reference 'x' not found", m.match, p, s)
1028
1029 -- second reference 'k' should refer to 10 and first ref. 'k'
1030 p = m.Cg(m.Cc(20), 'k') * m.Cg(m.Cc(10) * m.Cb('k') * m.C(1), 'k')
1031 * (m.Cb('k') / function (a,b,c) return a*10 + b + tonumber(c) end)
1032 -- 10 * 10 (Cc) + 20 (Cb) + 7 (C) == 127
1033 assert(p:match("756") == 127)
1034
1035end
1036
1008p = m.P(true) 1037p = m.P(true)
1009for i = 1, 10 do p = p * m.Cg(1, i) end 1038for i = 1, 10 do p = p * m.Cg(1, i) end
1010for i = 1, 10 do 1039for i = 1, 10 do