[regexp] Support the msy flags in experimental engine
The m (multiline) and s (dotall) flags just needed to be marked as allowed; the required logic was already in the regexp parser. A regexp /<x>/ without the y (sticky) flag is equivalent to the sticky regexp /.*?<x>/y. The interpreter now assumes that every regexp is sticky, and the compiler appends a preamble corresponding to /.*?/ before non-sticky regexps. To reuse existing code for compiling this preamble, the logic for each kind of quantifier is now in a separate function and called from VisitQuantifier and for the preamble. The commit also includes some improvements/fixes for character ranges: - Empty character ranges/disjunctions should never match, but before this commit they would *always* match. - The check of the range bounds in CanBeHandledVisitor was unncessary; without the unicode flag this can't be a range that can't be specified in 2-byte codepoints, and once we support unicode we simply support all codepoints. - The capacity of the list containing the complementary intervals of a character range is now calculated more accurately. Cq-Include-Trybots: luci.v8.try:v8_linux64_fyi_rel_ng Bug: v8:10765 Change-Id: I71a0e07279b4e1140c0ed1651b3714200c801de9 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2404766 Commit-Queue: Martin Bidlingmaier <mbid@google.com> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#70082}
Showing
Please
register
or
sign in
to comment