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

Side by Side Diff: src/date-delay.js

Issue 521057: Inline a number of simple date computations.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 years, 11 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 | « no previous file | src/macros.py » ('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 27 matching lines...) Expand all
38 // Keep reference to original values of some global properties. This 38 // Keep reference to original values of some global properties. This
39 // has the added benefit that the code in this file is isolated from 39 // has the added benefit that the code in this file is isolated from
40 // changes to these properties. 40 // changes to these properties.
41 const $Date = global.Date; 41 const $Date = global.Date;
42 42
43 // Helper function to throw error. 43 // Helper function to throw error.
44 function ThrowDateTypeError() { 44 function ThrowDateTypeError() {
45 throw new $TypeError('this is not a Date object.'); 45 throw new $TypeError('this is not a Date object.');
46 } 46 }
47 47
48 // ECMA 262 - 15.9.1.2
49 function Day(time) {
50 return FLOOR(time / msPerDay);
51 }
52
53
54 // ECMA 262 - 5.2 48 // ECMA 262 - 5.2
55 function Modulo(value, remainder) { 49 function Modulo(value, remainder) {
56 var mod = value % remainder; 50 var mod = value % remainder;
57 // Guard against returning -0. 51 // Guard against returning -0.
58 if (mod == 0) return 0; 52 if (mod == 0) return 0;
59 return mod >= 0 ? mod : mod + remainder; 53 return mod >= 0 ? mod : mod + remainder;
60 } 54 }
61 55
62 56
63 function TimeWithinDay(time) { 57 function TimeWithinDay(time) {
(...skipping 15 matching lines...) Expand all
79 - FLOOR((year-1901)/100) 73 - FLOOR((year-1901)/100)
80 + FLOOR((year-1601)/400); 74 + FLOOR((year-1601)/400);
81 } 75 }
82 76
83 77
84 function TimeFromYear(year) { 78 function TimeFromYear(year) {
85 return msPerDay * DayFromYear(year); 79 return msPerDay * DayFromYear(year);
86 } 80 }
87 81
88 82
89 function YearFromTime(time) {
90 return FromJulianDay(Day(time) + kDayZeroInJulianDay).year;
91 }
92
93
94 function InLeapYear(time) { 83 function InLeapYear(time) {
95 return DaysInYear(YearFromTime(time)) == 366 ? 1 : 0; 84 return DaysInYear(YEAR_FROM_TIME(time)) == 366 ? 1 : 0;
96 }
97
98
99 // ECMA 262 - 15.9.1.4
100 function MonthFromTime(time) {
101 return FromJulianDay(Day(time) + kDayZeroInJulianDay).month;
102 } 85 }
103 86
104 87
105 function DayWithinYear(time) { 88 function DayWithinYear(time) {
106 return Day(time) - DayFromYear(YearFromTime(time)); 89 return DAY(time) - DayFromYear(YEAR_FROM_TIME(time));
107 }
108
109
110 // ECMA 262 - 15.9.1.5
111 function DateFromTime(time) {
112 return FromJulianDay(Day(time) + kDayZeroInJulianDay).date;
113 } 90 }
114 91
115 92
116 // ECMA 262 - 15.9.1.9 93 // ECMA 262 - 15.9.1.9
117 function EquivalentYear(year) { 94 function EquivalentYear(year) {
118 // Returns an equivalent year in the range [2008-2035] matching 95 // Returns an equivalent year in the range [2008-2035] matching
119 // - leap year. 96 // - leap year.
120 // - week day of first day. 97 // - week day of first day.
121 var time = TimeFromYear(year); 98 var time = TimeFromYear(year);
122 var recent_year = (InLeapYear(time) == 0 ? 1967 : 1956) + 99 var recent_year = (InLeapYear(time) == 0 ? 1967 : 1956) +
123 (WeekDay(time) * 12) % 28; 100 (WeekDay(time) * 12) % 28;
124 // Find the year in the range 2008..2037 that is equivalent mod 28. 101 // Find the year in the range 2008..2037 that is equivalent mod 28.
125 // Add 3*28 to give a positive argument to the modulus operator. 102 // Add 3*28 to give a positive argument to the modulus operator.
126 return 2008 + (recent_year + 3*28 - 2008) % 28; 103 return 2008 + (recent_year + 3*28 - 2008) % 28;
127 } 104 }
128 105
129 106
130 function EquivalentTime(t) { 107 function EquivalentTime(t) {
131 // The issue here is that some library calls don't work right for dates 108 // The issue here is that some library calls don't work right for dates
132 // that cannot be represented using a non-negative signed 32 bit integer 109 // that cannot be represented using a non-negative signed 32 bit integer
133 // (measured in whole seconds based on the 1970 epoch). 110 // (measured in whole seconds based on the 1970 epoch).
134 // We solve this by mapping the time to a year with same leap-year-ness 111 // We solve this by mapping the time to a year with same leap-year-ness
135 // and same starting day for the year. The ECMAscript specification says 112 // and same starting day for the year. The ECMAscript specification says
136 // we must do this, but for compatibility with other browsers, we use 113 // we must do this, but for compatibility with other browsers, we use
137 // the actual year if it is in the range 1970..2037 114 // the actual year if it is in the range 1970..2037
138 if (t >= 0 && t <= 2.1e12) return t; 115 if (t >= 0 && t <= 2.1e12) return t;
139 var day = MakeDay(EquivalentYear(YearFromTime(t)), MonthFromTime(t), DateFromT ime(t)); 116 var day = MakeDay(EquivalentYear(YEAR_FROM_TIME(t)), MONTH_FROM_TIME(t), DATE_ FROM_TIME(t));
140 return TimeClip(MakeDate(day, TimeWithinDay(t))); 117 return TimeClip(MakeDate(day, TimeWithinDay(t)));
141 } 118 }
142 119
143 120
144 // Because computing the DST offset is a pretty expensive operation 121 // Because computing the DST offset is a pretty expensive operation
145 // we keep a cache of last computed offset along with a time interval 122 // we keep a cache of last computed offset along with a time interval
146 // where we know the cache is valid. 123 // where we know the cache is valid.
147 var DST_offset_cache = { 124 var DST_offset_cache = {
148 // Cached DST offset. 125 // Cached DST offset.
149 offset: 0, 126 offset: 0,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 return timezone_cache_timezone; 202 return timezone_cache_timezone;
226 } 203 }
227 var timezone = %DateLocalTimezone(EquivalentTime(t)); 204 var timezone = %DateLocalTimezone(EquivalentTime(t));
228 timezone_cache_time = t; 205 timezone_cache_time = t;
229 timezone_cache_timezone = timezone; 206 timezone_cache_timezone = timezone;
230 return timezone; 207 return timezone;
231 } 208 }
232 209
233 210
234 function WeekDay(time) { 211 function WeekDay(time) {
235 return Modulo(Day(time) + 4, 7); 212 return Modulo(DAY(time) + 4, 7);
236 } 213 }
237 214
238 var local_time_offset = %DateLocalTimeOffset(); 215 var local_time_offset = %DateLocalTimeOffset();
239 216
240 function LocalTime(time) { 217 function LocalTime(time) {
241 if (NUMBER_IS_NAN(time)) return time; 218 if (NUMBER_IS_NAN(time)) return time;
242 return time + local_time_offset + DaylightSavingsOffset(time); 219 return time + local_time_offset + DaylightSavingsOffset(time);
243 } 220 }
244 221
245 function LocalTimeNoCheck(time) { 222 function LocalTimeNoCheck(time) {
246 return time + local_time_offset + DaylightSavingsOffset(time); 223 // Inline the DST offset cache checks for speed.
224 var cache = DST_offset_cache;
225 if (cache.start <= time && time <= cache.end) {
226 var dst_offset = cache.offset;
227 } else {
228 var dst_offset = DaylightSavingsOffset(time);
229 }
230 return time + local_time_offset + dst_offset;
247 } 231 }
248 232
249 233
250 function UTC(time) { 234 function UTC(time) {
251 if (NUMBER_IS_NAN(time)) return time; 235 if (NUMBER_IS_NAN(time)) return time;
252 var tmp = time - local_time_offset; 236 var tmp = time - local_time_offset;
253 return tmp - DaylightSavingsOffset(tmp); 237 return tmp - DaylightSavingsOffset(tmp);
254 } 238 }
255 239
256 240
257 // ECMA 262 - 15.9.1.10
258 function HourFromTime(time) {
259 return Modulo(FLOOR(time / msPerHour), HoursPerDay);
260 }
261
262
263 function MinFromTime(time) {
264 return Modulo(FLOOR(time / msPerMinute), MinutesPerHour);
265 }
266
267
268 function SecFromTime(time) {
269 return Modulo(FLOOR(time / msPerSecond), SecondsPerMinute);
270 }
271
272
273 function msFromTime(time) {
274 return Modulo(time, msPerSecond);
275 }
276
277
278 // ECMA 262 - 15.9.1.11 241 // ECMA 262 - 15.9.1.11
279 function MakeTime(hour, min, sec, ms) { 242 function MakeTime(hour, min, sec, ms) {
280 if (!$isFinite(hour)) return $NaN; 243 if (!$isFinite(hour)) return $NaN;
281 if (!$isFinite(min)) return $NaN; 244 if (!$isFinite(min)) return $NaN;
282 if (!$isFinite(sec)) return $NaN; 245 if (!$isFinite(sec)) return $NaN;
283 if (!$isFinite(ms)) return $NaN; 246 if (!$isFinite(ms)) return $NaN;
284 return TO_INTEGER(hour) * msPerHour 247 return TO_INTEGER(hour) * msPerHour
285 + TO_INTEGER(min) * msPerMinute 248 + TO_INTEGER(min) * msPerMinute
286 + TO_INTEGER(sec) * msPerSecond 249 + TO_INTEGER(sec) * msPerSecond
287 + TO_INTEGER(ms); 250 + TO_INTEGER(ms);
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 } else if (IS_STRING(year)) { 424 } else if (IS_STRING(year)) {
462 // Probe the Date cache. If we already have a time value for the 425 // Probe the Date cache. If we already have a time value for the
463 // given time, we re-use that instead of parsing the string again. 426 // given time, we re-use that instead of parsing the string again.
464 var cache = Date_cache; 427 var cache = Date_cache;
465 if (cache.string === year) { 428 if (cache.string === year) {
466 value = cache.time; 429 value = cache.time;
467 } else { 430 } else {
468 value = DateParse(year); 431 value = DateParse(year);
469 if (!NUMBER_IS_NAN(value)) { 432 if (!NUMBER_IS_NAN(value)) {
470 cache.time = value; 433 cache.time = value;
471 cache.year = YearFromTime(LocalTimeNoCheck(value)); 434 cache.year = YEAR_FROM_TIME(LocalTimeNoCheck(value));
472 cache.string = year; 435 cache.string = year;
473 } 436 }
474 } 437 }
475 438
476 } else { 439 } else {
477 // According to ECMA 262, no hint should be given for this 440 // According to ECMA 262, no hint should be given for this
478 // conversion. However, ToPrimitive defaults to STRING_HINT for 441 // conversion. However, ToPrimitive defaults to STRING_HINT for
479 // Date objects which will lose precision when the Date 442 // Date objects which will lose precision when the Date
480 // constructor is called with another Date object as its 443 // constructor is called with another Date object as its
481 // argument. We therefore use NUMBER_HINT for the conversion, 444 // argument. We therefore use NUMBER_HINT for the conversion,
(...skipping 19 matching lines...) Expand all
501 } 464 }
502 %_SetValueOf(this, value); 465 %_SetValueOf(this, value);
503 }); 466 });
504 467
505 468
506 // Helper functions. 469 // Helper functions.
507 function GetTimeFrom(aDate) { 470 function GetTimeFrom(aDate) {
508 return DATE_VALUE(aDate); 471 return DATE_VALUE(aDate);
509 } 472 }
510 473
511
512 function GetMillisecondsFrom(aDate) { 474 function GetMillisecondsFrom(aDate) {
513 var t = DATE_VALUE(aDate); 475 var t = DATE_VALUE(aDate);
514 if (NUMBER_IS_NAN(t)) return t; 476 if (NUMBER_IS_NAN(t)) return t;
515 return msFromTime(LocalTimeNoCheck(t)); 477 return MS_FROM_TIME(LocalTimeNoCheck(t));
516 } 478 }
517 479
518 480
519 function GetUTCMillisecondsFrom(aDate) { 481 function GetUTCMillisecondsFrom(aDate) {
520 var t = DATE_VALUE(aDate); 482 var t = DATE_VALUE(aDate);
521 if (NUMBER_IS_NAN(t)) return t; 483 if (NUMBER_IS_NAN(t)) return t;
522 return msFromTime(t); 484 return MS_FROM_TIME(t);
523 } 485 }
524 486
525 487
526 function GetSecondsFrom(aDate) { 488 function GetSecondsFrom(aDate) {
527 var t = DATE_VALUE(aDate); 489 var t = DATE_VALUE(aDate);
528 if (NUMBER_IS_NAN(t)) return t; 490 if (NUMBER_IS_NAN(t)) return t;
529 return SecFromTime(LocalTimeNoCheck(t)); 491 return SEC_FROM_TIME(LocalTimeNoCheck(t));
530 } 492 }
531 493
532 494
533 function GetUTCSecondsFrom(aDate) { 495 function GetUTCSecondsFrom(aDate) {
534 var t = DATE_VALUE(aDate); 496 var t = DATE_VALUE(aDate);
535 if (NUMBER_IS_NAN(t)) return t; 497 if (NUMBER_IS_NAN(t)) return t;
536 return SecFromTime(t); 498 return SEC_FROM_TIME(t);
537 } 499 }
538 500
539 501
540 function GetMinutesFrom(aDate) { 502 function GetMinutesFrom(aDate) {
541 var t = DATE_VALUE(aDate); 503 var t = DATE_VALUE(aDate);
542 if (NUMBER_IS_NAN(t)) return t; 504 if (NUMBER_IS_NAN(t)) return t;
543 return MinFromTime(LocalTimeNoCheck(t)); 505 return MIN_FROM_TIME(LocalTimeNoCheck(t));
544 } 506 }
545 507
546 508
547 function GetUTCMinutesFrom(aDate) { 509 function GetUTCMinutesFrom(aDate) {
548 var t = DATE_VALUE(aDate); 510 var t = DATE_VALUE(aDate);
549 if (NUMBER_IS_NAN(t)) return t; 511 if (NUMBER_IS_NAN(t)) return t;
550 return MinFromTime(t); 512 return MIN_FROM_TIME(t);
551 } 513 }
552 514
553 515
554 function GetHoursFrom(aDate) { 516 function GetHoursFrom(aDate) {
555 var t = DATE_VALUE(aDate); 517 var t = DATE_VALUE(aDate);
556 if (NUMBER_IS_NAN(t)) return t; 518 if (NUMBER_IS_NAN(t)) return t;
557 return HourFromTime(LocalTimeNoCheck(t)); 519 return HOUR_FROM_TIME(LocalTimeNoCheck(t));
558 } 520 }
559 521
560 522
561 function GetUTCHoursFrom(aDate) { 523 function GetUTCHoursFrom(aDate) {
562 var t = DATE_VALUE(aDate); 524 var t = DATE_VALUE(aDate);
563 if (NUMBER_IS_NAN(t)) return t; 525 if (NUMBER_IS_NAN(t)) return t;
564 return HourFromTime(t); 526 return HOUR_FROM_TIME(t);
565 } 527 }
566 528
567 529
568 function GetFullYearFrom(aDate) { 530 function GetFullYearFrom(aDate) {
569 var t = DATE_VALUE(aDate); 531 var t = DATE_VALUE(aDate);
570 if (NUMBER_IS_NAN(t)) return t; 532 if (NUMBER_IS_NAN(t)) return t;
571 var cache = Date_cache; 533 var cache = Date_cache;
572 if (cache.time === t) return cache.year; 534 if (cache.time === t) return cache.year;
573 return YearFromTime(LocalTimeNoCheck(t)); 535 return YEAR_FROM_TIME(LocalTimeNoCheck(t));
574 } 536 }
575 537
576 538
577 function GetUTCFullYearFrom(aDate) { 539 function GetUTCFullYearFrom(aDate) {
578 var t = DATE_VALUE(aDate); 540 var t = DATE_VALUE(aDate);
579 if (NUMBER_IS_NAN(t)) return t; 541 if (NUMBER_IS_NAN(t)) return t;
580 return YearFromTime(t); 542 return YEAR_FROM_TIME(t);
581 } 543 }
582 544
583 545
584 function GetMonthFrom(aDate) { 546 function GetMonthFrom(aDate) {
585 var t = DATE_VALUE(aDate); 547 var t = DATE_VALUE(aDate);
586 if (NUMBER_IS_NAN(t)) return t; 548 if (NUMBER_IS_NAN(t)) return t;
587 return MonthFromTime(LocalTimeNoCheck(t)); 549 return MONTH_FROM_TIME(LocalTimeNoCheck(t));
588 } 550 }
589 551
590 552
591 function GetUTCMonthFrom(aDate) { 553 function GetUTCMonthFrom(aDate) {
592 var t = DATE_VALUE(aDate); 554 var t = DATE_VALUE(aDate);
593 if (NUMBER_IS_NAN(t)) return t; 555 if (NUMBER_IS_NAN(t)) return t;
594 return MonthFromTime(t); 556 return MONTH_FROM_TIME(t);
595 } 557 }
596 558
597 559
598 function GetDateFrom(aDate) { 560 function GetDateFrom(aDate) {
599 var t = DATE_VALUE(aDate); 561 var t = DATE_VALUE(aDate);
600 if (NUMBER_IS_NAN(t)) return t; 562 if (NUMBER_IS_NAN(t)) return t;
601 return DateFromTime(LocalTimeNoCheck(t)); 563 return DATE_FROM_TIME(LocalTimeNoCheck(t));
602 } 564 }
603 565
604 566
605 function GetUTCDateFrom(aDate) { 567 function GetUTCDateFrom(aDate) {
606 var t = DATE_VALUE(aDate); 568 var t = DATE_VALUE(aDate);
607 if (NUMBER_IS_NAN(t)) return t; 569 if (NUMBER_IS_NAN(t)) return t;
608 return DateFromTime(t); 570 return DATE_FROM_TIME(t);
609 } 571 }
610 572
611 573
612 %FunctionSetPrototype($Date, new $Date($NaN)); 574 %FunctionSetPrototype($Date, new $Date($NaN));
613 575
614 576
615 var WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; 577 var WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
616 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oc t', 'Nov', 'Dec']; 578 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oc t', 'Nov', 'Dec'];
617 579
618 580
619 function TwoDigitString(value) { 581 function TwoDigitString(value) {
620 return value < 10 ? "0" + value : "" + value; 582 return value < 10 ? "0" + value : "" + value;
621 } 583 }
622 584
623 585
624 function DateString(time) { 586 function DateString(time) {
625 var YMD = FromJulianDay(Day(time) + kDayZeroInJulianDay); 587 var YMD = FromJulianDay(DAY(time) + kDayZeroInJulianDay);
626 return WeekDays[WeekDay(time)] + ' ' 588 return WeekDays[WeekDay(time)] + ' '
627 + Months[YMD.month] + ' ' 589 + Months[YMD.month] + ' '
628 + TwoDigitString(YMD.date) + ' ' 590 + TwoDigitString(YMD.date) + ' '
629 + YMD.year; 591 + YMD.year;
630 } 592 }
631 593
632 594
633 var LongWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Fri day', 'Saturday']; 595 var LongWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Fri day', 'Saturday'];
634 var LongMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July' , 'August', 'September', 'October', 'November', 'December']; 596 var LongMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July' , 'August', 'September', 'October', 'November', 'December'];
635 597
636 598
637 function LongDateString(time) { 599 function LongDateString(time) {
638 var YMD = FromJulianDay(Day(time) + kDayZeroInJulianDay); 600 var YMD = FromJulianDay(DAY(time) + kDayZeroInJulianDay);
639 return LongWeekDays[WeekDay(time)] + ', ' 601 return LongWeekDays[WeekDay(time)] + ', '
640 + LongMonths[YMD.month] + ' ' 602 + LongMonths[YMD.month] + ' '
641 + TwoDigitString(YMD.date) + ', ' 603 + TwoDigitString(YMD.date) + ', '
642 + YMD.year; 604 + YMD.year;
643 } 605 }
644 606
645 607
646 function TimeString(time) { 608 function TimeString(time) {
647 return TwoDigitString(HourFromTime(time)) + ':' 609 return TwoDigitString(HOUR_FROM_TIME(time)) + ':'
648 + TwoDigitString(MinFromTime(time)) + ':' 610 + TwoDigitString(MIN_FROM_TIME(time)) + ':'
649 + TwoDigitString(SecFromTime(time)); 611 + TwoDigitString(SEC_FROM_TIME(time));
650 } 612 }
651 613
652 614
653 function LocalTimezoneString(time) { 615 function LocalTimezoneString(time) {
654 var timezoneOffset = 616 var timezoneOffset =
655 (local_time_offset + DaylightSavingsOffset(time)) / msPerMinute; 617 (local_time_offset + DaylightSavingsOffset(time)) / msPerMinute;
656 var sign = (timezoneOffset >= 0) ? 1 : -1; 618 var sign = (timezoneOffset >= 0) ? 1 : -1;
657 var hours = FLOOR((sign * timezoneOffset)/60); 619 var hours = FLOOR((sign * timezoneOffset)/60);
658 var min = FLOOR((sign * timezoneOffset)%60); 620 var min = FLOOR((sign * timezoneOffset)%60);
659 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') + 621 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') +
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 function DateSetTime(ms) { 847 function DateSetTime(ms) {
886 if (!IS_DATE(this)) ThrowDateTypeError(); 848 if (!IS_DATE(this)) ThrowDateTypeError();
887 return %_SetValueOf(this, TimeClip(ToNumber(ms))); 849 return %_SetValueOf(this, TimeClip(ToNumber(ms)));
888 } 850 }
889 851
890 852
891 // ECMA 262 - 15.9.5.28 853 // ECMA 262 - 15.9.5.28
892 function DateSetMilliseconds(ms) { 854 function DateSetMilliseconds(ms) {
893 var t = LocalTime(DATE_VALUE(this)); 855 var t = LocalTime(DATE_VALUE(this));
894 ms = ToNumber(ms); 856 ms = ToNumber(ms);
895 var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); 857 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), SEC_FROM_TIME(t), ms) ;
896 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); 858 return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
897 } 859 }
898 860
899 861
900 // ECMA 262 - 15.9.5.29 862 // ECMA 262 - 15.9.5.29
901 function DateSetUTCMilliseconds(ms) { 863 function DateSetUTCMilliseconds(ms) {
902 var t = DATE_VALUE(this); 864 var t = DATE_VALUE(this);
903 ms = ToNumber(ms); 865 ms = ToNumber(ms);
904 var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); 866 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), SEC_FROM_TIME(t), ms) ;
905 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); 867 return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
906 } 868 }
907 869
908 870
909 // ECMA 262 - 15.9.5.30 871 // ECMA 262 - 15.9.5.30
910 function DateSetSeconds(sec, ms) { 872 function DateSetSeconds(sec, ms) {
911 var t = LocalTime(DATE_VALUE(this)); 873 var t = LocalTime(DATE_VALUE(this));
912 sec = ToNumber(sec); 874 sec = ToNumber(sec);
913 ms = %_ArgumentsLength() < 2 ? GetMillisecondsFrom(this) : ToNumber(ms); 875 ms = %_ArgumentsLength() < 2 ? GetMillisecondsFrom(this) : ToNumber(ms);
914 var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); 876 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms);
915 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); 877 return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
916 } 878 }
917 879
918 880
919 // ECMA 262 - 15.9.5.31 881 // ECMA 262 - 15.9.5.31
920 function DateSetUTCSeconds(sec, ms) { 882 function DateSetUTCSeconds(sec, ms) {
921 var t = DATE_VALUE(this); 883 var t = DATE_VALUE(this);
922 sec = ToNumber(sec); 884 sec = ToNumber(sec);
923 ms = %_ArgumentsLength() < 2 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); 885 ms = %_ArgumentsLength() < 2 ? GetUTCMillisecondsFrom(this) : ToNumber(ms);
924 var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); 886 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms);
925 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); 887 return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
926 } 888 }
927 889
928 890
929 // ECMA 262 - 15.9.5.33 891 // ECMA 262 - 15.9.5.33
930 function DateSetMinutes(min, sec, ms) { 892 function DateSetMinutes(min, sec, ms) {
931 var t = LocalTime(DATE_VALUE(this)); 893 var t = LocalTime(DATE_VALUE(this));
932 min = ToNumber(min); 894 min = ToNumber(min);
933 var argc = %_ArgumentsLength(); 895 var argc = %_ArgumentsLength();
934 sec = argc < 2 ? GetSecondsFrom(this) : ToNumber(sec); 896 sec = argc < 2 ? GetSecondsFrom(this) : ToNumber(sec);
935 ms = argc < 3 ? GetMillisecondsFrom(this) : ToNumber(ms); 897 ms = argc < 3 ? GetMillisecondsFrom(this) : ToNumber(ms);
936 var time = MakeTime(HourFromTime(t), min, sec, ms); 898 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms);
937 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); 899 return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
938 } 900 }
939 901
940 902
941 // ECMA 262 - 15.9.5.34 903 // ECMA 262 - 15.9.5.34
942 function DateSetUTCMinutes(min, sec, ms) { 904 function DateSetUTCMinutes(min, sec, ms) {
943 var t = DATE_VALUE(this); 905 var t = DATE_VALUE(this);
944 min = ToNumber(min); 906 min = ToNumber(min);
945 var argc = %_ArgumentsLength(); 907 var argc = %_ArgumentsLength();
946 sec = argc < 2 ? GetUTCSecondsFrom(this) : ToNumber(sec); 908 sec = argc < 2 ? GetUTCSecondsFrom(this) : ToNumber(sec);
947 ms = argc < 3 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); 909 ms = argc < 3 ? GetUTCMillisecondsFrom(this) : ToNumber(ms);
948 var time = MakeTime(HourFromTime(t), min, sec, ms); 910 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms);
949 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); 911 return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
950 } 912 }
951 913
952 914
953 // ECMA 262 - 15.9.5.35 915 // ECMA 262 - 15.9.5.35
954 function DateSetHours(hour, min, sec, ms) { 916 function DateSetHours(hour, min, sec, ms) {
955 var t = LocalTime(DATE_VALUE(this)); 917 var t = LocalTime(DATE_VALUE(this));
956 hour = ToNumber(hour); 918 hour = ToNumber(hour);
957 var argc = %_ArgumentsLength(); 919 var argc = %_ArgumentsLength();
958 min = argc < 2 ? GetMinutesFrom(this) : ToNumber(min); 920 min = argc < 2 ? GetMinutesFrom(this) : ToNumber(min);
959 sec = argc < 3 ? GetSecondsFrom(this) : ToNumber(sec); 921 sec = argc < 3 ? GetSecondsFrom(this) : ToNumber(sec);
960 ms = argc < 4 ? GetMillisecondsFrom(this) : ToNumber(ms); 922 ms = argc < 4 ? GetMillisecondsFrom(this) : ToNumber(ms);
961 var time = MakeTime(hour, min, sec, ms); 923 var time = MakeTime(hour, min, sec, ms);
962 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); 924 return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
963 } 925 }
964 926
965 927
966 // ECMA 262 - 15.9.5.34 928 // ECMA 262 - 15.9.5.34
967 function DateSetUTCHours(hour, min, sec, ms) { 929 function DateSetUTCHours(hour, min, sec, ms) {
968 var t = DATE_VALUE(this); 930 var t = DATE_VALUE(this);
969 hour = ToNumber(hour); 931 hour = ToNumber(hour);
970 var argc = %_ArgumentsLength(); 932 var argc = %_ArgumentsLength();
971 min = argc < 2 ? GetUTCMinutesFrom(this) : ToNumber(min); 933 min = argc < 2 ? GetUTCMinutesFrom(this) : ToNumber(min);
972 sec = argc < 3 ? GetUTCSecondsFrom(this) : ToNumber(sec); 934 sec = argc < 3 ? GetUTCSecondsFrom(this) : ToNumber(sec);
973 ms = argc < 4 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); 935 ms = argc < 4 ? GetUTCMillisecondsFrom(this) : ToNumber(ms);
974 var time = MakeTime(hour, min, sec, ms); 936 var time = MakeTime(hour, min, sec, ms);
975 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); 937 return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
976 } 938 }
977 939
978 940
979 // ECMA 262 - 15.9.5.36 941 // ECMA 262 - 15.9.5.36
980 function DateSetDate(date) { 942 function DateSetDate(date) {
981 var t = LocalTime(DATE_VALUE(this)); 943 var t = LocalTime(DATE_VALUE(this));
982 date = ToNumber(date); 944 date = ToNumber(date);
983 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); 945 var day = MakeDay(YEAR_FROM_TIME(t), MONTH_FROM_TIME(t), date);
984 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); 946 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
985 } 947 }
986 948
987 949
988 // ECMA 262 - 15.9.5.37 950 // ECMA 262 - 15.9.5.37
989 function DateSetUTCDate(date) { 951 function DateSetUTCDate(date) {
990 var t = DATE_VALUE(this); 952 var t = DATE_VALUE(this);
991 date = ToNumber(date); 953 date = ToNumber(date);
992 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); 954 var day = MakeDay(YEAR_FROM_TIME(t), MONTH_FROM_TIME(t), date);
993 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); 955 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t))));
994 } 956 }
995 957
996 958
997 // ECMA 262 - 15.9.5.38 959 // ECMA 262 - 15.9.5.38
998 function DateSetMonth(month, date) { 960 function DateSetMonth(month, date) {
999 var t = LocalTime(DATE_VALUE(this)); 961 var t = LocalTime(DATE_VALUE(this));
1000 month = ToNumber(month); 962 month = ToNumber(month);
1001 date = %_ArgumentsLength() < 2 ? GetDateFrom(this) : ToNumber(date); 963 date = %_ArgumentsLength() < 2 ? GetDateFrom(this) : ToNumber(date);
1002 var day = MakeDay(YearFromTime(t), month, date); 964 var day = MakeDay(YEAR_FROM_TIME(t), month, date);
1003 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); 965 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
1004 } 966 }
1005 967
1006 968
1007 // ECMA 262 - 15.9.5.39 969 // ECMA 262 - 15.9.5.39
1008 function DateSetUTCMonth(month, date) { 970 function DateSetUTCMonth(month, date) {
1009 var t = DATE_VALUE(this); 971 var t = DATE_VALUE(this);
1010 month = ToNumber(month); 972 month = ToNumber(month);
1011 date = %_ArgumentsLength() < 2 ? GetUTCDateFrom(this) : ToNumber(date); 973 date = %_ArgumentsLength() < 2 ? GetUTCDateFrom(this) : ToNumber(date);
1012 var day = MakeDay(YearFromTime(t), month, date); 974 var day = MakeDay(YEAR_FROM_TIME(t), month, date);
1013 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); 975 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t))));
1014 } 976 }
1015 977
1016 978
1017 // ECMA 262 - 15.9.5.40 979 // ECMA 262 - 15.9.5.40
1018 function DateSetFullYear(year, month, date) { 980 function DateSetFullYear(year, month, date) {
1019 var t = DATE_VALUE(this); 981 var t = DATE_VALUE(this);
1020 t = NUMBER_IS_NAN(t) ? 0 : LocalTimeNoCheck(t); 982 t = NUMBER_IS_NAN(t) ? 0 : LocalTimeNoCheck(t);
1021 year = ToNumber(year); 983 year = ToNumber(year);
1022 var argc = %_ArgumentsLength(); 984 var argc = %_ArgumentsLength();
1023 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); 985 month = argc < 2 ? MONTH_FROM_TIME(t) : ToNumber(month);
1024 date = argc < 3 ? DateFromTime(t) : ToNumber(date); 986 date = argc < 3 ? DATE_FROM_TIME(t) : ToNumber(date);
1025 var day = MakeDay(year, month, date); 987 var day = MakeDay(year, month, date);
1026 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); 988 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
1027 } 989 }
1028 990
1029 991
1030 // ECMA 262 - 15.9.5.41 992 // ECMA 262 - 15.9.5.41
1031 function DateSetUTCFullYear(year, month, date) { 993 function DateSetUTCFullYear(year, month, date) {
1032 var t = DATE_VALUE(this); 994 var t = DATE_VALUE(this);
1033 if (NUMBER_IS_NAN(t)) t = 0; 995 if (NUMBER_IS_NAN(t)) t = 0;
1034 var argc = %_ArgumentsLength(); 996 var argc = %_ArgumentsLength();
1035 year = ToNumber(year); 997 year = ToNumber(year);
1036 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); 998 month = argc < 2 ? MONTH_FROM_TIME(t) : ToNumber(month);
1037 date = argc < 3 ? DateFromTime(t) : ToNumber(date); 999 date = argc < 3 ? DATE_FROM_TIME(t) : ToNumber(date);
1038 var day = MakeDay(year, month, date); 1000 var day = MakeDay(year, month, date);
1039 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); 1001 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t))));
1040 } 1002 }
1041 1003
1042 1004
1043 // ECMA 262 - 15.9.5.42 1005 // ECMA 262 - 15.9.5.42
1044 function DateToUTCString() { 1006 function DateToUTCString() {
1045 var t = DATE_VALUE(this); 1007 var t = DATE_VALUE(this);
1046 if (NUMBER_IS_NAN(t)) return kInvalidDate; 1008 if (NUMBER_IS_NAN(t)) return kInvalidDate;
1047 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT 1009 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT
1048 return WeekDays[WeekDay(t)] + ', ' 1010 return WeekDays[WeekDay(t)] + ', '
1049 + TwoDigitString(DateFromTime(t)) + ' ' 1011 + TwoDigitString(DATE_FROM_TIME(t)) + ' '
1050 + Months[MonthFromTime(t)] + ' ' 1012 + Months[MONTH_FROM_TIME(t)] + ' '
1051 + YearFromTime(t) + ' ' 1013 + YEAR_FROM_TIME(t) + ' '
1052 + TimeString(t) + ' GMT'; 1014 + TimeString(t) + ' GMT';
1053 } 1015 }
1054 1016
1055 1017
1056 // ECMA 262 - B.2.4 1018 // ECMA 262 - B.2.4
1057 function DateGetYear() { 1019 function DateGetYear() {
1058 var t = DATE_VALUE(this); 1020 var t = DATE_VALUE(this);
1059 if (NUMBER_IS_NAN(t)) return $NaN; 1021 if (NUMBER_IS_NAN(t)) return $NaN;
1060 return YearFromTime(LocalTimeNoCheck(t)) - 1900; 1022 return YEAR_FROM_TIME(LocalTimeNoCheck(t)) - 1900;
1061 } 1023 }
1062 1024
1063 1025
1064 // ECMA 262 - B.2.5 1026 // ECMA 262 - B.2.5
1065 function DateSetYear(year) { 1027 function DateSetYear(year) {
1066 var t = LocalTime(DATE_VALUE(this)); 1028 var t = LocalTime(DATE_VALUE(this));
1067 if (NUMBER_IS_NAN(t)) t = 0; 1029 if (NUMBER_IS_NAN(t)) t = 0;
1068 year = ToNumber(year); 1030 year = ToNumber(year);
1069 if (NUMBER_IS_NAN(year)) return %_SetValueOf(this, $NaN); 1031 if (NUMBER_IS_NAN(year)) return %_SetValueOf(this, $NaN);
1070 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) 1032 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99)
1071 ? 1900 + TO_INTEGER(year) : year; 1033 ? 1900 + TO_INTEGER(year) : year;
1072 var day = MakeDay(year, MonthFromTime(t), DateFromTime(t)); 1034 var day = MakeDay(year, MONTH_FROM_TIME(t), DATE_FROM_TIME(t));
1073 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); 1035 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
1074 } 1036 }
1075 1037
1076 1038
1077 // ECMA 262 - B.2.6 1039 // ECMA 262 - B.2.6
1078 // 1040 //
1079 // Notice that this does not follow ECMA 262 completely. ECMA 262 1041 // Notice that this does not follow ECMA 262 completely. ECMA 262
1080 // says that toGMTString should be the same Function object as 1042 // says that toGMTString should be the same Function object as
1081 // toUTCString. JSC does not do this, so for compatibility we do not 1043 // toUTCString. JSC does not do this, so for compatibility we do not
1082 // do that either. Instead, we create a new function whose name 1044 // do that either. Instead, we create a new function whose name
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1164 "toGMTString", DateToGMTString, 1126 "toGMTString", DateToGMTString,
1165 "toUTCString", DateToUTCString, 1127 "toUTCString", DateToUTCString,
1166 "getYear", DateGetYear, 1128 "getYear", DateGetYear,
1167 "setYear", DateSetYear, 1129 "setYear", DateSetYear,
1168 "toISOString", DateToISOString, 1130 "toISOString", DateToISOString,
1169 "toJSON", DateToJSON 1131 "toJSON", DateToJSON
1170 )); 1132 ));
1171 } 1133 }
1172 1134
1173 SetupDate(); 1135 SetupDate();
OLDNEW
« no previous file with comments | « no previous file | src/macros.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698