Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1467)

Side by Side Diff: src/date.js

Issue 9307083: Implement caching scheme for Date fields. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixed register allocation (and rebased). Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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();
OLDNEW
« no previous file with comments | « src/arm/lithium-arm.cc ('k') | src/ia32/lithium-ia32.cc » ('j') | src/objects-printer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698