| 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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 offset: 0, | 149 offset: 0, |
| 150 // Time interval where the cached offset is valid. | 150 // Time interval where the cached offset is valid. |
| 151 start: 0, end: -1, | 151 start: 0, end: -1, |
| 152 // Size of next interval expansion. | 152 // Size of next interval expansion. |
| 153 increment: 0 | 153 increment: 0 |
| 154 }; | 154 }; |
| 155 | 155 |
| 156 | 156 |
| 157 // NOTE: The implementation relies on the fact that no time zones have | 157 // NOTE: The implementation relies on the fact that no time zones have |
| 158 // more than one daylight savings offset change per month. | 158 // more than one daylight savings offset change per month. |
| 159 // This function must never be called with the argument NaN. |
| 160 // All uses of it are guarded so this does not happen. |
| 159 function DaylightSavingsOffset(t) { | 161 function DaylightSavingsOffset(t) { |
| 160 // Load the cache object from the builtins object. | 162 // Load the cache object from the builtins object. |
| 161 var cache = DST_offset_cache; | 163 var cache = DST_offset_cache; |
| 162 | 164 |
| 163 // Cache the start and the end in local variables for fast access. | 165 // Cache the start and the end in local variables for fast access. |
| 164 var start = cache.start; | 166 var start = cache.start; |
| 165 var end = cache.end; | 167 var end = cache.end; |
| 166 | 168 |
| 167 if (start <= t) { | 169 if (start <= t) { |
| 168 // If the time fits in the cached interval, return the cached offset. | 170 // If the time fits in the cached interval, return the cached offset. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 cache.start = cache.end = t; | 214 cache.start = cache.end = t; |
| 213 cache.increment = msPerMonth; | 215 cache.increment = msPerMonth; |
| 214 return offset; | 216 return offset; |
| 215 } | 217 } |
| 216 | 218 |
| 217 | 219 |
| 218 var timezone_cache_time = $NaN; | 220 var timezone_cache_time = $NaN; |
| 219 var timezone_cache_timezone; | 221 var timezone_cache_timezone; |
| 220 | 222 |
| 221 function LocalTimezone(t) { | 223 function LocalTimezone(t) { |
| 224 if (NUMBER_IS_NAN(t)) return ""; |
| 222 if (t == timezone_cache_time) { | 225 if (t == timezone_cache_time) { |
| 223 return timezone_cache_timezone; | 226 return timezone_cache_timezone; |
| 224 } | 227 } |
| 225 var timezone = %DateLocalTimezone(EquivalentTime(t)); | 228 var timezone = %DateLocalTimezone(EquivalentTime(t)); |
| 226 timezone_cache_time = t; | 229 timezone_cache_time = t; |
| 227 timezone_cache_timezone = timezone; | 230 timezone_cache_timezone = timezone; |
| 228 return timezone; | 231 return timezone; |
| 229 } | 232 } |
| 230 | 233 |
| 231 | 234 |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 value = TimeClip(year); | 460 value = TimeClip(year); |
| 458 | 461 |
| 459 } else if (IS_STRING(year)) { | 462 } else if (IS_STRING(year)) { |
| 460 // Probe the Date cache. If we already have a time value for the | 463 // Probe the Date cache. If we already have a time value for the |
| 461 // given time, we re-use that instead of parsing the string again. | 464 // given time, we re-use that instead of parsing the string again. |
| 462 var cache = Date_cache; | 465 var cache = Date_cache; |
| 463 if (cache.string === year) { | 466 if (cache.string === year) { |
| 464 value = cache.time; | 467 value = cache.time; |
| 465 } else { | 468 } else { |
| 466 value = DateParse(year); | 469 value = DateParse(year); |
| 467 cache.time = value; | 470 if (!NUMBER_IS_NAN(value)) { |
| 468 cache.year = YearFromTime(LocalTimeNoCheck(value)); | 471 cache.time = value; |
| 469 cache.string = year; | 472 cache.year = YearFromTime(LocalTimeNoCheck(value)); |
| 473 cache.string = year; |
| 474 } |
| 470 } | 475 } |
| 471 | 476 |
| 472 } else { | 477 } else { |
| 473 // According to ECMA 262, no hint should be given for this | 478 // According to ECMA 262, no hint should be given for this |
| 474 // conversion. However, ToPrimitive defaults to STRING_HINT for | 479 // conversion. However, ToPrimitive defaults to STRING_HINT for |
| 475 // Date objects which will lose precision when the Date | 480 // Date objects which will lose precision when the Date |
| 476 // constructor is called with another Date object as its | 481 // constructor is called with another Date object as its |
| 477 // argument. We therefore use NUMBER_HINT for the conversion, | 482 // argument. We therefore use NUMBER_HINT for the conversion, |
| 478 // which is the default for everything else than Date objects. | 483 // which is the default for everything else than Date objects. |
| 479 // This makes us behave like KJS and SpiderMonkey. | 484 // This makes us behave like KJS and SpiderMonkey. |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 | 645 |
| 641 | 646 |
| 642 function TimeString(time) { | 647 function TimeString(time) { |
| 643 return TwoDigitString(HourFromTime(time)) + ':' | 648 return TwoDigitString(HourFromTime(time)) + ':' |
| 644 + TwoDigitString(MinFromTime(time)) + ':' | 649 + TwoDigitString(MinFromTime(time)) + ':' |
| 645 + TwoDigitString(SecFromTime(time)); | 650 + TwoDigitString(SecFromTime(time)); |
| 646 } | 651 } |
| 647 | 652 |
| 648 | 653 |
| 649 function LocalTimezoneString(time) { | 654 function LocalTimezoneString(time) { |
| 655 // time is not NaN because of checks in calling functions. |
| 650 var timezoneOffset = (local_time_offset + DaylightSavingsOffset(time)) / msPer
Minute; | 656 var timezoneOffset = (local_time_offset + DaylightSavingsOffset(time)) / msPer
Minute; |
| 651 var sign = (timezoneOffset >= 0) ? 1 : -1; | 657 var sign = (timezoneOffset >= 0) ? 1 : -1; |
| 652 var hours = FLOOR((sign * timezoneOffset)/60); | 658 var hours = FLOOR((sign * timezoneOffset)/60); |
| 653 var min = FLOOR((sign * timezoneOffset)%60); | 659 var min = FLOOR((sign * timezoneOffset)%60); |
| 654 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') + TwoDigitString(hours) + TwoDigi
tString(min); | 660 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') + TwoDigitString(hours) + TwoDigi
tString(min); |
| 655 return gmt + ' (' + LocalTimezone(time) + ')'; | 661 return gmt + ' (' + LocalTimezone(time) + ')'; |
| 656 } | 662 } |
| 657 | 663 |
| 658 | 664 |
| 659 function DatePrintString(time) { | 665 function DatePrintString(time) { |
| (...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1158 "toGMTString", DateToGMTString, | 1164 "toGMTString", DateToGMTString, |
| 1159 "toUTCString", DateToUTCString, | 1165 "toUTCString", DateToUTCString, |
| 1160 "getYear", DateGetYear, | 1166 "getYear", DateGetYear, |
| 1161 "setYear", DateSetYear, | 1167 "setYear", DateSetYear, |
| 1162 "toISOString", DateToISOString, | 1168 "toISOString", DateToISOString, |
| 1163 "toJSON", DateToJSON | 1169 "toJSON", DateToJSON |
| 1164 )); | 1170 )); |
| 1165 } | 1171 } |
| 1166 | 1172 |
| 1167 SetupDate(); | 1173 SetupDate(); |
| OLD | NEW |