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
-~----------~----~----~----~------~----~------~--~---

Reply via email to