OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 (function(global, utils) { | 5 (function(global, utils) { |
6 | 6 |
7 %CheckIsBootstrapping(); | 7 %CheckIsBootstrapping(); |
8 | 8 |
9 // ------------------------------------------------------------------- | 9 // ------------------------------------------------------------------- |
10 // Imports | 10 // Imports |
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 function StringTrimRight() { | 766 function StringTrimRight() { |
767 CHECK_OBJECT_COERCIBLE(this, "String.prototype.trimRight"); | 767 CHECK_OBJECT_COERCIBLE(this, "String.prototype.trimRight"); |
768 | 768 |
769 return %StringTrim(TO_STRING(this), false, true); | 769 return %StringTrim(TO_STRING(this), false, true); |
770 } | 770 } |
771 | 771 |
772 | 772 |
773 // ECMA-262, section 15.5.3.2 | 773 // ECMA-262, section 15.5.3.2 |
774 function StringFromCharCode(code) { | 774 function StringFromCharCode(code) { |
775 var n = %_ArgumentsLength(); | 775 var n = %_ArgumentsLength(); |
776 if (n == 1) { | 776 if (n == 1) return %_StringCharFromCode(code & 0xffff); |
777 if (!%_IsSmi(code)) code = TO_NUMBER(code); | |
778 return %_StringCharFromCode(code & 0xffff); | |
779 } | |
780 | 777 |
781 var one_byte = %NewString(n, NEW_ONE_BYTE_STRING); | 778 var one_byte = %NewString(n, NEW_ONE_BYTE_STRING); |
782 var i; | 779 var i; |
783 for (i = 0; i < n; i++) { | 780 for (i = 0; i < n; i++) { |
784 var code = %_Arguments(i); | 781 code = %_Arguments(i) & 0xffff; |
785 if (!%_IsSmi(code)) code = TO_NUMBER(code) & 0xffff; | |
786 if (code < 0) code = code & 0xffff; | |
787 if (code > 0xff) break; | 782 if (code > 0xff) break; |
788 %_OneByteSeqStringSetChar(i, code, one_byte); | 783 %_OneByteSeqStringSetChar(i, code, one_byte); |
789 } | 784 } |
790 if (i == n) return one_byte; | 785 if (i == n) return one_byte; |
791 one_byte = %TruncateString(one_byte, i); | 786 one_byte = %TruncateString(one_byte, i); |
792 | 787 |
793 var two_byte = %NewString(n - i, NEW_TWO_BYTE_STRING); | 788 var two_byte = %NewString(n - i, NEW_TWO_BYTE_STRING); |
794 for (var j = 0; i < n; i++, j++) { | 789 %_TwoByteSeqStringSetChar(0, code, two_byte); |
795 var code = %_Arguments(i); | 790 i++; |
796 if (!%_IsSmi(code)) code = TO_NUMBER(code) & 0xffff; | 791 for (var j = 1; i < n; i++, j++) { |
| 792 code = %_Arguments(i) & 0xffff; |
797 %_TwoByteSeqStringSetChar(j, code, two_byte); | 793 %_TwoByteSeqStringSetChar(j, code, two_byte); |
798 } | 794 } |
799 return one_byte + two_byte; | 795 return one_byte + two_byte; |
800 } | 796 } |
801 | 797 |
802 | 798 |
803 // ES6 draft, revision 26 (2014-07-18), section B.2.3.2.1 | 799 // ES6 draft, revision 26 (2014-07-18), section B.2.3.2.1 |
804 function HtmlEscape(str) { | 800 function HtmlEscape(str) { |
805 return %_Call(StringReplace, TO_STRING(str), /"/g, """); | 801 return %_Call(StringReplace, TO_STRING(str), /"/g, """); |
806 } | 802 } |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1169 to.StringLastIndexOf = StringLastIndexOfJS; | 1165 to.StringLastIndexOf = StringLastIndexOfJS; |
1170 to.StringMatch = StringMatchJS; | 1166 to.StringMatch = StringMatchJS; |
1171 to.StringReplace = StringReplace; | 1167 to.StringReplace = StringReplace; |
1172 to.StringSlice = StringSlice; | 1168 to.StringSlice = StringSlice; |
1173 to.StringSplit = StringSplitJS; | 1169 to.StringSplit = StringSplitJS; |
1174 to.StringSubstr = StringSubstr; | 1170 to.StringSubstr = StringSubstr; |
1175 to.StringSubstring = StringSubstring; | 1171 to.StringSubstring = StringSubstring; |
1176 }); | 1172 }); |
1177 | 1173 |
1178 }) | 1174 }) |
OLD | NEW |