• Martin Bidlingmaier's avatar
    [regexp] Support the msy flags in experimental engine · e6e9cbac
    Martin Bidlingmaier authored
    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: 's avatarJakob Gruber <jgruber@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#70082}
    e6e9cbac
runtime-regexp.cc 67.1 KB