Chromium Code Reviews| 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 // 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 29 matching lines...) Expand all Loading... | |
| 40 var $Date = global.Date; | 40 var $Date = global.Date; |
| 41 | 41 |
| 42 // Helper function to throw error. | 42 // Helper function to throw error. |
| 43 function ThrowDateTypeError() { | 43 function ThrowDateTypeError() { |
| 44 throw new $TypeError('this is not a Date object.'); | 44 throw new $TypeError('this is not a Date object.'); |
| 45 } | 45 } |
| 46 | 46 |
| 47 // ECMA 262 - 5.2 | 47 // ECMA 262 - 5.2 |
| 48 function Modulo(value, remainder) { | 48 function Modulo(value, remainder) { |
| 49 var mod = value % remainder; | 49 var mod = value % remainder; |
| 50 // Guard against returning -0. | 50 // All uses of this function for dates should produce a Smi. |
| 51 if (mod == 0) return 0; | 51 return (mod >= 0 ? mod : mod + remainder) | 0; |
| 52 return mod >= 0 ? mod : mod + remainder; | |
| 53 } | 52 } |
| 54 | 53 |
| 55 | 54 |
| 56 function TimeWithinDay(time) { | 55 function TimeWithinDay(time) { |
| 57 return Modulo(time, msPerDay); | 56 return Modulo(time, msPerDay); |
| 58 } | 57 } |
| 59 | 58 |
| 60 | 59 |
| 61 // ECMA 262 - 15.9.1.3 | 60 // ECMA 262 - 15.9.1.3 |
| 62 function DaysInYear(year) { | 61 function DaysInYear(year) { |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 448 0 <= TO_INTEGER(year) && | 447 0 <= TO_INTEGER(year) && |
| 449 TO_INTEGER(year) <= 99) ? 1900 + TO_INTEGER(year) : year; | 448 TO_INTEGER(year) <= 99) ? 1900 + TO_INTEGER(year) : year; |
| 450 var day = MakeDay(year, month, date); | 449 var day = MakeDay(year, month, date); |
| 451 var time = MakeTime(hours, minutes, seconds, ms); | 450 var time = MakeTime(hours, minutes, seconds, ms); |
| 452 value = TimeClip(UTC(MakeDate(day, time))); | 451 value = TimeClip(UTC(MakeDate(day, time))); |
| 453 } | 452 } |
| 454 SET_DATE_VALUE(this, value); | 453 SET_DATE_VALUE(this, value); |
| 455 }); | 454 }); |
| 456 | 455 |
| 457 | 456 |
| 457 function ResetDate(date, time) { | |
| 458 SET_DATE_VALUE(date, time); | |
| 459 // Cache aggressively in case of a reset - we will typically use most fields. | |
| 460 if (NUMBER_IS_NAN(time)) { | |
| 461 SET_DATE_LOCAL(date, time); | |
| 462 SET_DATE_YEAR(date, time); | |
| 463 SET_DATE_MONTH(date, time); | |
| 464 SET_DATE_DAY(date, time); | |
| 465 SET_DATE_HOUR(date, time); | |
| 466 SET_DATE_MIN(date, time); | |
| 467 SET_DATE_SEC(date, time); | |
| 468 SET_DATE_WEEKDAY(date, time); | |
| 469 } else { | |
| 470 var local = LocalTimeNoCheck(time); | |
| 471 SET_DATE_LOCAL(date, local_time_offset); | |
| 472 SET_DATE_YEAR(date, YearFromTime(local)); | |
| 473 SET_DATE_MONTH(date, MonthFromTime(local)); | |
| 474 SET_DATE_DAY(date, DateFromTime(local)); | |
| 475 SET_DATE_HOUR(date, HOUR_FROM_TIME(local)); | |
| 476 SET_DATE_MIN(date, MIN_FROM_TIME(local)); | |
| 477 SET_DATE_SEC(date, SEC_FROM_TIME(local)); | |
| 478 SET_DATE_WEEKDAY(date, WeekDay(local)); | |
| 479 } | |
| 480 | |
| 481 return time; | |
| 482 } | |
| 483 | |
| 484 | |
| 458 %FunctionSetPrototype($Date, new $Date($NaN)); | 485 %FunctionSetPrototype($Date, new $Date($NaN)); |
| 459 | 486 |
| 460 | 487 |
| 461 var WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; | 488 var WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; |
| 462 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', | 489 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', |
| 463 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; | 490 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; |
| 464 | 491 |
| 465 | 492 |
| 466 function TwoDigitString(value) { | 493 function TwoDigitString(value) { |
| 467 return value < 10 ? "0" + value : "" + value; | 494 return value < 10 ? "0" + value : "" + value; |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 631 | 658 |
| 632 | 659 |
| 633 // ECMA 262 - 15.9.5.9 | 660 // ECMA 262 - 15.9.5.9 |
| 634 function DateGetTime() { | 661 function DateGetTime() { |
| 635 return DATE_VALUE(this); | 662 return DATE_VALUE(this); |
| 636 } | 663 } |
| 637 | 664 |
| 638 | 665 |
| 639 // ECMA 262 - 15.9.5.10 | 666 // ECMA 262 - 15.9.5.10 |
| 640 function DateGetFullYear() { | 667 function DateGetFullYear() { |
| 641 var t = DATE_VALUE(this); | 668 var t = DATE_YEAR(this); |
| 642 if (NUMBER_IS_NAN(t)) return t; | 669 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t; |
| 670 t = DATE_VALUE_UNCHECKED(this); | |
| 643 var cache = Date_cache; | 671 var cache = Date_cache; |
| 644 if (cache.time === t) return cache.year; | 672 if (cache.time === t) return cache.year; |
| 645 return YearFromTime(LocalTimeNoCheck(t)); | 673 t = LocalTimeNoCheck(t); |
| 674 // SET_DATE_LOCAL(this, t); | |
|
ulan
2012/03/08 08:12:42
Commented code here and below.
rossberg
2012/03/08 09:53:41
Done.
| |
| 675 if (!NUMBER_IS_NAN(t)) t = YearFromTime(t); | |
| 676 // SET_DATE_YEAR(this, t); | |
| 677 return t; | |
| 646 } | 678 } |
| 647 | 679 |
| 648 | 680 |
| 649 // ECMA 262 - 15.9.5.11 | 681 // ECMA 262 - 15.9.5.11 |
| 650 function DateGetUTCFullYear() { | 682 function DateGetUTCFullYear() { |
| 651 var t = DATE_VALUE(this); | 683 var t = DATE_VALUE(this); |
| 652 if (NUMBER_IS_NAN(t)) return t; | 684 if (NUMBER_IS_NAN(t)) return t; |
| 653 return YearFromTime(t); | 685 return YearFromTime(t); |
| 654 } | 686 } |
| 655 | 687 |
| 656 | 688 |
| 657 // ECMA 262 - 15.9.5.12 | 689 // ECMA 262 - 15.9.5.12 |
| 658 function DateGetMonth() { | 690 function DateGetMonth() { |
| 659 var t = DATE_VALUE(this); | 691 var t = DATE_MONTH(this); |
| 660 if (NUMBER_IS_NAN(t)) return t; | 692 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t; |
| 661 return MonthFromTime(LocalTimeNoCheck(t)); | 693 ResetDate(this, DATE_VALUE_UNCHECKED(this)); |
| 694 return DATE_MONTH(this); | |
| 662 } | 695 } |
| 663 | 696 |
| 664 | 697 |
| 665 // ECMA 262 - 15.9.5.13 | 698 // ECMA 262 - 15.9.5.13 |
| 666 function DateGetUTCMonth() { | 699 function DateGetUTCMonth() { |
| 667 var t = DATE_VALUE(this); | 700 var t = DATE_VALUE(this); |
| 668 if (NUMBER_IS_NAN(t)) return t; | 701 if (NUMBER_IS_NAN(t)) return t; |
| 669 return MonthFromTime(t); | 702 return MonthFromTime(t); |
| 670 } | 703 } |
| 671 | 704 |
| 672 | 705 |
| 673 // ECMA 262 - 15.9.5.14 | 706 // ECMA 262 - 15.9.5.14 |
| 674 function DateGetDate() { | 707 function DateGetDate() { |
| 675 var t = DATE_VALUE(this); | 708 var t = DATE_DAY(this); |
| 676 if (NUMBER_IS_NAN(t)) return t; | 709 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t; |
| 677 return DateFromTime(LocalTimeNoCheck(t)); | 710 ResetDate(this, DATE_VALUE_UNCHECKED(this)); |
| 711 return DATE_DAY(this); | |
| 678 } | 712 } |
| 679 | 713 |
| 680 | 714 |
| 681 // ECMA 262 - 15.9.5.15 | 715 // ECMA 262 - 15.9.5.15 |
| 682 function DateGetUTCDate() { | 716 function DateGetUTCDate() { |
| 683 var t = DATE_VALUE(this); | 717 var t = DATE_VALUE(this); |
| 684 return NAN_OR_DATE_FROM_TIME(t); | 718 return NAN_OR_DATE_FROM_TIME(t); |
| 685 } | 719 } |
| 686 | 720 |
| 687 | 721 |
| 688 // ECMA 262 - 15.9.5.16 | 722 // ECMA 262 - 15.9.5.16 |
| 689 function DateGetDay() { | 723 function DateGetDay() { |
| 690 var t = DATE_VALUE(this); | 724 var t = DATE_WEEKDAY(this); |
| 691 if (NUMBER_IS_NAN(t)) return t; | 725 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t; |
| 692 return WeekDay(LocalTimeNoCheck(t)); | 726 ResetDate(this, DATE_VALUE_UNCHECKED(this)); |
| 727 return DATE_WEEKDAY(this); | |
| 693 } | 728 } |
| 694 | 729 |
| 695 | 730 |
| 696 // ECMA 262 - 15.9.5.17 | 731 // ECMA 262 - 15.9.5.17 |
| 697 function DateGetUTCDay() { | 732 function DateGetUTCDay() { |
| 698 var t = DATE_VALUE(this); | 733 var t = DATE_VALUE(this); |
| 699 if (NUMBER_IS_NAN(t)) return t; | 734 if (NUMBER_IS_NAN(t)) return t; |
| 700 return WeekDay(t); | 735 return WeekDay(t); |
| 701 } | 736 } |
| 702 | 737 |
| 703 | 738 |
| 704 // ECMA 262 - 15.9.5.18 | 739 // ECMA 262 - 15.9.5.18 |
| 705 function DateGetHours() { | 740 function DateGetHours() { |
| 706 var t = DATE_VALUE(this); | 741 var t = DATE_HOUR(this); |
| 707 if (NUMBER_IS_NAN(t)) return t; | 742 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t; |
| 708 return HOUR_FROM_TIME(LocalTimeNoCheck(t)); | 743 ResetDate(this, DATE_VALUE_UNCHECKED(this)); |
| 744 return DATE_HOUR(this); | |
| 709 } | 745 } |
| 710 | 746 |
| 711 | 747 |
| 712 // ECMA 262 - 15.9.5.19 | 748 // ECMA 262 - 15.9.5.19 |
| 713 function DateGetUTCHours() { | 749 function DateGetUTCHours() { |
| 714 var t = DATE_VALUE(this); | 750 var t = DATE_VALUE(this); |
| 715 if (NUMBER_IS_NAN(t)) return t; | 751 if (NUMBER_IS_NAN(t)) return t; |
| 716 return HOUR_FROM_TIME(t); | 752 return HOUR_FROM_TIME(t); |
| 717 } | 753 } |
| 718 | 754 |
| 719 | 755 |
| 720 // ECMA 262 - 15.9.5.20 | 756 // ECMA 262 - 15.9.5.20 |
| 721 function DateGetMinutes() { | 757 function DateGetMinutes() { |
| 722 var t = DATE_VALUE(this); | 758 var t = DATE_MIN(this); |
| 723 if (NUMBER_IS_NAN(t)) return t; | 759 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t; |
| 724 return MIN_FROM_TIME(LocalTimeNoCheck(t)); | 760 ResetDate(this, DATE_VALUE_UNCHECKED(this)); |
| 761 return DATE_MIN(this); | |
| 725 } | 762 } |
| 726 | 763 |
| 727 | 764 |
| 728 // ECMA 262 - 15.9.5.21 | 765 // ECMA 262 - 15.9.5.21 |
| 729 function DateGetUTCMinutes() { | 766 function DateGetUTCMinutes() { |
| 730 var t = DATE_VALUE(this); | 767 var t = DATE_VALUE(this); |
| 731 return NAN_OR_MIN_FROM_TIME(t); | 768 return NAN_OR_MIN_FROM_TIME(t); |
| 732 } | 769 } |
| 733 | 770 |
| 734 | 771 |
| 735 // ECMA 262 - 15.9.5.22 | 772 // ECMA 262 - 15.9.5.22 |
| 736 function DateGetSeconds() { | 773 function DateGetSeconds() { |
| 737 var t = DATE_VALUE(this); | 774 var t = DATE_SEC(this); |
| 738 if (NUMBER_IS_NAN(t)) return t; | 775 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t; |
| 739 return SEC_FROM_TIME(LocalTimeNoCheck(t)); | 776 ResetDate(this, DATE_VALUE_UNCHECKED(this)); |
| 777 return DATE_SEC(this); | |
| 740 } | 778 } |
| 741 | 779 |
| 742 | 780 |
| 743 // ECMA 262 - 15.9.5.23 | 781 // ECMA 262 - 15.9.5.23 |
| 744 function DateGetUTCSeconds() { | 782 function DateGetUTCSeconds() { |
| 745 var t = DATE_VALUE(this); | 783 var t = DATE_VALUE(this); |
| 746 return NAN_OR_SEC_FROM_TIME(t); | 784 return NAN_OR_SEC_FROM_TIME(t); |
| 747 } | 785 } |
| 748 | 786 |
| 749 | 787 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 766 function DateGetTimezoneOffset() { | 804 function DateGetTimezoneOffset() { |
| 767 var t = DATE_VALUE(this); | 805 var t = DATE_VALUE(this); |
| 768 if (NUMBER_IS_NAN(t)) return t; | 806 if (NUMBER_IS_NAN(t)) return t; |
| 769 return (t - LocalTimeNoCheck(t)) / msPerMinute; | 807 return (t - LocalTimeNoCheck(t)) / msPerMinute; |
| 770 } | 808 } |
| 771 | 809 |
| 772 | 810 |
| 773 // ECMA 262 - 15.9.5.27 | 811 // ECMA 262 - 15.9.5.27 |
| 774 function DateSetTime(ms) { | 812 function DateSetTime(ms) { |
| 775 if (!IS_DATE(this)) ThrowDateTypeError(); | 813 if (!IS_DATE(this)) ThrowDateTypeError(); |
| 776 return SET_DATE_VALUE(this, TimeClip(ToNumber(ms))); | 814 return ResetDate(this, TimeClip(ToNumber(ms))); |
| 777 } | 815 } |
| 778 | 816 |
| 779 | 817 |
| 780 // ECMA 262 - 15.9.5.28 | 818 // ECMA 262 - 15.9.5.28 |
| 781 function DateSetMilliseconds(ms) { | 819 function DateSetMilliseconds(ms) { |
| 782 var t = LocalTime(DATE_VALUE(this)); | 820 var t = LocalTime(DATE_VALUE(this)); |
| 783 ms = ToNumber(ms); | 821 ms = ToNumber(ms); |
| 784 var time = MakeTime(HOUR_FROM_TIME(t), | 822 var time = MakeTime(HOUR_FROM_TIME(t), |
| 785 MIN_FROM_TIME(t), | 823 MIN_FROM_TIME(t), |
| 786 SEC_FROM_TIME(t), | 824 SEC_FROM_TIME(t), |
| 787 ms); | 825 ms); |
| 788 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(DAY(t), time)))); | 826 return ResetDate(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
| 789 } | 827 } |
| 790 | 828 |
| 791 | 829 |
| 792 // ECMA 262 - 15.9.5.29 | 830 // ECMA 262 - 15.9.5.29 |
| 793 function DateSetUTCMilliseconds(ms) { | 831 function DateSetUTCMilliseconds(ms) { |
| 794 var t = DATE_VALUE(this); | 832 var t = DATE_VALUE(this); |
| 795 ms = ToNumber(ms); | 833 ms = ToNumber(ms); |
| 796 var time = MakeTime(HOUR_FROM_TIME(t), | 834 var time = MakeTime(HOUR_FROM_TIME(t), |
| 797 MIN_FROM_TIME(t), | 835 MIN_FROM_TIME(t), |
| 798 SEC_FROM_TIME(t), | 836 SEC_FROM_TIME(t), |
| 799 ms); | 837 ms); |
| 800 return SET_DATE_VALUE(this, TimeClip(MakeDate(DAY(t), time))); | 838 return ResetDate(this, TimeClip(MakeDate(DAY(t), time))); |
| 801 } | 839 } |
| 802 | 840 |
| 803 | 841 |
| 804 // ECMA 262 - 15.9.5.30 | 842 // ECMA 262 - 15.9.5.30 |
| 805 function DateSetSeconds(sec, ms) { | 843 function DateSetSeconds(sec, ms) { |
| 806 var t = LocalTime(DATE_VALUE(this)); | 844 var t = LocalTime(DATE_VALUE(this)); |
| 807 sec = ToNumber(sec); | 845 sec = ToNumber(sec); |
| 808 ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); | 846 ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); |
| 809 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms); | 847 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms); |
| 810 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(DAY(t), time)))); | 848 return ResetDate(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
| 811 } | 849 } |
| 812 | 850 |
| 813 | 851 |
| 814 // ECMA 262 - 15.9.5.31 | 852 // ECMA 262 - 15.9.5.31 |
| 815 function DateSetUTCSeconds(sec, ms) { | 853 function DateSetUTCSeconds(sec, ms) { |
| 816 var t = DATE_VALUE(this); | 854 var t = DATE_VALUE(this); |
| 817 sec = ToNumber(sec); | 855 sec = ToNumber(sec); |
| 818 ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); | 856 ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); |
| 819 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms); | 857 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms); |
| 820 return SET_DATE_VALUE(this, TimeClip(MakeDate(DAY(t), time))); | 858 return ResetDate(this, TimeClip(MakeDate(DAY(t), time))); |
| 821 } | 859 } |
| 822 | 860 |
| 823 | 861 |
| 824 // ECMA 262 - 15.9.5.33 | 862 // ECMA 262 - 15.9.5.33 |
| 825 function DateSetMinutes(min, sec, ms) { | 863 function DateSetMinutes(min, sec, ms) { |
| 826 var t = LocalTime(DATE_VALUE(this)); | 864 var t = LocalTime(DATE_VALUE(this)); |
| 827 min = ToNumber(min); | 865 min = ToNumber(min); |
| 828 var argc = %_ArgumentsLength(); | 866 var argc = %_ArgumentsLength(); |
| 829 sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); | 867 sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); |
| 830 ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); | 868 ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); |
| 831 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); | 869 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); |
| 832 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(DAY(t), time)))); | 870 return ResetDate(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
| 833 } | 871 } |
| 834 | 872 |
| 835 | 873 |
| 836 // ECMA 262 - 15.9.5.34 | 874 // ECMA 262 - 15.9.5.34 |
| 837 function DateSetUTCMinutes(min, sec, ms) { | 875 function DateSetUTCMinutes(min, sec, ms) { |
| 838 var t = DATE_VALUE(this); | 876 var t = DATE_VALUE(this); |
| 839 min = ToNumber(min); | 877 min = ToNumber(min); |
| 840 var argc = %_ArgumentsLength(); | 878 var argc = %_ArgumentsLength(); |
| 841 sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); | 879 sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); |
| 842 ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); | 880 ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); |
| 843 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); | 881 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); |
| 844 return SET_DATE_VALUE(this, TimeClip(MakeDate(DAY(t), time))); | 882 return ResetDate(this, TimeClip(MakeDate(DAY(t), time))); |
| 845 } | 883 } |
| 846 | 884 |
| 847 | 885 |
| 848 // ECMA 262 - 15.9.5.35 | 886 // ECMA 262 - 15.9.5.35 |
| 849 function DateSetHours(hour, min, sec, ms) { | 887 function DateSetHours(hour, min, sec, ms) { |
| 850 var t = LocalTime(DATE_VALUE(this)); | 888 var t = LocalTime(DATE_VALUE(this)); |
| 851 hour = ToNumber(hour); | 889 hour = ToNumber(hour); |
| 852 var argc = %_ArgumentsLength(); | 890 var argc = %_ArgumentsLength(); |
| 853 min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min); | 891 min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min); |
| 854 sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); | 892 sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); |
| 855 ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); | 893 ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); |
| 856 var time = MakeTime(hour, min, sec, ms); | 894 var time = MakeTime(hour, min, sec, ms); |
| 857 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(DAY(t), time)))); | 895 return ResetDate(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
| 858 } | 896 } |
| 859 | 897 |
| 860 | 898 |
| 861 // ECMA 262 - 15.9.5.34 | 899 // ECMA 262 - 15.9.5.34 |
| 862 function DateSetUTCHours(hour, min, sec, ms) { | 900 function DateSetUTCHours(hour, min, sec, ms) { |
| 863 var t = DATE_VALUE(this); | 901 var t = DATE_VALUE(this); |
| 864 hour = ToNumber(hour); | 902 hour = ToNumber(hour); |
| 865 var argc = %_ArgumentsLength(); | 903 var argc = %_ArgumentsLength(); |
| 866 min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min); | 904 min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min); |
| 867 sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); | 905 sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); |
| 868 ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); | 906 ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); |
| 869 var time = MakeTime(hour, min, sec, ms); | 907 var time = MakeTime(hour, min, sec, ms); |
| 870 return SET_DATE_VALUE(this, TimeClip(MakeDate(DAY(t), time))); | 908 return ResetDate(this, TimeClip(MakeDate(DAY(t), time))); |
| 871 } | 909 } |
| 872 | 910 |
| 873 | 911 |
| 874 // ECMA 262 - 15.9.5.36 | 912 // ECMA 262 - 15.9.5.36 |
| 875 function DateSetDate(date) { | 913 function DateSetDate(date) { |
| 876 var t = LocalTime(DATE_VALUE(this)); | 914 var t = LocalTime(DATE_VALUE(this)); |
| 877 date = ToNumber(date); | 915 date = ToNumber(date); |
| 878 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); | 916 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); |
| 879 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 917 return ResetDate(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 880 } | 918 } |
| 881 | 919 |
| 882 | 920 |
| 883 // ECMA 262 - 15.9.5.37 | 921 // ECMA 262 - 15.9.5.37 |
| 884 function DateSetUTCDate(date) { | 922 function DateSetUTCDate(date) { |
| 885 var t = DATE_VALUE(this); | 923 var t = DATE_VALUE(this); |
| 886 date = ToNumber(date); | 924 date = ToNumber(date); |
| 887 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); | 925 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); |
| 888 return SET_DATE_VALUE(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); | 926 return ResetDate(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
| 889 } | 927 } |
| 890 | 928 |
| 891 | 929 |
| 892 // ECMA 262 - 15.9.5.38 | 930 // ECMA 262 - 15.9.5.38 |
| 893 function DateSetMonth(month, date) { | 931 function DateSetMonth(month, date) { |
| 894 var t = LocalTime(DATE_VALUE(this)); | 932 var t = LocalTime(DATE_VALUE(this)); |
| 895 month = ToNumber(month); | 933 month = ToNumber(month); |
| 896 date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date); | 934 date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date); |
| 897 var day = MakeDay(YearFromTime(t), month, date); | 935 var day = MakeDay(YearFromTime(t), month, date); |
| 898 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 936 return ResetDate(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 899 } | 937 } |
| 900 | 938 |
| 901 | 939 |
| 902 // ECMA 262 - 15.9.5.39 | 940 // ECMA 262 - 15.9.5.39 |
| 903 function DateSetUTCMonth(month, date) { | 941 function DateSetUTCMonth(month, date) { |
| 904 var t = DATE_VALUE(this); | 942 var t = DATE_VALUE(this); |
| 905 month = ToNumber(month); | 943 month = ToNumber(month); |
| 906 date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date); | 944 date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date); |
| 907 var day = MakeDay(YearFromTime(t), month, date); | 945 var day = MakeDay(YearFromTime(t), month, date); |
| 908 return SET_DATE_VALUE(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); | 946 return ResetDate(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
| 909 } | 947 } |
| 910 | 948 |
| 911 | 949 |
| 912 // ECMA 262 - 15.9.5.40 | 950 // ECMA 262 - 15.9.5.40 |
| 913 function DateSetFullYear(year, month, date) { | 951 function DateSetFullYear(year, month, date) { |
| 914 var t = DATE_VALUE(this); | 952 var t = DATE_VALUE(this); |
| 915 t = NUMBER_IS_NAN(t) ? 0 : LocalTimeNoCheck(t); | 953 t = NUMBER_IS_NAN(t) ? 0 : LocalTimeNoCheck(t); |
| 916 year = ToNumber(year); | 954 year = ToNumber(year); |
| 917 var argc = %_ArgumentsLength(); | 955 var argc = %_ArgumentsLength(); |
| 918 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); | 956 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); |
| 919 date = argc < 3 ? DateFromTime(t) : ToNumber(date); | 957 date = argc < 3 ? DateFromTime(t) : ToNumber(date); |
| 920 var day = MakeDay(year, month, date); | 958 var day = MakeDay(year, month, date); |
| 921 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 959 return ResetDate(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 922 } | 960 } |
| 923 | 961 |
| 924 | 962 |
| 925 // ECMA 262 - 15.9.5.41 | 963 // ECMA 262 - 15.9.5.41 |
| 926 function DateSetUTCFullYear(year, month, date) { | 964 function DateSetUTCFullYear(year, month, date) { |
| 927 var t = DATE_VALUE(this); | 965 var t = DATE_VALUE(this); |
| 928 if (NUMBER_IS_NAN(t)) t = 0; | 966 if (NUMBER_IS_NAN(t)) t = 0; |
| 929 var argc = %_ArgumentsLength(); | 967 var argc = %_ArgumentsLength(); |
| 930 year = ToNumber(year); | 968 year = ToNumber(year); |
| 931 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); | 969 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); |
| 932 date = argc < 3 ? DateFromTime(t) : ToNumber(date); | 970 date = argc < 3 ? DateFromTime(t) : ToNumber(date); |
| 933 var day = MakeDay(year, month, date); | 971 var day = MakeDay(year, month, date); |
| 934 return SET_DATE_VALUE(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); | 972 return ResetDate(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
| 935 } | 973 } |
| 936 | 974 |
| 937 | 975 |
| 938 // ECMA 262 - 15.9.5.42 | 976 // ECMA 262 - 15.9.5.42 |
| 939 function DateToUTCString() { | 977 function DateToUTCString() { |
| 940 var t = DATE_VALUE(this); | 978 var t = DATE_VALUE(this); |
| 941 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 979 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
| 942 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT | 980 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT |
| 943 return WeekDays[WeekDay(t)] + ', ' | 981 return WeekDays[WeekDay(t)] + ', ' |
| 944 + TwoDigitString(DateFromTime(t)) + ' ' | 982 + TwoDigitString(DateFromTime(t)) + ' ' |
| 945 + Months[MonthFromTime(t)] + ' ' | 983 + Months[MonthFromTime(t)] + ' ' |
| 946 + YearFromTime(t) + ' ' | 984 + YearFromTime(t) + ' ' |
| 947 + TimeString(t) + ' GMT'; | 985 + TimeString(t) + ' GMT'; |
| 948 } | 986 } |
| 949 | 987 |
| 950 | 988 |
| 951 // ECMA 262 - B.2.4 | 989 // ECMA 262 - B.2.4 |
| 952 function DateGetYear() { | 990 function DateGetYear() { |
| 953 var t = DATE_VALUE(this); | 991 var t = DATE_VALUE(this); |
| 954 if (NUMBER_IS_NAN(t)) return $NaN; | 992 if (NUMBER_IS_NAN(t)) return $NaN; |
| 955 return YearFromTime(LocalTimeNoCheck(t)) - 1900; | 993 return YearFromTime(LocalTimeNoCheck(t)) - 1900; |
| 956 } | 994 } |
| 957 | 995 |
| 958 | 996 |
| 959 // ECMA 262 - B.2.5 | 997 // ECMA 262 - B.2.5 |
| 960 function DateSetYear(year) { | 998 function DateSetYear(year) { |
| 961 var t = LocalTime(DATE_VALUE(this)); | 999 var t = LocalTime(DATE_VALUE(this)); |
| 962 if (NUMBER_IS_NAN(t)) t = 0; | 1000 if (NUMBER_IS_NAN(t)) t = 0; |
| 963 year = ToNumber(year); | 1001 year = ToNumber(year); |
| 964 if (NUMBER_IS_NAN(year)) return SET_DATE_VALUE(this, $NaN); | 1002 if (NUMBER_IS_NAN(year)) return ResetDate(this, $NaN); |
| 965 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) | 1003 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) |
| 966 ? 1900 + TO_INTEGER(year) : year; | 1004 ? 1900 + TO_INTEGER(year) : year; |
| 967 var day = MakeDay(year, MonthFromTime(t), DateFromTime(t)); | 1005 var day = MakeDay(year, MonthFromTime(t), DateFromTime(t)); |
| 968 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 1006 return ResetDate(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 969 } | 1007 } |
| 970 | 1008 |
| 971 | 1009 |
| 972 // ECMA 262 - B.2.6 | 1010 // ECMA 262 - B.2.6 |
| 973 // | 1011 // |
| 974 // Notice that this does not follow ECMA 262 completely. ECMA 262 | 1012 // Notice that this does not follow ECMA 262 completely. ECMA 262 |
| 975 // says that toGMTString should be the same Function object as | 1013 // says that toGMTString should be the same Function object as |
| 976 // toUTCString. JSC does not do this, so for compatibility we do not | 1014 // toUTCString. JSC does not do this, so for compatibility we do not |
| 977 // do that either. Instead, we create a new function whose name | 1015 // do that either. Instead, we create a new function whose name |
| 978 // property will return toGMTString. | 1016 // property will return toGMTString. |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1116 "toGMTString", DateToGMTString, | 1154 "toGMTString", DateToGMTString, |
| 1117 "toUTCString", DateToUTCString, | 1155 "toUTCString", DateToUTCString, |
| 1118 "getYear", DateGetYear, | 1156 "getYear", DateGetYear, |
| 1119 "setYear", DateSetYear, | 1157 "setYear", DateSetYear, |
| 1120 "toISOString", DateToISOString, | 1158 "toISOString", DateToISOString, |
| 1121 "toJSON", DateToJSON | 1159 "toJSON", DateToJSON |
| 1122 )); | 1160 )); |
| 1123 } | 1161 } |
| 1124 | 1162 |
| 1125 SetUpDate(); | 1163 SetUpDate(); |
| OLD | NEW |