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 FLAG_harmony_tostring; | |
13 var GlobalArray = global.Array; | 12 var GlobalArray = global.Array; |
14 var GlobalBoolean = global.Boolean; | 13 var GlobalBoolean = global.Boolean; |
15 var GlobalFunction = global.Function; | 14 var GlobalFunction = global.Function; |
16 var GlobalNumber = global.Number; | 15 var GlobalNumber = global.Number; |
17 var GlobalObject = global.Object; | 16 var GlobalObject = global.Object; |
18 var InternalArray = utils.InternalArray; | 17 var InternalArray = utils.InternalArray; |
19 var iteratorSymbol = utils.ImportNow("iterator_symbol"); | 18 var iteratorSymbol = utils.ImportNow("iterator_symbol"); |
20 var MakeRangeError; | 19 var MakeRangeError; |
21 var MakeSyntaxError; | 20 var MakeSyntaxError; |
22 var MakeTypeError; | 21 var MakeTypeError; |
23 var MathAbs; | 22 var MathAbs; |
24 var NaN = %GetRootNaN(); | 23 var NaN = %GetRootNaN(); |
| 24 var ObjectToString = utils.ImportNow("object_to_string"); |
25 var ObserveBeginPerformSplice; | 25 var ObserveBeginPerformSplice; |
26 var ObserveEndPerformSplice; | 26 var ObserveEndPerformSplice; |
27 var ObserveEnqueueSpliceRecord; | 27 var ObserveEnqueueSpliceRecord; |
28 var SameValue = utils.ImportNow("SameValue"); | 28 var SameValue = utils.ImportNow("SameValue"); |
29 var StringIndexOf; | 29 var StringIndexOf; |
30 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); | 30 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); |
31 | 31 |
32 utils.Import(function(from) { | 32 utils.Import(function(from) { |
33 MakeRangeError = from.MakeRangeError; | 33 MakeRangeError = from.MakeRangeError; |
34 MakeSyntaxError = from.MakeSyntaxError; | 34 MakeSyntaxError = from.MakeSyntaxError; |
35 MakeTypeError = from.MakeTypeError; | 35 MakeTypeError = from.MakeTypeError; |
36 MathAbs = from.MathAbs; | 36 MathAbs = from.MathAbs; |
37 ObserveBeginPerformSplice = from.ObserveBeginPerformSplice; | 37 ObserveBeginPerformSplice = from.ObserveBeginPerformSplice; |
38 ObserveEndPerformSplice = from.ObserveEndPerformSplice; | 38 ObserveEndPerformSplice = from.ObserveEndPerformSplice; |
39 ObserveEnqueueSpliceRecord = from.ObserveEnqueueSpliceRecord; | 39 ObserveEnqueueSpliceRecord = from.ObserveEnqueueSpliceRecord; |
40 StringIndexOf = from.StringIndexOf; | 40 StringIndexOf = from.StringIndexOf; |
41 }); | 41 }); |
42 | 42 |
43 utils.ImportFromExperimental(function(from) { | |
44 FLAG_harmony_tostring = from.FLAG_harmony_tostring; | |
45 }); | |
46 | |
47 // ---------------------------------------------------------------------------- | 43 // ---------------------------------------------------------------------------- |
48 | 44 |
49 | 45 |
50 // ES6 18.2.3 isNaN(number) | 46 // ES6 18.2.3 isNaN(number) |
51 function GlobalIsNaN(number) { | 47 function GlobalIsNaN(number) { |
52 number = TO_NUMBER(number); | 48 number = TO_NUMBER(number); |
53 return NUMBER_IS_NAN(number); | 49 return NUMBER_IS_NAN(number); |
54 } | 50 } |
55 | 51 |
56 | 52 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 "isFinite", GlobalIsFinite, | 133 "isFinite", GlobalIsFinite, |
138 "parseInt", GlobalParseInt, | 134 "parseInt", GlobalParseInt, |
139 "parseFloat", GlobalParseFloat, | 135 "parseFloat", GlobalParseFloat, |
140 "eval", GlobalEval | 136 "eval", GlobalEval |
141 ]); | 137 ]); |
142 | 138 |
143 | 139 |
144 // ---------------------------------------------------------------------------- | 140 // ---------------------------------------------------------------------------- |
145 // Object | 141 // Object |
146 | 142 |
147 // ES6 19.1.3.6 Object.prototype.toString() | |
148 function ObjectToString() { | |
149 if (IS_UNDEFINED(this)) return "[object Undefined]"; | |
150 if (IS_NULL(this)) return "[object Null]"; | |
151 var O = TO_OBJECT(this); | |
152 var builtinTag = %_ClassOf(O); | |
153 var tag; | |
154 | |
155 // TODO(caitp): cannot wait to get rid of this flag :> | |
156 if (FLAG_harmony_tostring) { | |
157 tag = O[toStringTagSymbol]; | |
158 if (!IS_STRING(tag)) { | |
159 tag = builtinTag; | |
160 } | |
161 } else { | |
162 tag = builtinTag; | |
163 } | |
164 | |
165 return `[object ${tag}]`; | |
166 } | |
167 | |
168 | |
169 // ES6 19.1.3.5 Object.prototype.toLocaleString([reserved1 [,reserved2]]) | 143 // ES6 19.1.3.5 Object.prototype.toLocaleString([reserved1 [,reserved2]]) |
170 function ObjectToLocaleString() { | 144 function ObjectToLocaleString() { |
171 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString"); | 145 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString"); |
172 return this.toString(); | 146 return this.toString(); |
173 } | 147 } |
174 | 148 |
175 | 149 |
176 // ES6 19.1.3.7 Object.prototype.valueOf() | 150 // ES6 19.1.3.7 Object.prototype.valueOf() |
177 function ObjectValueOf() { | 151 function ObjectValueOf() { |
178 return TO_OBJECT(this); | 152 return TO_OBJECT(this); |
(...skipping 1329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1508 to.IsNaN = GlobalIsNaN; | 1482 to.IsNaN = GlobalIsNaN; |
1509 to.NewFunctionString = NewFunctionString; | 1483 to.NewFunctionString = NewFunctionString; |
1510 to.NumberIsNaN = NumberIsNaN; | 1484 to.NumberIsNaN = NumberIsNaN; |
1511 to.ObjectDefineProperties = ObjectDefineProperties; | 1485 to.ObjectDefineProperties = ObjectDefineProperties; |
1512 to.ObjectDefineProperty = ObjectDefineProperty; | 1486 to.ObjectDefineProperty = ObjectDefineProperty; |
1513 to.ObjectFreeze = ObjectFreezeJS; | 1487 to.ObjectFreeze = ObjectFreezeJS; |
1514 to.ObjectHasOwnProperty = ObjectHasOwnProperty; | 1488 to.ObjectHasOwnProperty = ObjectHasOwnProperty; |
1515 to.ObjectIsFrozen = ObjectIsFrozen; | 1489 to.ObjectIsFrozen = ObjectIsFrozen; |
1516 to.ObjectIsSealed = ObjectIsSealed; | 1490 to.ObjectIsSealed = ObjectIsSealed; |
1517 to.ObjectKeys = ObjectKeys; | 1491 to.ObjectKeys = ObjectKeys; |
1518 to.ObjectToString = ObjectToString; | |
1519 }); | 1492 }); |
1520 | 1493 |
1521 %InstallToContext([ | 1494 %InstallToContext([ |
1522 "global_eval_fun", GlobalEval, | 1495 "global_eval_fun", GlobalEval, |
1523 "object_value_of", ObjectValueOf, | 1496 "object_value_of", ObjectValueOf, |
1524 "object_to_string", ObjectToString, | |
1525 ]); | 1497 ]); |
1526 | 1498 |
1527 }) | 1499 }) |
OLD | NEW |