Reviewers: Jakob, Dan Ehrenberg,

Message:
PTAL

Description:
[es6] Optimize String{Starts, Ends}With

Replace Math{Min,Max}
Direct string comparison

Compared to https://codereview.chromium.org/1321853006/
single character
 found at true
77
P found at false
70
က found at false
70


BUG=v8:4384
LOG=N

Please review this at https://codereview.chromium.org/1324353002/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+21, -11 lines):
  M src/string.js


Index: src/string.js
diff --git a/src/string.js b/src/string.js
index 1db65bb0bad25b677c7fa38144976c6a39f4ca18..163caac7be01cdb24646d2fd9c0cd587b5da9287 100644
--- a/src/string.js
+++ b/src/string.js
@@ -15,8 +15,6 @@ var GlobalRegExp = global.RegExp;
 var GlobalString = global.String;
 var InternalArray = utils.InternalArray;
 var InternalPackedArray = utils.InternalPackedArray;
-var MathMax;
-var MathMin;
 var RegExpExec;
 var RegExpExecNoTests;
 var RegExpLastMatchInfo;
@@ -27,8 +25,6 @@ var ToString;
 utils.Import(function(from) {
   ArrayIndexOf = from.ArrayIndexOf;
   ArrayJoin = from.ArrayJoin;
-  MathMax = from.MathMax;
-  MathMin = from.MathMin;
   RegExpExec = from.RegExpExec;
   RegExpExecNoTests = from.RegExpExecNoTests;
   RegExpLastMatchInfo = from.RegExpLastMatchInfo;
@@ -991,13 +987,20 @@ function StringStartsWith(searchString /* position */) { // length == 1
   }

   var s_len = s.length;
-  var start = MathMin(MathMax(pos, 0), s_len);
+  if (pos < 0) pos = 0;
+  if (pos > s_len) pos = s_len;
   var ss_len = ss.length;
-  if (ss_len + start > s_len) {
+
+  if (ss_len + pos > s_len) {
     return false;
   }

-  return %_SubString(s, start, start + ss_len) === ss;
+  for (var i = 0; i < ss_len; i++) {
+    if (%_StringCharCodeAt(s, pos + i) !== %_StringCharCodeAt(ss, i))
+      return false;
+  }
+
+  return true;
 }


@@ -1021,14 +1024,21 @@ function StringEndsWith(searchString /* position */) { // length == 1
     }
   }

-  var end = MathMin(MathMax(pos, 0), s_len);
+  if (pos < 0) pos = 0;
+  if (pos > s_len) pos = s_len;
   var ss_len = ss.length;
-  var start = end - ss_len;
-  if (start < 0) {
+  pos = pos - ss_len;
+
+  if (pos < 0) {
     return false;
   }

-  return %_SubString(s, start, start + ss_len) === ss;
+  for (var i = 0; i < ss_len; i++) {
+    if (%_StringCharCodeAt(s, pos + i) !== %_StringCharCodeAt(ss, i))
+      return false;
+  }
+
+  return true;
 }




--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to