Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1028)

Unified Diff: src/string.js

Issue 126201: - Changed fast case for computing object size based on usage histogram.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/string.js
===================================================================
--- src/string.js (revision 2190)
+++ src/string.js (working copy)
@@ -370,10 +370,10 @@
// 'abcd'.replace(/(.)/g, function() { return RegExp.$1; }
// should be 'abcd' and not 'dddd' (or anything else).
function StringReplaceRegExpWithFunction(subject, regexp, replace) {
- var result = new ReplaceResultBuilder(subject);
var lastMatchInfo = DoRegExpExec(regexp, subject, 0);
if (IS_NULL(lastMatchInfo)) return subject;
+ var result = new ReplaceResultBuilder(subject);
// There's at least one match. If the regexp is global, we have to loop
// over all matches. The loop is not in C++ code here like the one in
// RegExp.prototype.exec, because of the interleaved function application.
@@ -498,39 +498,40 @@
// ECMA-262 section 15.5.4.14
function StringSplit(separator, limit) {
var subject = ToString(this);
- var result = [];
- var lim = (limit === void 0) ? 0xffffffff : ToUint32(limit);
+ limit = (limit === void 0) ? 0xffffffff : ToUint32(limit);
+ if (limit === 0) return [];
- if (lim === 0) return result;
-
// ECMA-262 says that if separator is undefined, the result should
// be an array of size 1 containing the entire string. SpiderMonkey
// and KJS have this behaviour only when no separator is given. If
// undefined is explicitly given, they convert it to a string and
// use that. We do as SpiderMonkey and KJS.
if (%_ArgumentsLength() === 0) {
- result[result.length] = subject;
- return result;
+ return [subject];
}
var length = subject.length;
- var currentIndex = 0;
- var startIndex = 0;
-
- var sep;
if (IS_REGEXP(separator)) {
- sep = separator;
- %_Log('regexp', 'regexp-split,%0S,%1r', [subject, sep]);
+ %_Log('regexp', 'regexp-split,%0S,%1r', [subject, separator]);
} else {
- sep = ToString(separator);
+ separator = ToString(separator);
+ // If the separator string is empty then return the elements in the subject.
+ if (separator.length == 0) {
+ var result = $Array(length);
+ for (var i = 0; i < length; i++) result[i] = subject[i];
+ return result;
+ }
}
if (length === 0) {
- if (splitMatch(sep, subject, 0, 0) != null) return result;
- result[result.length] = subject;
- return result;
+ if (splitMatch(separator, subject, 0, 0) != null) return [];
+ return [subject];
}
+ var currentIndex = 0;
+ var startIndex = 0;
+ var result = [];
+
while (true) {
if (startIndex === length) {
@@ -538,7 +539,7 @@
return result;
}
- var lastMatchInfo = splitMatch(sep, subject, currentIndex, startIndex);
+ var lastMatchInfo = splitMatch(separator, subject, currentIndex, startIndex);
if (IS_NULL(lastMatchInfo)) {
result[result.length] = subject.slice(currentIndex, length);
@@ -553,21 +554,18 @@
continue;
}
- result[result.length] =
- SubString(subject, currentIndex, lastMatchInfo[CAPTURE0]);
- if (result.length === lim) return result;
+ result[result.length] = SubString(subject, currentIndex, lastMatchInfo[CAPTURE0]);
+ if (result.length === limit) return result;
for (var i = 2; i < NUMBER_OF_CAPTURES(lastMatchInfo); i += 2) {
var start = lastMatchInfo[CAPTURE(i)];
var end = lastMatchInfo[CAPTURE(i + 1)];
if (start != -1 && end != -1) {
- result[result.length] = SubString(subject,
- lastMatchInfo[CAPTURE(i)],
- lastMatchInfo[CAPTURE(i + 1)]);
+ result[result.length] = SubString(subject, start, end);
} else {
result[result.length] = void 0;
}
- if (result.length === lim) return result;
+ if (result.length === limit) return result;
}
startIndex = currentIndex = endIndex;
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698