Revision: 3248 Author: [email protected] Date: Mon Nov 9 05:17:50 2009 Log: Inline common case of one capture when using replace with a regexp and a function.
Review URL: http://codereview.chromium.org/371065 http://code.google.com/p/v8/source/detail?r=3248 Modified: /branches/bleeding_edge/src/string.js ======================================= --- /branches/bleeding_edge/src/string.js Mon Nov 2 04:21:43 2009 +++ /branches/bleeding_edge/src/string.js Mon Nov 9 05:17:50 2009 @@ -380,12 +380,19 @@ // Unfortunately, that means this code is nearly duplicated, here and in // jsregexp.cc. if (regexp.global) { + var numberOfCaptures = NUMBER_OF_CAPTURES(matchInfo) >> 1; var previous = 0; do { - result.addSpecialSlice(previous, matchInfo[CAPTURE0]); var startOfMatch = matchInfo[CAPTURE0]; + result.addSpecialSlice(previous, startOfMatch); previous = matchInfo[CAPTURE1]; - result.add(ApplyReplacementFunction(replace, matchInfo, subject)); + if (numberOfCaptures == 1) { + var match = SubString(subject, startOfMatch, previous); + // Don't call directly to avoid exposing the built-in global object. + result.add(replace.call(null, match, startOfMatch, subject)); + } else { + result.add(ApplyReplacementFunction(replace, matchInfo, subject)); + } // Can't use matchInfo any more from here, since the function could // overwrite it. // Continue with the next match. --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
