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

Side by Side Diff: runtime/lib/date_patch.dart

Issue 1284873002: VM: Use const instead of final for constants in runtime libraries. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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
« no previous file with comments | « no previous file | runtime/lib/double.dart » ('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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 // Dart core library. 4 // Dart core library.
5 5
6 // VM implementation of DateTime. 6 // VM implementation of DateTime.
7 patch class DateTime { 7 patch class DateTime {
8 // Natives. 8 // Natives.
9 // The natives have been moved up here to work around Issue 10401. 9 // The natives have been moved up here to work around Issue 10401.
10 static int _getCurrentMs() native "DateNatives_currentTimeMillis"; 10 static int _getCurrentMs() native "DateNatives_currentTimeMillis";
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 return new Duration(seconds: offsetInSeconds); 60 return new Duration(seconds: offsetInSeconds);
61 } 61 }
62 62
63 /** The first list contains the days until each month in non-leap years. The 63 /** The first list contains the days until each month in non-leap years. The
64 * second list contains the days in leap years. */ 64 * second list contains the days in leap years. */
65 static const List<List<int>> _DAYS_UNTIL_MONTH = 65 static const List<List<int>> _DAYS_UNTIL_MONTH =
66 const [const [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], 66 const [const [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
67 const [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]]; 67 const [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]];
68 68
69 static List _computeUpperPart(int localMs) { 69 static List _computeUpperPart(int localMs) {
70 final int DAYS_IN_4_YEARS = 4 * 365 + 1; 70 const int DAYS_IN_4_YEARS = 4 * 365 + 1;
71 final int DAYS_IN_100_YEARS = 25 * DAYS_IN_4_YEARS - 1; 71 const int DAYS_IN_100_YEARS = 25 * DAYS_IN_4_YEARS - 1;
72 final int DAYS_IN_400_YEARS = 4 * DAYS_IN_100_YEARS + 1; 72 const int DAYS_IN_400_YEARS = 4 * DAYS_IN_100_YEARS + 1;
73 final int DAYS_1970_TO_2000 = 30 * 365 + 7; 73 const int DAYS_1970_TO_2000 = 30 * 365 + 7;
74 final int DAYS_OFFSET = 1000 * DAYS_IN_400_YEARS + 5 * DAYS_IN_400_YEARS - 74 const int DAYS_OFFSET = 1000 * DAYS_IN_400_YEARS + 5 * DAYS_IN_400_YEARS -
75 DAYS_1970_TO_2000; 75 DAYS_1970_TO_2000;
76 final int YEARS_OFFSET = 400000; 76 const int YEARS_OFFSET = 400000;
77 77
78 int resultYear = 0; 78 int resultYear = 0;
79 int resultMonth = 0; 79 int resultMonth = 0;
80 int resultDay = 0; 80 int resultDay = 0;
81 81
82 // Always round down. 82 // Always round down.
83 final int daysSince1970 = _flooredDivision(localMs, 83 final int daysSince1970 = _flooredDivision(localMs,
84 Duration.MILLISECONDS_PER_DAY); 84 Duration.MILLISECONDS_PER_DAY);
85 int days = daysSince1970; 85 int days = daysSince1970;
86 days += DAYS_OFFSET; 86 days += DAYS_OFFSET;
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 return 2008 + (recentYear - 2008) % 28; 288 return 2008 + (recentYear - 2008) % 28;
289 } 289 }
290 290
291 /** 291 /**
292 * Returns the UTC year for the corresponding [secondsSinceEpoch]. 292 * Returns the UTC year for the corresponding [secondsSinceEpoch].
293 * It is relatively fast for values in the range 0 to year 2098. 293 * It is relatively fast for values in the range 0 to year 2098.
294 * 294 *
295 * Code is adapted from V8. 295 * Code is adapted from V8.
296 */ 296 */
297 static int _yearsFromSecondsSinceEpoch(int secondsSinceEpoch) { 297 static int _yearsFromSecondsSinceEpoch(int secondsSinceEpoch) {
298 final int DAYS_IN_4_YEARS = 4 * 365 + 1; 298 const int DAYS_IN_4_YEARS = 4 * 365 + 1;
299 final int DAYS_IN_100_YEARS = 25 * DAYS_IN_4_YEARS - 1; 299 const int DAYS_IN_100_YEARS = 25 * DAYS_IN_4_YEARS - 1;
300 final int DAYS_YEAR_2098 = DAYS_IN_100_YEARS + 6 * DAYS_IN_4_YEARS; 300 const int DAYS_YEAR_2098 = DAYS_IN_100_YEARS + 6 * DAYS_IN_4_YEARS;
301 301
302 int days = secondsSinceEpoch ~/ Duration.SECONDS_PER_DAY; 302 int days = secondsSinceEpoch ~/ Duration.SECONDS_PER_DAY;
303 if (days > 0 && days < DAYS_YEAR_2098) { 303 if (days > 0 && days < DAYS_YEAR_2098) {
304 // According to V8 this fast case works for dates from 1970 to 2099. 304 // According to V8 this fast case works for dates from 1970 to 2099.
305 return 1970 + (4 * days + 2) ~/ DAYS_IN_4_YEARS; 305 return 1970 + (4 * days + 2) ~/ DAYS_IN_4_YEARS;
306 } 306 }
307 int ms = secondsSinceEpoch * Duration.MILLISECONDS_PER_SECOND; 307 int ms = secondsSinceEpoch * Duration.MILLISECONDS_PER_SECOND;
308 return _computeUpperPart(ms)[_YEAR_INDEX]; 308 return _computeUpperPart(ms)[_YEAR_INDEX];
309 } 309 }
310 310
311 /** 311 /**
312 * Returns a date in seconds that is equivalent to the current date. An 312 * Returns a date in seconds that is equivalent to the current date. An
313 * equivalent date has the same fields ([:month:], [:day:], etc.) as the 313 * equivalent date has the same fields ([:month:], [:day:], etc.) as the
314 * [this], but the [:year:] is in the range [1970..2037]. 314 * [this], but the [:year:] is in the range [1970..2037].
315 * 315 *
316 * * The time since the beginning of the year is the same. 316 * * The time since the beginning of the year is the same.
317 * * If [this] is in a leap year then the returned seconds are in a leap 317 * * If [this] is in a leap year then the returned seconds are in a leap
318 * year, too. 318 * year, too.
319 * * The week day of [this] is the same as the one for the returned date. 319 * * The week day of [this] is the same as the one for the returned date.
320 */ 320 */
321 static int _equivalentSeconds(int millisecondsSinceEpoch) { 321 static int _equivalentSeconds(int millisecondsSinceEpoch) {
322 final int CUT_OFF_SECONDS = 2100000000; 322 const int CUT_OFF_SECONDS = 2100000000;
323 323
324 int secondsSinceEpoch = _flooredDivision(millisecondsSinceEpoch, 324 int secondsSinceEpoch = _flooredDivision(millisecondsSinceEpoch,
325 Duration.MILLISECONDS_PER_SECOND); 325 Duration.MILLISECONDS_PER_SECOND);
326 326
327 if (secondsSinceEpoch < 0 || secondsSinceEpoch >= CUT_OFF_SECONDS) { 327 if (secondsSinceEpoch < 0 || secondsSinceEpoch >= CUT_OFF_SECONDS) {
328 int year = _yearsFromSecondsSinceEpoch(secondsSinceEpoch); 328 int year = _yearsFromSecondsSinceEpoch(secondsSinceEpoch);
329 int days = _dayFromYear(year); 329 int days = _dayFromYear(year);
330 int equivalentYear = _equivalentYear(year); 330 int equivalentYear = _equivalentYear(year);
331 int equivalentDays = _dayFromYear(equivalentYear); 331 int equivalentDays = _dayFromYear(equivalentYear);
332 int diffDays = equivalentDays - days; 332 int diffDays = equivalentDays - days;
333 secondsSinceEpoch += diffDays * Duration.SECONDS_PER_DAY; 333 secondsSinceEpoch += diffDays * Duration.SECONDS_PER_DAY;
334 } 334 }
335 return secondsSinceEpoch; 335 return secondsSinceEpoch;
336 } 336 }
337 337
338 static int _timeZoneOffsetInSeconds(int millisecondsSinceEpoch) { 338 static int _timeZoneOffsetInSeconds(int millisecondsSinceEpoch) {
339 int equivalentSeconds = _equivalentSeconds(millisecondsSinceEpoch); 339 int equivalentSeconds = _equivalentSeconds(millisecondsSinceEpoch);
340 return _timeZoneOffsetInSecondsForClampedSeconds(equivalentSeconds); 340 return _timeZoneOffsetInSecondsForClampedSeconds(equivalentSeconds);
341 } 341 }
342 342
343 static String _timeZoneName(int millisecondsSinceEpoch) { 343 static String _timeZoneName(int millisecondsSinceEpoch) {
344 int equivalentSeconds = _equivalentSeconds(millisecondsSinceEpoch); 344 int equivalentSeconds = _equivalentSeconds(millisecondsSinceEpoch);
345 return _timeZoneNameForClampedSeconds(equivalentSeconds); 345 return _timeZoneNameForClampedSeconds(equivalentSeconds);
346 } 346 }
347 } 347 }
OLDNEW
« no previous file with comments | « no previous file | runtime/lib/double.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698