| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 1395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1406 if (radix < 2 || radix > 36) { | 1406 if (radix < 2 || radix > 36) { |
| 1407 throw new $RangeError('toString() radix argument must be between 2 and 36'); | 1407 throw new $RangeError('toString() radix argument must be between 2 and 36'); |
| 1408 } | 1408 } |
| 1409 // Convert the number to a string in the given radix. | 1409 // Convert the number to a string in the given radix. |
| 1410 return %NumberToRadixString(number, radix); | 1410 return %NumberToRadixString(number, radix); |
| 1411 } | 1411 } |
| 1412 | 1412 |
| 1413 | 1413 |
| 1414 // ECMA-262 section 15.7.4.3 | 1414 // ECMA-262 section 15.7.4.3 |
| 1415 function NumberToLocaleString() { | 1415 function NumberToLocaleString() { |
| 1416 if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { | 1416 return NumberToString(); |
| 1417 throw MakeTypeError("called_on_null_or_undefined", | |
| 1418 ["Number.prototype.toLocaleString"]); | |
| 1419 } | |
| 1420 return this.toString(); | |
| 1421 } | 1417 } |
| 1422 | 1418 |
| 1423 | 1419 |
| 1424 // ECMA-262 section 15.7.4.4 | 1420 // ECMA-262 section 15.7.4.4 |
| 1425 function NumberValueOf() { | 1421 function NumberValueOf() { |
| 1426 // NOTE: Both Number objects and values can enter here as | 1422 // NOTE: Both Number objects and values can enter here as |
| 1427 // 'this'. This is not as dictated by ECMA-262. | 1423 // 'this'. This is not as dictated by ECMA-262. |
| 1428 if (!IS_NUMBER(this) && !IS_NUMBER_WRAPPER(this)) { | 1424 if (!IS_NUMBER(this) && !IS_NUMBER_WRAPPER(this)) { |
| 1429 throw new $TypeError('Number.prototype.valueOf is not generic'); | 1425 throw new $TypeError('Number.prototype.valueOf is not generic'); |
| 1430 } | 1426 } |
| 1431 return %_ValueOf(this); | 1427 return %_ValueOf(this); |
| 1432 } | 1428 } |
| 1433 | 1429 |
| 1434 | 1430 |
| 1435 // ECMA-262 section 15.7.4.5 | 1431 // ECMA-262 section 15.7.4.5 |
| 1436 function NumberToFixed(fractionDigits) { | 1432 function NumberToFixed(fractionDigits) { |
| 1433 var x = this; |
| 1434 if (!IS_NUMBER(this)) { |
| 1435 if (!IS_NUMBER_WRAPPER(this)) { |
| 1436 throw MakeTypeError("incompatible_method_receiver", |
| 1437 ["Number.prototype.toFixed", this]); |
| 1438 } |
| 1439 // Get the value of this number in case it's an object. |
| 1440 x = %_ValueOf(this); |
| 1441 } |
| 1437 var f = TO_INTEGER(fractionDigits); | 1442 var f = TO_INTEGER(fractionDigits); |
| 1443 |
| 1438 if (f < 0 || f > 20) { | 1444 if (f < 0 || f > 20) { |
| 1439 throw new $RangeError("toFixed() digits argument must be between 0 and 20"); | 1445 throw new $RangeError("toFixed() digits argument must be between 0 and 20"); |
| 1440 } | 1446 } |
| 1441 if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { | 1447 |
| 1442 throw MakeTypeError("called_on_null_or_undefined", | 1448 if (NUMBER_IS_NAN(x)) return "NaN"; |
| 1443 ["Number.prototype.toFixed"]); | 1449 if (x == 1/0) return "Infinity"; |
| 1444 } | 1450 if (x == -1/0) return "-Infinity"; |
| 1445 var x = ToNumber(this); | 1451 |
| 1446 return %NumberToFixed(x, f); | 1452 return %NumberToFixed(x, f); |
| 1447 } | 1453 } |
| 1448 | 1454 |
| 1449 | 1455 |
| 1450 // ECMA-262 section 15.7.4.6 | 1456 // ECMA-262 section 15.7.4.6 |
| 1451 function NumberToExponential(fractionDigits) { | 1457 function NumberToExponential(fractionDigits) { |
| 1452 var f = -1; | 1458 var x = this; |
| 1453 if (!IS_UNDEFINED(fractionDigits)) { | 1459 if (!IS_NUMBER(this)) { |
| 1454 f = TO_INTEGER(fractionDigits); | 1460 if (!IS_NUMBER_WRAPPER(this)) { |
| 1455 if (f < 0 || f > 20) { | 1461 throw MakeTypeError("incompatible_method_receiver", |
| 1456 throw new $RangeError( | 1462 ["Number.prototype.toExponential", this]); |
| 1457 "toExponential() argument must be between 0 and 20"); | |
| 1458 } | 1463 } |
| 1464 // Get the value of this number in case it's an object. |
| 1465 x = %_ValueOf(this); |
| 1459 } | 1466 } |
| 1460 if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { | 1467 var f = IS_UNDEFINED(fractionDigits) ? void 0 : TO_INTEGER(fractionDigits); |
| 1461 throw MakeTypeError("called_on_null_or_undefined", | 1468 |
| 1462 ["Number.prototype.toExponential"]); | 1469 if (NUMBER_IS_NAN(x)) return "NaN"; |
| 1470 if (x == 1/0) return "Infinity"; |
| 1471 if (x == -1/0) return "-Infinity"; |
| 1472 |
| 1473 if (IS_UNDEFINED(f)) { |
| 1474 f = -1; // Signal for runtime function that f is not defined. |
| 1475 } else if (f < 0 || f > 20) { |
| 1476 throw new $RangeError("toExponential() argument must be between 0 and 20"); |
| 1463 } | 1477 } |
| 1464 var x = ToNumber(this); | |
| 1465 return %NumberToExponential(x, f); | 1478 return %NumberToExponential(x, f); |
| 1466 } | 1479 } |
| 1467 | 1480 |
| 1468 | 1481 |
| 1469 // ECMA-262 section 15.7.4.7 | 1482 // ECMA-262 section 15.7.4.7 |
| 1470 function NumberToPrecision(precision) { | 1483 function NumberToPrecision(precision) { |
| 1471 if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { | 1484 var x = this; |
| 1472 throw MakeTypeError("called_on_null_or_undefined", | 1485 if (!IS_NUMBER(this)) { |
| 1473 ["Number.prototype.toPrecision"]); | 1486 if (!IS_NUMBER_WRAPPER(this)) { |
| 1487 throw MakeTypeError("incompatible_method_receiver", |
| 1488 ["Number.prototype.toPrecision", this]); |
| 1489 } |
| 1490 // Get the value of this number in case it's an object. |
| 1491 x = %_ValueOf(this); |
| 1474 } | 1492 } |
| 1475 if (IS_UNDEFINED(precision)) return ToString(%_ValueOf(this)); | 1493 if (IS_UNDEFINED(precision)) return ToString(%_ValueOf(this)); |
| 1476 var p = TO_INTEGER(precision); | 1494 var p = TO_INTEGER(precision); |
| 1495 |
| 1496 if (NUMBER_IS_NAN(x)) return "NaN"; |
| 1497 if (x == 1/0) return "Infinity"; |
| 1498 if (x == -1/0) return "-Infinity"; |
| 1499 |
| 1477 if (p < 1 || p > 21) { | 1500 if (p < 1 || p > 21) { |
| 1478 throw new $RangeError("toPrecision() argument must be between 1 and 21"); | 1501 throw new $RangeError("toPrecision() argument must be between 1 and 21"); |
| 1479 } | 1502 } |
| 1480 var x = ToNumber(this); | |
| 1481 return %NumberToPrecision(x, p); | 1503 return %NumberToPrecision(x, p); |
| 1482 } | 1504 } |
| 1483 | 1505 |
| 1484 | 1506 |
| 1485 // Harmony isFinite. | 1507 // Harmony isFinite. |
| 1486 function NumberIsFinite(number) { | 1508 function NumberIsFinite(number) { |
| 1487 return IS_NUMBER(number) && NUMBER_IS_FINITE(number); | 1509 return IS_NUMBER(number) && NUMBER_IS_FINITE(number); |
| 1488 } | 1510 } |
| 1489 | 1511 |
| 1490 | 1512 |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1677 | 1699 |
| 1678 function SetUpFunction() { | 1700 function SetUpFunction() { |
| 1679 %CheckIsBootstrapping(); | 1701 %CheckIsBootstrapping(); |
| 1680 InstallFunctions($Function.prototype, DONT_ENUM, $Array( | 1702 InstallFunctions($Function.prototype, DONT_ENUM, $Array( |
| 1681 "bind", FunctionBind, | 1703 "bind", FunctionBind, |
| 1682 "toString", FunctionToString | 1704 "toString", FunctionToString |
| 1683 )); | 1705 )); |
| 1684 } | 1706 } |
| 1685 | 1707 |
| 1686 SetUpFunction(); | 1708 SetUpFunction(); |
| OLD | NEW |