| 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 20 matching lines...) Expand all Loading... |
| 31 %CheckIsBootstrapping(); | 31 %CheckIsBootstrapping(); |
| 32 | 32 |
| 33 var GlobalArray = global.Array; | 33 var GlobalArray = global.Array; |
| 34 var GlobalBoolean = global.Boolean; | 34 var GlobalBoolean = global.Boolean; |
| 35 var GlobalString = global.String; | 35 var GlobalString = global.String; |
| 36 var isConcatSpreadableSymbol = | 36 var isConcatSpreadableSymbol = |
| 37 utils.ImportNow("is_concat_spreadable_symbol"); | 37 utils.ImportNow("is_concat_spreadable_symbol"); |
| 38 | 38 |
| 39 // ---------------------------------------------------------------------------- | 39 // ---------------------------------------------------------------------------- |
| 40 | 40 |
| 41 /* ----------------------------------- | |
| 42 - - - C o m p a r i s o n - - - | |
| 43 ----------------------------------- | |
| 44 */ | |
| 45 | |
| 46 // ECMA-262, section 11.8.5, page 53. The 'ncr' parameter is used as | |
| 47 // the result when either (or both) the operands are NaN. | |
| 48 function COMPARE(x, ncr) { | |
| 49 var left; | |
| 50 var right; | |
| 51 // Fast cases for string, numbers and undefined compares. | |
| 52 if (IS_STRING(this)) { | |
| 53 if (IS_STRING(x)) return %_StringCompare(this, x); | |
| 54 if (IS_UNDEFINED(x)) return ncr; | |
| 55 left = this; | |
| 56 } else if (IS_NUMBER(this)) { | |
| 57 if (IS_NUMBER(x)) return %NumberCompare(this, x, ncr); | |
| 58 if (IS_UNDEFINED(x)) return ncr; | |
| 59 left = this; | |
| 60 } else if (IS_UNDEFINED(this)) { | |
| 61 if (!IS_UNDEFINED(x)) { | |
| 62 %to_primitive(x, NUMBER_HINT); | |
| 63 } | |
| 64 return ncr; | |
| 65 } else if (IS_UNDEFINED(x)) { | |
| 66 %to_primitive(this, NUMBER_HINT); | |
| 67 return ncr; | |
| 68 } else { | |
| 69 left = %to_primitive(this, NUMBER_HINT); | |
| 70 } | |
| 71 | |
| 72 right = %to_primitive(x, NUMBER_HINT); | |
| 73 if (IS_STRING(left) && IS_STRING(right)) { | |
| 74 return %_StringCompare(left, right); | |
| 75 } else { | |
| 76 var left_number = %to_number_fun(left); | |
| 77 var right_number = %to_number_fun(right); | |
| 78 if (NUMBER_IS_NAN(left_number) || NUMBER_IS_NAN(right_number)) return ncr; | |
| 79 return %NumberCompare(left_number, right_number, ncr); | |
| 80 } | |
| 81 } | |
| 82 | |
| 83 // Strong mode COMPARE throws if an implicit conversion would be performed | |
| 84 function COMPARE_STRONG(x, ncr) { | |
| 85 if (IS_STRING(this) && IS_STRING(x)) return %_StringCompare(this, x); | |
| 86 if (IS_NUMBER(this) && IS_NUMBER(x)) return %NumberCompare(this, x, ncr); | |
| 87 | |
| 88 throw %make_type_error(kStrongImplicitConversion); | |
| 89 } | |
| 90 | |
| 91 | |
| 92 /* ----------------------------- | 41 /* ----------------------------- |
| 93 - - - H e l p e r s - - - | 42 - - - H e l p e r s - - - |
| 94 ----------------------------- | 43 ----------------------------- |
| 95 */ | 44 */ |
| 96 | 45 |
| 97 function APPLY_PREPARE(args) { | 46 function APPLY_PREPARE(args) { |
| 98 var length; | 47 var length; |
| 99 | 48 |
| 100 // First check that the receiver is callable. | 49 // First check that the receiver is callable. |
| 101 if (!IS_CALLABLE(this)) { | 50 if (!IS_CALLABLE(this)) { |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 $sameValueZero = SameValueZero; | 375 $sameValueZero = SameValueZero; |
| 427 $toInteger = ToInteger; | 376 $toInteger = ToInteger; |
| 428 $toLength = ToLength; | 377 $toLength = ToLength; |
| 429 $toNumber = ToNumber; | 378 $toNumber = ToNumber; |
| 430 $toPositiveInteger = ToPositiveInteger; | 379 $toPositiveInteger = ToPositiveInteger; |
| 431 $toPrimitive = ToPrimitive; | 380 $toPrimitive = ToPrimitive; |
| 432 $toString = ToString; | 381 $toString = ToString; |
| 433 | 382 |
| 434 %InstallToContext([ | 383 %InstallToContext([ |
| 435 "apply_prepare_builtin", APPLY_PREPARE, | 384 "apply_prepare_builtin", APPLY_PREPARE, |
| 436 "compare_builtin", COMPARE, | |
| 437 "compare_strong_builtin", COMPARE_STRONG, | |
| 438 "concat_iterable_to_array_builtin", CONCAT_ITERABLE_TO_ARRAY, | 385 "concat_iterable_to_array_builtin", CONCAT_ITERABLE_TO_ARRAY, |
| 439 "reflect_apply_prepare_builtin", REFLECT_APPLY_PREPARE, | 386 "reflect_apply_prepare_builtin", REFLECT_APPLY_PREPARE, |
| 440 "reflect_construct_prepare_builtin", REFLECT_CONSTRUCT_PREPARE, | 387 "reflect_construct_prepare_builtin", REFLECT_CONSTRUCT_PREPARE, |
| 441 ]); | 388 ]); |
| 442 | 389 |
| 443 %InstallToContext([ | 390 %InstallToContext([ |
| 444 "concat_iterable_to_array", ConcatIterableToArray, | 391 "concat_iterable_to_array", ConcatIterableToArray, |
| 445 "non_number_to_number", NonNumberToNumber, | 392 "non_number_to_number", NonNumberToNumber, |
| 446 "non_string_to_string", NonStringToString, | 393 "non_string_to_string", NonStringToString, |
| 447 "to_integer_fun", ToInteger, | 394 "to_integer_fun", ToInteger, |
| 448 "to_length_fun", ToLength, | 395 "to_length_fun", ToLength, |
| 449 "to_number_fun", ToNumber, | 396 "to_number_fun", ToNumber, |
| 450 "to_primitive", ToPrimitive, | 397 "to_primitive", ToPrimitive, |
| 451 "to_string_fun", ToString, | 398 "to_string_fun", ToString, |
| 452 ]); | 399 ]); |
| 453 | 400 |
| 454 utils.Export(function(to) { | 401 utils.Export(function(to) { |
| 455 to.ToBoolean = ToBoolean; | 402 to.ToBoolean = ToBoolean; |
| 456 to.ToLength = ToLength; | 403 to.ToLength = ToLength; |
| 457 to.ToNumber = ToNumber; | 404 to.ToNumber = ToNumber; |
| 458 to.ToPrimitive = ToPrimitive; | 405 to.ToPrimitive = ToPrimitive; |
| 459 to.ToString = ToString; | 406 to.ToString = ToString; |
| 460 }); | 407 }); |
| 461 | 408 |
| 462 }) | 409 }) |
| OLD | NEW |