Inline common case of one capture when using replace with a regexp and
a function. Review URL: http://codereview.chromium.org/371065 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3248 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
8ad022d544
commit
a29255e334
@ -380,12 +380,19 @@ function StringReplaceRegExpWithFunction(subject, regexp, replace) {
|
||||
// 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.
|
||||
|
Loading…
Reference in New Issue
Block a user