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 |
11 | 11 |
12 var GlobalNumber = global.Number; | 12 var GlobalNumber = global.Number; |
13 var GlobalObject = global.Object; | 13 var GlobalObject = global.Object; |
14 var iteratorSymbol = utils.ImportNow("iterator_symbol"); | 14 var iteratorSymbol = utils.ImportNow("iterator_symbol"); |
15 var NaN = %GetRootNaN(); | 15 var NaN = %GetRootNaN(); |
16 var ObjectToString = utils.ImportNow("object_to_string"); | 16 var ObjectToString = utils.ImportNow("object_to_string"); |
17 | 17 |
18 // ---------------------------------------------------------------------------- | 18 // ---------------------------------------------------------------------------- |
19 | 19 |
20 | 20 |
21 // ES6 18.2.5 parseInt(string, radix) | |
22 function GlobalParseInt(string, radix) { | |
23 if (IS_UNDEFINED(radix) || radix === 10 || radix === 0) { | |
24 // Some people use parseInt instead of Math.floor. This | |
25 // optimization makes parseInt on a Smi 12 times faster (60ns | |
26 // vs 800ns). The following optimization makes parseInt on a | |
27 // non-Smi number 9 times faster (230ns vs 2070ns). Together | |
28 // they make parseInt on a string 1.4% slower (274ns vs 270ns). | |
29 if (%_IsSmi(string)) return string; | |
30 if (IS_NUMBER(string) && | |
31 ((0.01 < string && string < 1e9) || | |
32 (-1e9 < string && string < -0.01))) { | |
33 // Truncate number. | |
34 return string | 0; | |
35 } | |
36 string = TO_STRING(string); | |
37 radix = radix | 0; | |
38 } else { | |
39 // The spec says ToString should be evaluated before ToInt32. | |
40 string = TO_STRING(string); | |
41 radix = TO_INT32(radix); | |
42 if (!(radix == 0 || (2 <= radix && radix <= 36))) { | |
43 return NaN; | |
44 } | |
45 } | |
46 | |
47 if (%_HasCachedArrayIndex(string) && | |
48 (radix == 0 || radix == 10)) { | |
49 return %_GetCachedArrayIndex(string); | |
50 } | |
51 return %StringParseInt(string, radix); | |
52 } | |
53 | |
54 | |
55 // ---------------------------------------------------------------------------- | |
56 | |
57 // Set up global object. | 21 // Set up global object. |
58 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY; | 22 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY; |
59 | 23 |
60 utils.InstallConstants(global, [ | 24 utils.InstallConstants(global, [ |
61 // ES6 18.1.1 | 25 // ES6 18.1.1 |
62 "Infinity", INFINITY, | 26 "Infinity", INFINITY, |
63 // ES6 18.1.2 | 27 // ES6 18.1.2 |
64 "NaN", NaN, | 28 "NaN", NaN, |
65 // ES6 18.1.3 | 29 // ES6 18.1.3 |
66 "undefined", UNDEFINED, | 30 "undefined", UNDEFINED, |
67 ]); | 31 ]); |
68 | 32 |
69 // Set up non-enumerable function on the global object. | |
70 utils.InstallFunctions(global, DONT_ENUM, [ | |
71 "parseInt", GlobalParseInt, | |
72 ]); | |
73 | |
74 | 33 |
75 // ---------------------------------------------------------------------------- | 34 // ---------------------------------------------------------------------------- |
76 // Object | 35 // Object |
77 | 36 |
78 // ES6 19.1.3.5 Object.prototype.toLocaleString([reserved1 [,reserved2]]) | 37 // ES6 19.1.3.5 Object.prototype.toLocaleString([reserved1 [,reserved2]]) |
79 function ObjectToLocaleString() { | 38 function ObjectToLocaleString() { |
80 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString"); | 39 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString"); |
81 return this.toString(); | 40 return this.toString(); |
82 } | 41 } |
83 | 42 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 // ECMA-262 section 15.7.3.5. | 111 // ECMA-262 section 15.7.3.5. |
153 "POSITIVE_INFINITY", INFINITY, | 112 "POSITIVE_INFINITY", INFINITY, |
154 | 113 |
155 // --- Harmony constants (no spec refs until settled.) | 114 // --- Harmony constants (no spec refs until settled.) |
156 | 115 |
157 "MAX_SAFE_INTEGER", 9007199254740991, | 116 "MAX_SAFE_INTEGER", 9007199254740991, |
158 "MIN_SAFE_INTEGER", -9007199254740991, | 117 "MIN_SAFE_INTEGER", -9007199254740991, |
159 "EPSILON", 2.220446049250313e-16, | 118 "EPSILON", 2.220446049250313e-16, |
160 ]); | 119 ]); |
161 | 120 |
162 // Harmony Number constructor additions | |
163 utils.InstallFunctions(GlobalNumber, DONT_ENUM, [ | |
164 "parseInt", GlobalParseInt, | |
165 ]); | |
166 | |
167 | |
168 | 121 |
169 // ---------------------------------------------------------------------------- | 122 // ---------------------------------------------------------------------------- |
170 // Iterator related spec functions. | 123 // Iterator related spec functions. |
171 | 124 |
172 // ES6 7.4.1 GetIterator(obj, method) | 125 // ES6 7.4.1 GetIterator(obj, method) |
173 function GetIterator(obj, method) { | 126 function GetIterator(obj, method) { |
174 if (IS_UNDEFINED(method)) { | 127 if (IS_UNDEFINED(method)) { |
175 method = obj[iteratorSymbol]; | 128 method = obj[iteratorSymbol]; |
176 } | 129 } |
177 if (!IS_CALLABLE(method)) { | 130 if (!IS_CALLABLE(method)) { |
(...skipping 13 matching lines...) Expand all Loading... |
191 to.GetIterator = GetIterator; | 144 to.GetIterator = GetIterator; |
192 to.GetMethod = GetMethod; | 145 to.GetMethod = GetMethod; |
193 to.ObjectHasOwnProperty = GlobalObject.prototype.hasOwnProperty; | 146 to.ObjectHasOwnProperty = GlobalObject.prototype.hasOwnProperty; |
194 }); | 147 }); |
195 | 148 |
196 %InstallToContext([ | 149 %InstallToContext([ |
197 "object_value_of", ObjectValueOf, | 150 "object_value_of", ObjectValueOf, |
198 ]); | 151 ]); |
199 | 152 |
200 }) | 153 }) |
OLD | NEW |