diff options
| author | Ben Murdoch <benm@google.com> | 2011-05-16 14:20:40 +0100 |
|---|---|---|
| committer | Ben Murdoch <benm@google.com> | 2011-05-18 16:35:26 +0100 |
| commit | b8e0da25ee8efac3bb05cd6b2730aafbd96119f4 (patch) | |
| tree | c5ef7652343a7e4b55601fa0a4c94cf46ba09585 /src/array.js | |
| parent | 086aeeaae12517475c22695a200be45495516549 (diff) | |
| download | android_external_v8-b8e0da25ee8efac3bb05cd6b2730aafbd96119f4.tar.gz android_external_v8-b8e0da25ee8efac3bb05cd6b2730aafbd96119f4.tar.bz2 android_external_v8-b8e0da25ee8efac3bb05cd6b2730aafbd96119f4.zip | |
Update V8 to r6387 as required by WebKit r76408
Change-Id: Icfc5385b0996bd592f8b1ac8cbb44767ee09f1f6
Diffstat (limited to 'src/array.js')
| -rw-r--r-- | src/array.js | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/array.js b/src/array.js index 56f52549..0d7a7cbc 100644 --- a/src/array.js +++ b/src/array.js @@ -117,19 +117,16 @@ function Join(array, length, separator, convert) { // Fast case for one-element arrays. if (length == 1) { var e = array[0]; - if (!IS_UNDEFINED(e) || (0 in array)) { - if (IS_STRING(e)) return e; - return convert(e); - } - return ''; + if (IS_STRING(e)) return e; + return convert(e); } // Construct an array for the elements. var elements = new $Array(length); - var elements_length = 0; // We pull the empty separator check outside the loop for speed! if (separator.length == 0) { + var elements_length = 0; for (var i = 0; i < length; i++) { var e = array[i]; if (!IS_UNDEFINED(e)) { @@ -142,16 +139,25 @@ function Join(array, length, separator, convert) { if (!IS_UNDEFINED(result)) return result; return %StringBuilderConcat(elements, elements_length, ''); } - // Non-empty separator. - for (var i = 0; i < length; i++) { - var e = array[i]; - if (!IS_UNDEFINED(e)) { + // Non-empty separator case. + // If the first element is a number then use the heuristic that the + // remaining elements are also likely to be numbers. + if (!IS_NUMBER(array[0])) { + for (var i = 0; i < length; i++) { + var e = array[i]; if (!IS_STRING(e)) e = convert(e); elements[i] = e; - } else { - elements[i] = ''; } - } + } else { + for (var i = 0; i < length; i++) { + var e = array[i]; + if (IS_NUMBER(e)) elements[i] = %_NumberToString(e); + else { + if (!IS_STRING(e)) e = convert(e); + elements[i] = e; + } + } + } var result = %_FastAsciiArrayJoin(elements, separator); if (!IS_UNDEFINED(result)) return result; |
