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

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: Rebased to HEAD. 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
« no previous file with comments | « src/arm/lithium-arm.cc ('k') | src/ia32/lithium-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 if (!NUMBER_IS_NAN(t)) t = YearFromTime(t);
675 return t;
646 } 676 }
647 677
648 678
649 // ECMA 262 - 15.9.5.11 679 // ECMA 262 - 15.9.5.11
650 function DateGetUTCFullYear() { 680 function DateGetUTCFullYear() {
651 var t = DATE_VALUE(this); 681 var t = DATE_VALUE(this);
652 if (NUMBER_IS_NAN(t)) return t; 682 if (NUMBER_IS_NAN(t)) return t;
653 return YearFromTime(t); 683 return YearFromTime(t);
654 } 684 }
655 685
656 686
657 // ECMA 262 - 15.9.5.12 687 // ECMA 262 - 15.9.5.12
658 function DateGetMonth() { 688 function DateGetMonth() {
659 var t = DATE_VALUE(this); 689 var t = DATE_MONTH(this);
660 if (NUMBER_IS_NAN(t)) return t; 690 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t;
661 return MonthFromTime(LocalTimeNoCheck(t)); 691 ResetDate(this, DATE_VALUE_UNCHECKED(this));
692 return DATE_MONTH(this);
662 } 693 }
663 694
664 695
665 // ECMA 262 - 15.9.5.13 696 // ECMA 262 - 15.9.5.13
666 function DateGetUTCMonth() { 697 function DateGetUTCMonth() {
667 var t = DATE_VALUE(this); 698 var t = DATE_VALUE(this);
668 if (NUMBER_IS_NAN(t)) return t; 699 if (NUMBER_IS_NAN(t)) return t;
669 return MonthFromTime(t); 700 return MonthFromTime(t);
670 } 701 }
671 702
672 703
673 // ECMA 262 - 15.9.5.14 704 // ECMA 262 - 15.9.5.14
674 function DateGetDate() { 705 function DateGetDate() {
675 var t = DATE_VALUE(this); 706 var t = DATE_DAY(this);
676 if (NUMBER_IS_NAN(t)) return t; 707 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t;
677 return DateFromTime(LocalTimeNoCheck(t)); 708 ResetDate(this, DATE_VALUE_UNCHECKED(this));
709 return DATE_DAY(this);
678 } 710 }
679 711
680 712
681 // ECMA 262 - 15.9.5.15 713 // ECMA 262 - 15.9.5.15
682 function DateGetUTCDate() { 714 function DateGetUTCDate() {
683 var t = DATE_VALUE(this); 715 var t = DATE_VALUE(this);
684 return NAN_OR_DATE_FROM_TIME(t); 716 return NAN_OR_DATE_FROM_TIME(t);
685 } 717 }
686 718
687 719
688 // ECMA 262 - 15.9.5.16 720 // ECMA 262 - 15.9.5.16
689 function DateGetDay() { 721 function DateGetDay() {
690 var t = DATE_VALUE(this); 722 var t = DATE_WEEKDAY(this);
691 if (NUMBER_IS_NAN(t)) return t; 723 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t;
692 return WeekDay(LocalTimeNoCheck(t)); 724 ResetDate(this, DATE_VALUE_UNCHECKED(this));
725 return DATE_WEEKDAY(this);
693 } 726 }
694 727
695 728
696 // ECMA 262 - 15.9.5.17 729 // ECMA 262 - 15.9.5.17
697 function DateGetUTCDay() { 730 function DateGetUTCDay() {
698 var t = DATE_VALUE(this); 731 var t = DATE_VALUE(this);
699 if (NUMBER_IS_NAN(t)) return t; 732 if (NUMBER_IS_NAN(t)) return t;
700 return WeekDay(t); 733 return WeekDay(t);
701 } 734 }
702 735
703 736
704 // ECMA 262 - 15.9.5.18 737 // ECMA 262 - 15.9.5.18
705 function DateGetHours() { 738 function DateGetHours() {
706 var t = DATE_VALUE(this); 739 var t = DATE_HOUR(this);
707 if (NUMBER_IS_NAN(t)) return t; 740 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t;
708 return HOUR_FROM_TIME(LocalTimeNoCheck(t)); 741 ResetDate(this, DATE_VALUE_UNCHECKED(this));
742 return DATE_HOUR(this);
709 } 743 }
710 744
711 745
712 // ECMA 262 - 15.9.5.19 746 // ECMA 262 - 15.9.5.19
713 function DateGetUTCHours() { 747 function DateGetUTCHours() {
714 var t = DATE_VALUE(this); 748 var t = DATE_VALUE(this);
715 if (NUMBER_IS_NAN(t)) return t; 749 if (NUMBER_IS_NAN(t)) return t;
716 return HOUR_FROM_TIME(t); 750 return HOUR_FROM_TIME(t);
717 } 751 }
718 752
719 753
720 // ECMA 262 - 15.9.5.20 754 // ECMA 262 - 15.9.5.20
721 function DateGetMinutes() { 755 function DateGetMinutes() {
722 var t = DATE_VALUE(this); 756 var t = DATE_MIN(this);
723 if (NUMBER_IS_NAN(t)) return t; 757 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t;
724 return MIN_FROM_TIME(LocalTimeNoCheck(t)); 758 ResetDate(this, DATE_VALUE_UNCHECKED(this));
759 return DATE_MIN(this);
725 } 760 }
726 761
727 762
728 // ECMA 262 - 15.9.5.21 763 // ECMA 262 - 15.9.5.21
729 function DateGetUTCMinutes() { 764 function DateGetUTCMinutes() {
730 var t = DATE_VALUE(this); 765 var t = DATE_VALUE(this);
731 return NAN_OR_MIN_FROM_TIME(t); 766 return NAN_OR_MIN_FROM_TIME(t);
732 } 767 }
733 768
734 769
735 // ECMA 262 - 15.9.5.22 770 // ECMA 262 - 15.9.5.22
736 function DateGetSeconds() { 771 function DateGetSeconds() {
737 var t = DATE_VALUE(this); 772 var t = DATE_SEC(this);
738 if (NUMBER_IS_NAN(t)) return t; 773 if (!IS_UNDEFINED(t) && DATE_LOCAL(this) === local_time_offset) return t;
739 return SEC_FROM_TIME(LocalTimeNoCheck(t)); 774 ResetDate(this, DATE_VALUE_UNCHECKED(this));
775 return DATE_SEC(this);
740 } 776 }
741 777
742 778
743 // ECMA 262 - 15.9.5.23 779 // ECMA 262 - 15.9.5.23
744 function DateGetUTCSeconds() { 780 function DateGetUTCSeconds() {
745 var t = DATE_VALUE(this); 781 var t = DATE_VALUE(this);
746 return NAN_OR_SEC_FROM_TIME(t); 782 return NAN_OR_SEC_FROM_TIME(t);
747 } 783 }
748 784
749 785
(...skipping 16 matching lines...) Expand all
766 function DateGetTimezoneOffset() { 802 function DateGetTimezoneOffset() {
767 var t = DATE_VALUE(this); 803 var t = DATE_VALUE(this);
768 if (NUMBER_IS_NAN(t)) return t; 804 if (NUMBER_IS_NAN(t)) return t;
769 return (t - LocalTimeNoCheck(t)) / msPerMinute; 805 return (t - LocalTimeNoCheck(t)) / msPerMinute;
770 } 806 }
771 807
772 808
773 // ECMA 262 - 15.9.5.27 809 // ECMA 262 - 15.9.5.27
774 function DateSetTime(ms) { 810 function DateSetTime(ms) {
775 if (!IS_DATE(this)) ThrowDateTypeError(); 811 if (!IS_DATE(this)) ThrowDateTypeError();
776 return SET_DATE_VALUE(this, TimeClip(ToNumber(ms))); 812 return ResetDate(this, TimeClip(ToNumber(ms)));
777 } 813 }
778 814
779 815
780 // ECMA 262 - 15.9.5.28 816 // ECMA 262 - 15.9.5.28
781 function DateSetMilliseconds(ms) { 817 function DateSetMilliseconds(ms) {
782 var t = LocalTime(DATE_VALUE(this)); 818 var t = LocalTime(DATE_VALUE(this));
783 ms = ToNumber(ms); 819 ms = ToNumber(ms);
784 var time = MakeTime(HOUR_FROM_TIME(t), 820 var time = MakeTime(HOUR_FROM_TIME(t),
785 MIN_FROM_TIME(t), 821 MIN_FROM_TIME(t),
786 SEC_FROM_TIME(t), 822 SEC_FROM_TIME(t),
787 ms); 823 ms);
788 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(DAY(t), time)))); 824 return ResetDate(this, TimeClip(UTC(MakeDate(DAY(t), time))));
789 } 825 }
790 826
791 827
792 // ECMA 262 - 15.9.5.29 828 // ECMA 262 - 15.9.5.29
793 function DateSetUTCMilliseconds(ms) { 829 function DateSetUTCMilliseconds(ms) {
794 var t = DATE_VALUE(this); 830 var t = DATE_VALUE(this);
795 ms = ToNumber(ms); 831 ms = ToNumber(ms);
796 var time = MakeTime(HOUR_FROM_TIME(t), 832 var time = MakeTime(HOUR_FROM_TIME(t),
797 MIN_FROM_TIME(t), 833 MIN_FROM_TIME(t),
798 SEC_FROM_TIME(t), 834 SEC_FROM_TIME(t),
799 ms); 835 ms);
800 return SET_DATE_VALUE(this, TimeClip(MakeDate(DAY(t), time))); 836 return ResetDate(this, TimeClip(MakeDate(DAY(t), time)));
801 } 837 }
802 838
803 839
804 // ECMA 262 - 15.9.5.30 840 // ECMA 262 - 15.9.5.30
805 function DateSetSeconds(sec, ms) { 841 function DateSetSeconds(sec, ms) {
806 var t = LocalTime(DATE_VALUE(this)); 842 var t = LocalTime(DATE_VALUE(this));
807 sec = ToNumber(sec); 843 sec = ToNumber(sec);
808 ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); 844 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); 845 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)))); 846 return ResetDate(this, TimeClip(UTC(MakeDate(DAY(t), time))));
811 } 847 }
812 848
813 849
814 // ECMA 262 - 15.9.5.31 850 // ECMA 262 - 15.9.5.31
815 function DateSetUTCSeconds(sec, ms) { 851 function DateSetUTCSeconds(sec, ms) {
816 var t = DATE_VALUE(this); 852 var t = DATE_VALUE(this);
817 sec = ToNumber(sec); 853 sec = ToNumber(sec);
818 ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); 854 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); 855 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms);
820 return SET_DATE_VALUE(this, TimeClip(MakeDate(DAY(t), time))); 856 return ResetDate(this, TimeClip(MakeDate(DAY(t), time)));
821 } 857 }
822 858
823 859
824 // ECMA 262 - 15.9.5.33 860 // ECMA 262 - 15.9.5.33
825 function DateSetMinutes(min, sec, ms) { 861 function DateSetMinutes(min, sec, ms) {
826 var t = LocalTime(DATE_VALUE(this)); 862 var t = LocalTime(DATE_VALUE(this));
827 min = ToNumber(min); 863 min = ToNumber(min);
828 var argc = %_ArgumentsLength(); 864 var argc = %_ArgumentsLength();
829 sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); 865 sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
830 ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); 866 ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
831 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); 867 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms);
832 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(DAY(t), time)))); 868 return ResetDate(this, TimeClip(UTC(MakeDate(DAY(t), time))));
833 } 869 }
834 870
835 871
836 // ECMA 262 - 15.9.5.34 872 // ECMA 262 - 15.9.5.34
837 function DateSetUTCMinutes(min, sec, ms) { 873 function DateSetUTCMinutes(min, sec, ms) {
838 var t = DATE_VALUE(this); 874 var t = DATE_VALUE(this);
839 min = ToNumber(min); 875 min = ToNumber(min);
840 var argc = %_ArgumentsLength(); 876 var argc = %_ArgumentsLength();
841 sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); 877 sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
842 ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); 878 ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
843 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); 879 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms);
844 return SET_DATE_VALUE(this, TimeClip(MakeDate(DAY(t), time))); 880 return ResetDate(this, TimeClip(MakeDate(DAY(t), time)));
845 } 881 }
846 882
847 883
848 // ECMA 262 - 15.9.5.35 884 // ECMA 262 - 15.9.5.35
849 function DateSetHours(hour, min, sec, ms) { 885 function DateSetHours(hour, min, sec, ms) {
850 var t = LocalTime(DATE_VALUE(this)); 886 var t = LocalTime(DATE_VALUE(this));
851 hour = ToNumber(hour); 887 hour = ToNumber(hour);
852 var argc = %_ArgumentsLength(); 888 var argc = %_ArgumentsLength();
853 min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min); 889 min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min);
854 sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); 890 sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
855 ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); 891 ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
856 var time = MakeTime(hour, min, sec, ms); 892 var time = MakeTime(hour, min, sec, ms);
857 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(DAY(t), time)))); 893 return ResetDate(this, TimeClip(UTC(MakeDate(DAY(t), time))));
858 } 894 }
859 895
860 896
861 // ECMA 262 - 15.9.5.34 897 // ECMA 262 - 15.9.5.34
862 function DateSetUTCHours(hour, min, sec, ms) { 898 function DateSetUTCHours(hour, min, sec, ms) {
863 var t = DATE_VALUE(this); 899 var t = DATE_VALUE(this);
864 hour = ToNumber(hour); 900 hour = ToNumber(hour);
865 var argc = %_ArgumentsLength(); 901 var argc = %_ArgumentsLength();
866 min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min); 902 min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min);
867 sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec); 903 sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
868 ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms); 904 ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
869 var time = MakeTime(hour, min, sec, ms); 905 var time = MakeTime(hour, min, sec, ms);
870 return SET_DATE_VALUE(this, TimeClip(MakeDate(DAY(t), time))); 906 return ResetDate(this, TimeClip(MakeDate(DAY(t), time)));
871 } 907 }
872 908
873 909
874 // ECMA 262 - 15.9.5.36 910 // ECMA 262 - 15.9.5.36
875 function DateSetDate(date) { 911 function DateSetDate(date) {
876 var t = LocalTime(DATE_VALUE(this)); 912 var t = LocalTime(DATE_VALUE(this));
877 date = ToNumber(date); 913 date = ToNumber(date);
878 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); 914 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date);
879 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); 915 return ResetDate(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
880 } 916 }
881 917
882 918
883 // ECMA 262 - 15.9.5.37 919 // ECMA 262 - 15.9.5.37
884 function DateSetUTCDate(date) { 920 function DateSetUTCDate(date) {
885 var t = DATE_VALUE(this); 921 var t = DATE_VALUE(this);
886 date = ToNumber(date); 922 date = ToNumber(date);
887 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); 923 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date);
888 return SET_DATE_VALUE(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); 924 return ResetDate(this, TimeClip(MakeDate(day, TimeWithinDay(t))));
889 } 925 }
890 926
891 927
892 // ECMA 262 - 15.9.5.38 928 // ECMA 262 - 15.9.5.38
893 function DateSetMonth(month, date) { 929 function DateSetMonth(month, date) {
894 var t = LocalTime(DATE_VALUE(this)); 930 var t = LocalTime(DATE_VALUE(this));
895 month = ToNumber(month); 931 month = ToNumber(month);
896 date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date); 932 date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date);
897 var day = MakeDay(YearFromTime(t), month, date); 933 var day = MakeDay(YearFromTime(t), month, date);
898 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); 934 return ResetDate(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
899 } 935 }
900 936
901 937
902 // ECMA 262 - 15.9.5.39 938 // ECMA 262 - 15.9.5.39
903 function DateSetUTCMonth(month, date) { 939 function DateSetUTCMonth(month, date) {
904 var t = DATE_VALUE(this); 940 var t = DATE_VALUE(this);
905 month = ToNumber(month); 941 month = ToNumber(month);
906 date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date); 942 date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date);
907 var day = MakeDay(YearFromTime(t), month, date); 943 var day = MakeDay(YearFromTime(t), month, date);
908 return SET_DATE_VALUE(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); 944 return ResetDate(this, TimeClip(MakeDate(day, TimeWithinDay(t))));
909 } 945 }
910 946
911 947
912 // ECMA 262 - 15.9.5.40 948 // ECMA 262 - 15.9.5.40
913 function DateSetFullYear(year, month, date) { 949 function DateSetFullYear(year, month, date) {
914 var t = DATE_VALUE(this); 950 var t = DATE_VALUE(this);
915 t = NUMBER_IS_NAN(t) ? 0 : LocalTimeNoCheck(t); 951 t = NUMBER_IS_NAN(t) ? 0 : LocalTimeNoCheck(t);
916 year = ToNumber(year); 952 year = ToNumber(year);
917 var argc = %_ArgumentsLength(); 953 var argc = %_ArgumentsLength();
918 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); 954 month = argc < 2 ? MonthFromTime(t) : ToNumber(month);
919 date = argc < 3 ? DateFromTime(t) : ToNumber(date); 955 date = argc < 3 ? DateFromTime(t) : ToNumber(date);
920 var day = MakeDay(year, month, date); 956 var day = MakeDay(year, month, date);
921 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); 957 return ResetDate(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
922 } 958 }
923 959
924 960
925 // ECMA 262 - 15.9.5.41 961 // ECMA 262 - 15.9.5.41
926 function DateSetUTCFullYear(year, month, date) { 962 function DateSetUTCFullYear(year, month, date) {
927 var t = DATE_VALUE(this); 963 var t = DATE_VALUE(this);
928 if (NUMBER_IS_NAN(t)) t = 0; 964 if (NUMBER_IS_NAN(t)) t = 0;
929 var argc = %_ArgumentsLength(); 965 var argc = %_ArgumentsLength();
930 year = ToNumber(year); 966 year = ToNumber(year);
931 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); 967 month = argc < 2 ? MonthFromTime(t) : ToNumber(month);
932 date = argc < 3 ? DateFromTime(t) : ToNumber(date); 968 date = argc < 3 ? DateFromTime(t) : ToNumber(date);
933 var day = MakeDay(year, month, date); 969 var day = MakeDay(year, month, date);
934 return SET_DATE_VALUE(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); 970 return ResetDate(this, TimeClip(MakeDate(day, TimeWithinDay(t))));
935 } 971 }
936 972
937 973
938 // ECMA 262 - 15.9.5.42 974 // ECMA 262 - 15.9.5.42
939 function DateToUTCString() { 975 function DateToUTCString() {
940 var t = DATE_VALUE(this); 976 var t = DATE_VALUE(this);
941 if (NUMBER_IS_NAN(t)) return kInvalidDate; 977 if (NUMBER_IS_NAN(t)) return kInvalidDate;
942 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT 978 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT
943 return WeekDays[WeekDay(t)] + ', ' 979 return WeekDays[WeekDay(t)] + ', '
944 + TwoDigitString(DateFromTime(t)) + ' ' 980 + TwoDigitString(DateFromTime(t)) + ' '
945 + Months[MonthFromTime(t)] + ' ' 981 + Months[MonthFromTime(t)] + ' '
946 + YearFromTime(t) + ' ' 982 + YearFromTime(t) + ' '
947 + TimeString(t) + ' GMT'; 983 + TimeString(t) + ' GMT';
948 } 984 }
949 985
950 986
951 // ECMA 262 - B.2.4 987 // ECMA 262 - B.2.4
952 function DateGetYear() { 988 function DateGetYear() {
953 var t = DATE_VALUE(this); 989 var t = DATE_VALUE(this);
954 if (NUMBER_IS_NAN(t)) return $NaN; 990 if (NUMBER_IS_NAN(t)) return $NaN;
955 return YearFromTime(LocalTimeNoCheck(t)) - 1900; 991 return YearFromTime(LocalTimeNoCheck(t)) - 1900;
956 } 992 }
957 993
958 994
959 // ECMA 262 - B.2.5 995 // ECMA 262 - B.2.5
960 function DateSetYear(year) { 996 function DateSetYear(year) {
961 var t = LocalTime(DATE_VALUE(this)); 997 var t = LocalTime(DATE_VALUE(this));
962 if (NUMBER_IS_NAN(t)) t = 0; 998 if (NUMBER_IS_NAN(t)) t = 0;
963 year = ToNumber(year); 999 year = ToNumber(year);
964 if (NUMBER_IS_NAN(year)) return SET_DATE_VALUE(this, $NaN); 1000 if (NUMBER_IS_NAN(year)) return ResetDate(this, $NaN);
965 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) 1001 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99)
966 ? 1900 + TO_INTEGER(year) : year; 1002 ? 1900 + TO_INTEGER(year) : year;
967 var day = MakeDay(year, MonthFromTime(t), DateFromTime(t)); 1003 var day = MakeDay(year, MonthFromTime(t), DateFromTime(t));
968 return SET_DATE_VALUE(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); 1004 return ResetDate(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
969 } 1005 }
970 1006
971 1007
972 // ECMA 262 - B.2.6 1008 // ECMA 262 - B.2.6
973 // 1009 //
974 // Notice that this does not follow ECMA 262 completely. ECMA 262 1010 // Notice that this does not follow ECMA 262 completely. ECMA 262
975 // says that toGMTString should be the same Function object as 1011 // says that toGMTString should be the same Function object as
976 // toUTCString. JSC does not do this, so for compatibility we do not 1012 // toUTCString. JSC does not do this, so for compatibility we do not
977 // do that either. Instead, we create a new function whose name 1013 // do that either. Instead, we create a new function whose name
978 // property will return toGMTString. 1014 // property will return toGMTString.
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 "toGMTString", DateToGMTString, 1152 "toGMTString", DateToGMTString,
1117 "toUTCString", DateToUTCString, 1153 "toUTCString", DateToUTCString,
1118 "getYear", DateGetYear, 1154 "getYear", DateGetYear,
1119 "setYear", DateSetYear, 1155 "setYear", DateSetYear,
1120 "toISOString", DateToISOString, 1156 "toISOString", DateToISOString,
1121 "toJSON", DateToJSON 1157 "toJSON", DateToJSON
1122 )); 1158 ));
1123 } 1159 }
1124 1160
1125 SetUpDate(); 1161 SetUpDate();
OLDNEW
« no previous file with comments | « src/arm/lithium-arm.cc ('k') | src/ia32/lithium-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698