• jgruber's avatar
    [regexp] Correct lastIndex behavior in RegExp.prototype[@@replace] · c0fe56e6
    jgruber authored
    @@replace has a pretty complex implementation, taking different paths
    for various situations (e.g.: global/nonglobal regexp, functional/string
    replace argument, etc.). Each of these paths must implement similar
    logic for calling into the RegExpBuiltinExec spec operation, and many
    paths get this subtly wrong.
    
    This CL fixes a couple of issues related to the way @@replace handles lastIndex:
    * All paths now respect lastIndex when calling into exec (some used to assume 0).
    * lastIndex is now advanced after a successful match for sticky regexps.
    * lastIndex is now only reset to 0 on failure for sticky regexps.
    
    BUG=v8:5361
    
    Review-Url: https://codereview.chromium.org/2685183003
    Cr-Commit-Position: refs/heads/master@{#43234}
    c0fe56e6
builtins-regexp.cc 85.4 KB