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

Unified Diff: src/js/string.js

Issue 1427743008: Do not switch to two-byte string in String.fromCharCode if avoidable. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: also fix fast path Created 5 years, 1 month 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 | « no previous file | test/mjsunit/regress/string-fromcharcode-sideeffect.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/js/string.js
diff --git a/src/js/string.js b/src/js/string.js
index 5725b3758a4d3b862446d4499a2781e9c2d0f933..65586e29d179878355fdf76970ee0dee321b85d2 100644
--- a/src/js/string.js
+++ b/src/js/string.js
@@ -773,17 +773,12 @@ function StringTrimRight() {
// ECMA-262, section 15.5.3.2
function StringFromCharCode(code) {
var n = %_ArgumentsLength();
- if (n == 1) {
- if (!%_IsSmi(code)) code = TO_NUMBER(code);
- return %_StringCharFromCode(code & 0xffff);
- }
+ if (n == 1) return %_StringCharFromCode(code & 0xffff);
var one_byte = %NewString(n, NEW_ONE_BYTE_STRING);
var i;
for (i = 0; i < n; i++) {
- var code = %_Arguments(i);
- if (!%_IsSmi(code)) code = TO_NUMBER(code) & 0xffff;
- if (code < 0) code = code & 0xffff;
+ code = %_Arguments(i) & 0xffff;
if (code > 0xff) break;
%_OneByteSeqStringSetChar(i, code, one_byte);
}
@@ -791,9 +786,10 @@ function StringFromCharCode(code) {
one_byte = %TruncateString(one_byte, i);
var two_byte = %NewString(n - i, NEW_TWO_BYTE_STRING);
- for (var j = 0; i < n; i++, j++) {
- var code = %_Arguments(i);
- if (!%_IsSmi(code)) code = TO_NUMBER(code) & 0xffff;
+ %_TwoByteSeqStringSetChar(0, code, two_byte);
+ i++;
+ for (var j = 1; i < n; i++, j++) {
+ code = %_Arguments(i) & 0xffff;
%_TwoByteSeqStringSetChar(j, code, two_byte);
}
return one_byte + two_byte;
« no previous file with comments | « no previous file | test/mjsunit/regress/string-fromcharcode-sideeffect.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698