handle edge case when building dfa from a string, where an exception was raised when our search regex contains an alternation where the second alternation is a substring of the first alternation, and add a test for it to make sure that it passes
This commit is contained in:
@@ -729,13 +729,21 @@ struct
|
||||
in
|
||||
Vector.concat [dtran, el]
|
||||
end
|
||||
else
|
||||
else if dStateIdx < Vector.length dtran then
|
||||
let
|
||||
val el = Vector.sub (dtran, dStateIdx)
|
||||
val el = Set.insertOrReplace (char, toStateIdx, el)
|
||||
in
|
||||
Vector.update (dtran, dStateIdx, el)
|
||||
end
|
||||
else
|
||||
let
|
||||
val appendLength = dStateIdx - Vector.length dtran
|
||||
val appendVecs = Vector.tabulate (appendLength, fn _ => Set.LEAF)
|
||||
val dtran = Vector.concat [dtran, appendVecs]
|
||||
in
|
||||
insert (dStateIdx, char, toStateIdx, dtran)
|
||||
end
|
||||
end
|
||||
|
||||
fun convertChar
|
||||
|
||||
@@ -67,6 +67,15 @@ struct
|
||||
in
|
||||
Expect.isTrue true
|
||||
end)
|
||||
, test
|
||||
"DfaGen does not cause exception \
|
||||
\when parsing alternation that contains a char \
|
||||
\from the previous alternation (1)"
|
||||
(fn _ =>
|
||||
(let val dfa = CaseSensitiveDfa.fromString "str|s"
|
||||
in Expect.isTrue true
|
||||
end)
|
||||
handle _ => Expect.isTrue false)
|
||||
]
|
||||
|
||||
val tests = [charEventTests]
|
||||
|
||||
Reference in New Issue
Block a user