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.