| 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 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 var TO_NAME; | 63 var TO_NAME; |
| 64 | 64 |
| 65 var $defaultNumber; | 65 var $defaultNumber; |
| 66 var $defaultString; | 66 var $defaultString; |
| 67 var $NaN; | 67 var $NaN; |
| 68 var $nonNumberToNumber; | 68 var $nonNumberToNumber; |
| 69 var $nonStringToString; | 69 var $nonStringToString; |
| 70 var $sameValue; | 70 var $sameValue; |
| 71 var $sameValueZero; | 71 var $sameValueZero; |
| 72 var $toBoolean; | 72 var $toBoolean; |
| 73 var $toInt32; | |
| 74 var $toInteger; | 73 var $toInteger; |
| 75 var $toLength; | 74 var $toLength; |
| 76 var $toName; | 75 var $toName; |
| 77 var $toNumber; | 76 var $toNumber; |
| 78 var $toPositiveInteger; | 77 var $toPositiveInteger; |
| 79 var $toPrimitive; | 78 var $toPrimitive; |
| 80 var $toString; | 79 var $toString; |
| 81 var $toUint32; | |
| 82 | 80 |
| 83 (function(global, utils) { | 81 (function(global, utils) { |
| 84 | 82 |
| 85 %CheckIsBootstrapping(); | 83 %CheckIsBootstrapping(); |
| 86 | 84 |
| 87 var GlobalArray = global.Array; | 85 var GlobalArray = global.Array; |
| 88 var GlobalBoolean = global.Boolean; | 86 var GlobalBoolean = global.Boolean; |
| 89 var GlobalString = global.String; | 87 var GlobalString = global.String; |
| 90 var GlobalNumber = global.Number; | 88 var GlobalNumber = global.Number; |
| 91 | 89 |
| (...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 // array. This is the fast case. If this fails, we do the slow case | 601 // array. This is the fast case. If this fails, we do the slow case |
| 604 // that takes care of more eventualities. | 602 // that takes care of more eventualities. |
| 605 if (IS_ARRAY(args)) { | 603 if (IS_ARRAY(args)) { |
| 606 length = args.length; | 604 length = args.length; |
| 607 if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength && | 605 if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength && |
| 608 IS_SPEC_FUNCTION(this)) { | 606 IS_SPEC_FUNCTION(this)) { |
| 609 return length; | 607 return length; |
| 610 } | 608 } |
| 611 } | 609 } |
| 612 | 610 |
| 613 length = (args == null) ? 0 : %$toUint32(args.length); | 611 length = (args == null) ? 0 : TO_UINT32(args.length); |
| 614 | 612 |
| 615 // We can handle any number of apply arguments if the stack is | 613 // We can handle any number of apply arguments if the stack is |
| 616 // big enough, but sanity check the value to avoid overflow when | 614 // big enough, but sanity check the value to avoid overflow when |
| 617 // multiplying with pointer size. | 615 // multiplying with pointer size. |
| 618 if (length > kSafeArgumentsLength) throw %MakeRangeError(kStackOverflow); | 616 if (length > kSafeArgumentsLength) throw %MakeRangeError(kStackOverflow); |
| 619 | 617 |
| 620 if (!IS_SPEC_FUNCTION(this)) { | 618 if (!IS_SPEC_FUNCTION(this)) { |
| 621 throw %MakeTypeError(kApplyNonFunction, %$toString(this), typeof this); | 619 throw %MakeTypeError(kApplyNonFunction, %$toString(this), typeof this); |
| 622 } | 620 } |
| 623 | 621 |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 831 | 829 |
| 832 // ES6, draft 08-24-14, section 7.1.15 | 830 // ES6, draft 08-24-14, section 7.1.15 |
| 833 function ToLength(arg) { | 831 function ToLength(arg) { |
| 834 arg = ToInteger(arg); | 832 arg = ToInteger(arg); |
| 835 if (arg < 0) return 0; | 833 if (arg < 0) return 0; |
| 836 return arg < GlobalNumber.MAX_SAFE_INTEGER ? arg | 834 return arg < GlobalNumber.MAX_SAFE_INTEGER ? arg |
| 837 : GlobalNumber.MAX_SAFE_INTEGER; | 835 : GlobalNumber.MAX_SAFE_INTEGER; |
| 838 } | 836 } |
| 839 | 837 |
| 840 | 838 |
| 841 // ECMA-262, section 9.6, page 34. | |
| 842 function ToUint32(x) { | |
| 843 if (%_IsSmi(x) && x >= 0) return x; | |
| 844 return %NumberToJSUint32(ToNumber(x)); | |
| 845 } | |
| 846 | |
| 847 | |
| 848 // ECMA-262, section 9.5, page 34 | |
| 849 function ToInt32(x) { | |
| 850 if (%_IsSmi(x)) return x; | |
| 851 return %NumberToJSInt32(ToNumber(x)); | |
| 852 } | |
| 853 | |
| 854 | |
| 855 // ES5, section 9.12 | 839 // ES5, section 9.12 |
| 856 function SameValue(x, y) { | 840 function SameValue(x, y) { |
| 857 if (typeof x != typeof y) return false; | 841 if (typeof x != typeof y) return false; |
| 858 if (IS_NUMBER(x)) { | 842 if (IS_NUMBER(x)) { |
| 859 if (NUMBER_IS_NAN(x) && NUMBER_IS_NAN(y)) return true; | 843 if (NUMBER_IS_NAN(x) && NUMBER_IS_NAN(y)) return true; |
| 860 // x is +0 and y is -0 or vice versa. | 844 // x is +0 and y is -0 or vice versa. |
| 861 if (x === 0 && y === 0 && %_IsMinusZero(x) != %_IsMinusZero(y)) { | 845 if (x === 0 && y === 0 && %_IsMinusZero(x) != %_IsMinusZero(y)) { |
| 862 return false; | 846 return false; |
| 863 } | 847 } |
| 864 } | 848 } |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 966 | 950 |
| 967 $concatIterableToArray = ConcatIterableToArray; | 951 $concatIterableToArray = ConcatIterableToArray; |
| 968 $defaultNumber = DefaultNumber; | 952 $defaultNumber = DefaultNumber; |
| 969 $defaultString = DefaultString; | 953 $defaultString = DefaultString; |
| 970 $NaN = %GetRootNaN(); | 954 $NaN = %GetRootNaN(); |
| 971 $nonNumberToNumber = NonNumberToNumber; | 955 $nonNumberToNumber = NonNumberToNumber; |
| 972 $nonStringToString = NonStringToString; | 956 $nonStringToString = NonStringToString; |
| 973 $sameValue = SameValue; | 957 $sameValue = SameValue; |
| 974 $sameValueZero = SameValueZero; | 958 $sameValueZero = SameValueZero; |
| 975 $toBoolean = ToBoolean; | 959 $toBoolean = ToBoolean; |
| 976 $toInt32 = ToInt32; | |
| 977 $toInteger = ToInteger; | 960 $toInteger = ToInteger; |
| 978 $toLength = ToLength; | 961 $toLength = ToLength; |
| 979 $toName = ToName; | 962 $toName = ToName; |
| 980 $toNumber = ToNumber; | 963 $toNumber = ToNumber; |
| 981 $toPositiveInteger = ToPositiveInteger; | 964 $toPositiveInteger = ToPositiveInteger; |
| 982 $toPrimitive = ToPrimitive; | 965 $toPrimitive = ToPrimitive; |
| 983 $toString = ToString; | 966 $toString = ToString; |
| 984 $toUint32 = ToUint32; | |
| 985 | 967 |
| 986 }) | 968 }) |
| OLD | NEW |