• jgruber's avatar
    [string] Add a fast path to String.p.replace · f4ba786d
    jgruber authored
    This adds a fast path to skip runtime calls to GetSubstitution when
    the replacer string does not contain a '$' char.
    
    Extended background:
    
    String.prototype.replace is (roughly) structured as follows:
    
    * Check if {searchValue} has a @@replace Symbol, and delegate to that if
      so. We currently implement efficient fast paths when {searchValue} is
      a String or a fast RegExp.
    * A specialized fast path for single-char {searchValue}, "long" subject
      string, and String {replaceValue} that do not contain '$' chars (yes,
      this fast path is very specialized).
    * Check for the location of the first match using StringIndexOf, and
      exit early if no match is found.
    * Finally build the return value, which is 'prefix + replacement +
      suffix', where replacement is either the result of calling {replaceValue}
      (if it is callable), or GetSubstitution(ToString({replaceValue}))
      otherwise.
    
    There's several spots that could be improved.
    
    StringIndexOf currently calls into C++ runtime for all but the simple
    1-byte, 1-char {searchValue} case. We need to finally add support for
    remaining cases.
    
    The runtime call to GetSubstitution can be skipped if the replacer
    string does not contain any '$' syntax. This CL handles that case.
    
    BUG=
    
    Review-Url: https://codereview.chromium.org/2813843002
    Cr-Commit-Position: refs/heads/master@{#44606}
    f4ba786d
runtime-strings.cc 25.9 KB