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 $toNumber; | 22 var $toNumber; |
23 var $toPositiveInteger; | 23 var $toPositiveInteger; |
24 var $toPrimitive; | |
25 var $toString; | 24 var $toString; |
26 | 25 |
27 var harmony_tolength = false; | 26 var harmony_tolength = false; |
28 | 27 |
29 (function(global, utils) { | 28 (function(global, utils) { |
30 | 29 |
31 %CheckIsBootstrapping(); | 30 %CheckIsBootstrapping(); |
32 | 31 |
33 var GlobalArray = global.Array; | 32 var GlobalArray = global.Array; |
34 var GlobalBoolean = global.Boolean; | 33 var GlobalBoolean = global.Boolean; |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 function CONCAT_ITERABLE_TO_ARRAY(iterable) { | 168 function CONCAT_ITERABLE_TO_ARRAY(iterable) { |
170 return %concat_iterable_to_array(this, iterable); | 169 return %concat_iterable_to_array(this, iterable); |
171 }; | 170 }; |
172 | 171 |
173 | 172 |
174 /* ------------------------------------- | 173 /* ------------------------------------- |
175 - - - C o n v e r s i o n s - - - | 174 - - - C o n v e r s i o n s - - - |
176 ------------------------------------- | 175 ------------------------------------- |
177 */ | 176 */ |
178 | 177 |
179 // ECMA-262, section 9.1, page 30. Use null/undefined for no hint, | |
180 // (1) for number hint, and (2) for string hint. | |
181 function ToPrimitive(x, hint) { | |
182 if (!IS_SPEC_OBJECT(x)) return x; | |
183 if (hint == NO_HINT) hint = (IS_DATE(x)) ? STRING_HINT : NUMBER_HINT; | |
184 return (hint == NUMBER_HINT) ? DefaultNumber(x) : DefaultString(x); | |
185 } | |
186 | |
187 | |
188 // ECMA-262, section 9.2, page 30 | 178 // ECMA-262, section 9.2, page 30 |
189 function ToBoolean(x) { | 179 function ToBoolean(x) { |
190 if (IS_BOOLEAN(x)) return x; | 180 if (IS_BOOLEAN(x)) return x; |
191 if (IS_STRING(x)) return x.length != 0; | 181 if (IS_STRING(x)) return x.length != 0; |
192 if (x == null) return false; | 182 if (x == null) return false; |
193 if (IS_NUMBER(x)) return !((x == 0) || NUMBER_IS_NAN(x)); | 183 if (IS_NUMBER(x)) return !((x == 0) || NUMBER_IS_NAN(x)); |
194 return true; | 184 return true; |
195 } | 185 } |
196 | 186 |
197 | 187 |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 $defaultString = DefaultString; | 360 $defaultString = DefaultString; |
371 $NaN = %GetRootNaN(); | 361 $NaN = %GetRootNaN(); |
372 $nonNumberToNumber = NonNumberToNumber; | 362 $nonNumberToNumber = NonNumberToNumber; |
373 $nonStringToString = NonStringToString; | 363 $nonStringToString = NonStringToString; |
374 $sameValue = SameValue; | 364 $sameValue = SameValue; |
375 $sameValueZero = SameValueZero; | 365 $sameValueZero = SameValueZero; |
376 $toInteger = ToInteger; | 366 $toInteger = ToInteger; |
377 $toLength = ToLength; | 367 $toLength = ToLength; |
378 $toNumber = ToNumber; | 368 $toNumber = ToNumber; |
379 $toPositiveInteger = ToPositiveInteger; | 369 $toPositiveInteger = ToPositiveInteger; |
380 $toPrimitive = ToPrimitive; | |
381 $toString = ToString; | 370 $toString = ToString; |
382 | 371 |
383 %InstallToContext([ | 372 %InstallToContext([ |
384 "apply_prepare_builtin", APPLY_PREPARE, | 373 "apply_prepare_builtin", APPLY_PREPARE, |
385 "concat_iterable_to_array_builtin", CONCAT_ITERABLE_TO_ARRAY, | 374 "concat_iterable_to_array_builtin", CONCAT_ITERABLE_TO_ARRAY, |
386 "reflect_apply_prepare_builtin", REFLECT_APPLY_PREPARE, | 375 "reflect_apply_prepare_builtin", REFLECT_APPLY_PREPARE, |
387 "reflect_construct_prepare_builtin", REFLECT_CONSTRUCT_PREPARE, | 376 "reflect_construct_prepare_builtin", REFLECT_CONSTRUCT_PREPARE, |
388 ]); | 377 ]); |
389 | 378 |
390 %InstallToContext([ | 379 %InstallToContext([ |
391 "concat_iterable_to_array", ConcatIterableToArray, | 380 "concat_iterable_to_array", ConcatIterableToArray, |
392 "non_number_to_number", NonNumberToNumber, | 381 "non_number_to_number", NonNumberToNumber, |
393 "non_string_to_string", NonStringToString, | 382 "non_string_to_string", NonStringToString, |
394 "to_integer_fun", ToInteger, | 383 "to_integer_fun", ToInteger, |
395 "to_length_fun", ToLength, | 384 "to_length_fun", ToLength, |
396 "to_number_fun", ToNumber, | 385 "to_number_fun", ToNumber, |
397 "to_primitive", ToPrimitive, | |
398 "to_string_fun", ToString, | 386 "to_string_fun", ToString, |
399 ]); | 387 ]); |
400 | 388 |
401 utils.Export(function(to) { | 389 utils.Export(function(to) { |
402 to.ToBoolean = ToBoolean; | 390 to.ToBoolean = ToBoolean; |
403 to.ToLength = ToLength; | 391 to.ToLength = ToLength; |
404 to.ToNumber = ToNumber; | 392 to.ToNumber = ToNumber; |
405 to.ToPrimitive = ToPrimitive; | |
406 to.ToString = ToString; | 393 to.ToString = ToString; |
407 }); | 394 }); |
408 | 395 |
409 }) | 396 }) |
OLD | NEW |