| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 // This files contains runtime support implemented in JavaScript. | 5 // This files contains runtime support implemented in JavaScript. |
| 6 | 6 |
| 7 // CAUTION: Some of the functions specified in this file are called | 7 // CAUTION: Some of the functions specified in this file are called |
| 8 // directly from compiled code. These are the functions with names in | 8 // directly from compiled code. These are the functions with names in |
| 9 // ALL CAPS. The compiled code passes the first argument in 'this'. | 9 // ALL CAPS. The compiled code passes the first argument in 'this'. |
| 10 | 10 |
| 11 | 11 |
| 12 // The following declarations are shared with other native JS files. | 12 // The following declarations are shared with other native JS files. |
| 13 // They are all declared at this one spot to avoid redeclaration errors. | 13 // They are all declared at this one spot to avoid redeclaration errors. |
| 14 var $defaultString; | 14 var $defaultString; |
| 15 var $NaN; | 15 var $NaN; |
| 16 var $nonNumberToNumber; | 16 var $nonNumberToNumber; |
| 17 var $nonStringToString; | 17 var $nonStringToString; |
| 18 var $sameValue; | 18 var $sameValue; |
| 19 var $sameValueZero; | 19 var $sameValueZero; |
| 20 var $toInteger; | 20 var $toInteger; |
| 21 var $toLength; | 21 var $toLength; |
| 22 var $toName; | |
| 23 var $toNumber; | 22 var $toNumber; |
| 24 var $toPositiveInteger; | 23 var $toPositiveInteger; |
| 25 var $toPrimitive; | 24 var $toPrimitive; |
| 26 var $toString; | 25 var $toString; |
| 27 | 26 |
| 28 (function(global, utils) { | 27 (function(global, utils) { |
| 29 | 28 |
| 30 %CheckIsBootstrapping(); | 29 %CheckIsBootstrapping(); |
| 31 | 30 |
| 32 var GlobalArray = global.Array; | 31 var GlobalArray = global.Array; |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 function IN(x) { | 426 function IN(x) { |
| 428 if (!IS_SPEC_OBJECT(x)) { | 427 if (!IS_SPEC_OBJECT(x)) { |
| 429 throw %make_type_error(kInvalidInOperatorUse, this, x); | 428 throw %make_type_error(kInvalidInOperatorUse, this, x); |
| 430 } | 429 } |
| 431 if (%_IsNonNegativeSmi(this)) { | 430 if (%_IsNonNegativeSmi(this)) { |
| 432 if (IS_ARRAY(x) && %_HasFastPackedElements(x)) { | 431 if (IS_ARRAY(x) && %_HasFastPackedElements(x)) { |
| 433 return this < x.length; | 432 return this < x.length; |
| 434 } | 433 } |
| 435 return %HasElement(x, this); | 434 return %HasElement(x, this); |
| 436 } | 435 } |
| 437 return %HasProperty(x, %to_name(this)); | 436 return %HasProperty(x, this); |
| 438 } | 437 } |
| 439 | 438 |
| 440 | 439 |
| 441 function CALL_NON_FUNCTION() { | 440 function CALL_NON_FUNCTION() { |
| 442 var delegate = %GetFunctionDelegate(this); | 441 var delegate = %GetFunctionDelegate(this); |
| 443 if (!IS_FUNCTION(delegate)) { | 442 if (!IS_FUNCTION(delegate)) { |
| 444 var callsite = %RenderCallSite(); | 443 var callsite = %RenderCallSite(); |
| 445 if (callsite == "") callsite = typeof this; | 444 if (callsite == "") callsite = typeof this; |
| 446 throw %make_type_error(kCalledNonCallable, callsite); | 445 throw %make_type_error(kCalledNonCallable, callsite); |
| 447 } | 446 } |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 return %to_number_fun(this); | 608 return %to_number_fun(this); |
| 610 } | 609 } |
| 611 | 610 |
| 612 | 611 |
| 613 // Convert the receiver to a string - forward to ToString. | 612 // Convert the receiver to a string - forward to ToString. |
| 614 function TO_STRING() { | 613 function TO_STRING() { |
| 615 return %to_string_fun(this); | 614 return %to_string_fun(this); |
| 616 } | 615 } |
| 617 | 616 |
| 618 | 617 |
| 619 // Convert the receiver to a string or symbol - forward to ToName. | |
| 620 function TO_NAME() { | |
| 621 return %to_name(this); | |
| 622 } | |
| 623 | |
| 624 | |
| 625 /* ------------------------------------- | 618 /* ------------------------------------- |
| 626 - - - C o n v e r s i o n s - - - | 619 - - - C o n v e r s i o n s - - - |
| 627 ------------------------------------- | 620 ------------------------------------- |
| 628 */ | 621 */ |
| 629 | 622 |
| 630 // ECMA-262, section 9.1, page 30. Use null/undefined for no hint, | 623 // ECMA-262, section 9.1, page 30. Use null/undefined for no hint, |
| 631 // (1) for number hint, and (2) for string hint. | 624 // (1) for number hint, and (2) for string hint. |
| 632 function ToPrimitive(x, hint) { | 625 function ToPrimitive(x, hint) { |
| 633 if (!IS_SPEC_OBJECT(x)) return x; | 626 if (!IS_SPEC_OBJECT(x)) return x; |
| 634 if (hint == NO_HINT) hint = (IS_DATE(x)) ? STRING_HINT : NUMBER_HINT; | 627 if (hint == NO_HINT) hint = (IS_DATE(x)) ? STRING_HINT : NUMBER_HINT; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 | 676 |
| 684 function NonStringToString(x) { | 677 function NonStringToString(x) { |
| 685 if (IS_NUMBER(x)) return %_NumberToString(x); | 678 if (IS_NUMBER(x)) return %_NumberToString(x); |
| 686 if (IS_BOOLEAN(x)) return x ? 'true' : 'false'; | 679 if (IS_BOOLEAN(x)) return x ? 'true' : 'false'; |
| 687 if (IS_UNDEFINED(x)) return 'undefined'; | 680 if (IS_UNDEFINED(x)) return 'undefined'; |
| 688 // Types that can't be converted to string are caught in DefaultString. | 681 // Types that can't be converted to string are caught in DefaultString. |
| 689 return (IS_NULL(x)) ? 'null' : ToString(DefaultString(x)); | 682 return (IS_NULL(x)) ? 'null' : ToString(DefaultString(x)); |
| 690 } | 683 } |
| 691 | 684 |
| 692 | 685 |
| 693 // ES6 symbols | |
| 694 function ToName(x) { | |
| 695 return IS_SYMBOL(x) ? x : ToString(x); | |
| 696 } | |
| 697 | |
| 698 | |
| 699 // ECMA-262, section 9.4, page 34. | 686 // ECMA-262, section 9.4, page 34. |
| 700 function ToInteger(x) { | 687 function ToInteger(x) { |
| 701 if (%_IsSmi(x)) return x; | 688 if (%_IsSmi(x)) return x; |
| 702 return %NumberToInteger(ToNumber(x)); | 689 return %NumberToInteger(ToNumber(x)); |
| 703 } | 690 } |
| 704 | 691 |
| 705 | 692 |
| 706 // ES6, draft 08-24-14, section 7.1.15 | 693 // ES6, draft 08-24-14, section 7.1.15 |
| 707 function ToLength(arg) { | 694 function ToLength(arg) { |
| 708 arg = ToInteger(arg); | 695 arg = ToInteger(arg); |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 826 // Exports | 813 // Exports |
| 827 | 814 |
| 828 $defaultString = DefaultString; | 815 $defaultString = DefaultString; |
| 829 $NaN = %GetRootNaN(); | 816 $NaN = %GetRootNaN(); |
| 830 $nonNumberToNumber = NonNumberToNumber; | 817 $nonNumberToNumber = NonNumberToNumber; |
| 831 $nonStringToString = NonStringToString; | 818 $nonStringToString = NonStringToString; |
| 832 $sameValue = SameValue; | 819 $sameValue = SameValue; |
| 833 $sameValueZero = SameValueZero; | 820 $sameValueZero = SameValueZero; |
| 834 $toInteger = ToInteger; | 821 $toInteger = ToInteger; |
| 835 $toLength = ToLength; | 822 $toLength = ToLength; |
| 836 $toName = ToName; | |
| 837 $toNumber = ToNumber; | 823 $toNumber = ToNumber; |
| 838 $toPositiveInteger = ToPositiveInteger; | 824 $toPositiveInteger = ToPositiveInteger; |
| 839 $toPrimitive = ToPrimitive; | 825 $toPrimitive = ToPrimitive; |
| 840 $toString = ToString; | 826 $toString = ToString; |
| 841 | 827 |
| 842 %InstallToContext([ | 828 %InstallToContext([ |
| 843 "add_builtin", ADD, | 829 "add_builtin", ADD, |
| 844 "add_strong_builtin", ADD_STRONG, | 830 "add_strong_builtin", ADD_STRONG, |
| 845 "apply_prepare_builtin", APPLY_PREPARE, | 831 "apply_prepare_builtin", APPLY_PREPARE, |
| 846 "bit_and_builtin", BIT_AND, | 832 "bit_and_builtin", BIT_AND, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 870 "sar_strong_builtin", SAR_STRONG, | 856 "sar_strong_builtin", SAR_STRONG, |
| 871 "shl_builtin", SHL, | 857 "shl_builtin", SHL, |
| 872 "shl_strong_builtin", SHL_STRONG, | 858 "shl_strong_builtin", SHL_STRONG, |
| 873 "shr_builtin", SHR, | 859 "shr_builtin", SHR, |
| 874 "shr_strong_builtin", SHR_STRONG, | 860 "shr_strong_builtin", SHR_STRONG, |
| 875 "stack_overflow_builtin", STACK_OVERFLOW, | 861 "stack_overflow_builtin", STACK_OVERFLOW, |
| 876 "string_add_left_builtin", STRING_ADD_LEFT, | 862 "string_add_left_builtin", STRING_ADD_LEFT, |
| 877 "string_add_right_builtin", STRING_ADD_RIGHT, | 863 "string_add_right_builtin", STRING_ADD_RIGHT, |
| 878 "sub_builtin", SUB, | 864 "sub_builtin", SUB, |
| 879 "sub_strong_builtin", SUB_STRONG, | 865 "sub_strong_builtin", SUB_STRONG, |
| 880 "to_name_builtin", TO_NAME, | |
| 881 "to_string_builtin", TO_STRING, | 866 "to_string_builtin", TO_STRING, |
| 882 ]); | 867 ]); |
| 883 | 868 |
| 884 %InstallToContext([ | 869 %InstallToContext([ |
| 885 "concat_iterable_to_array", ConcatIterableToArray, | 870 "concat_iterable_to_array", ConcatIterableToArray, |
| 886 "non_number_to_number", NonNumberToNumber, | 871 "non_number_to_number", NonNumberToNumber, |
| 887 "non_string_to_string", NonStringToString, | 872 "non_string_to_string", NonStringToString, |
| 888 "to_integer_fun", ToInteger, | 873 "to_integer_fun", ToInteger, |
| 889 "to_length_fun", ToLength, | 874 "to_length_fun", ToLength, |
| 890 "to_name", ToName, | |
| 891 "to_number_fun", ToNumber, | 875 "to_number_fun", ToNumber, |
| 892 "to_primitive", ToPrimitive, | 876 "to_primitive", ToPrimitive, |
| 893 "to_string_fun", ToString, | 877 "to_string_fun", ToString, |
| 894 ]); | 878 ]); |
| 895 | 879 |
| 896 utils.Export(function(to) { | 880 utils.Export(function(to) { |
| 897 to.ToBoolean = ToBoolean; | 881 to.ToBoolean = ToBoolean; |
| 898 to.ToLength = ToLength; | 882 to.ToLength = ToLength; |
| 899 to.ToName = ToName; | |
| 900 to.ToNumber = ToNumber; | 883 to.ToNumber = ToNumber; |
| 901 to.ToPrimitive = ToPrimitive; | 884 to.ToPrimitive = ToPrimitive; |
| 902 to.ToString = ToString; | 885 to.ToString = ToString; |
| 903 }); | 886 }); |
| 904 | 887 |
| 905 }) | 888 }) |
| OLD | NEW |