19258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org// Copyright 2006-2008 the V8 project authors. All rights reserved.
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file.
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org"use strict";
6a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org
741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// This file relies on the fact that the following declarations have been made
841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// in v8natives.js:
9f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// var $isFinite = GlobalIsFinite;
1041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
11e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvar $Date = global.Date;
12e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// -------------------------------------------------------------------
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// This file contains date support implemented in JavaScript.
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
172abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org// Helper function to throw error.
182abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgfunction ThrowDateTypeError() {
192abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  throw new $TypeError('this is not a Date object.');
202abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org}
212abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
23690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgvar timezone_cache_time = NAN;
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar timezone_cache_timezone;
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
26397734cdd4d321a7fd57a0cf1c99d40bbf354ba3dslomov@chromium.orgfunction LocalTimezone(t) {
27b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org  if (NUMBER_IS_NAN(t)) return "";
28486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  CheckDateCacheCurrent();
29397734cdd4d321a7fd57a0cf1c99d40bbf354ba3dslomov@chromium.org  if (t == timezone_cache_time) {
3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    return timezone_cache_timezone;
3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
324efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var timezone = %DateLocalTimezone(t);
3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  timezone_cache_time = t;
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  timezone_cache_timezone = timezone;
3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return timezone;
3641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction UTC(time) {
402abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(time)) return time;
41421a0f4d7b8d61d313e8bcc630f34f942d7c811ewhesse@chromium.org  // local_time_offset is needed before the call to DaylightSavingsOffset,
42421a0f4d7b8d61d313e8bcc630f34f942d7c811ewhesse@chromium.org  // so it may be uninitialized.
434efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return %DateToUTC(time);
4441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.1.11
4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeTime(hour, min, sec, ms) {
49690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(hour)) return NAN;
50690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(min)) return NAN;
51690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(sec)) return NAN;
52690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(ms)) return NAN;
5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return TO_INTEGER(hour) * msPerHour
5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      + TO_INTEGER(min) * msPerMinute
5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      + TO_INTEGER(sec) * msPerSecond
5643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      + TO_INTEGER(ms);
5741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
5843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.1.12
6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction TimeInYear(year) {
6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return DaysInYear(year) * msPerDay;
6341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Compute number of days given a year, month, date.
6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Note that month and date can lie outside the normal range.
6843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//   For example:
6943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     MakeDay(2007, -4, 20) --> MakeDay(2006, 8, 20)
7043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     MakeDay(2007, -33, 1) --> MakeDay(2004, 3, 1)
7143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     MakeDay(2007, 14, -50) --> MakeDay(2007, 8, 11)
7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeDay(year, month, date) {
73690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) return NAN;
7443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7569ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org  // Convert to integer and map -0 to 0.
7669ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org  year = TO_INTEGER_MAP_MINUS_ZERO(year);
7769ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org  month = TO_INTEGER_MAP_MINUS_ZERO(month);
7869ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org  date = TO_INTEGER_MAP_MINUS_ZERO(date);
7943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
80ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  if (year < kMinYear || year > kMaxYear ||
81c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      month < kMinMonth || month > kMaxMonth) {
82690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org    return NAN;
8343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
8443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
85c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Now we rely on year and month being SMIs.
86fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org  return %DateMakeDay(year | 0, month | 0) + date - 1;
8741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
8843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
9043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.1.13
9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeDate(day, time) {
925f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  var time = day * msPerDay + time;
935f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // Some of our runtime funtions for computing UTC(time) rely on
945f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // times not being significantly larger than MAX_TIME_MS. If there
955f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // is no way that the time can be within range even after UTC
965f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // conversion we return NaN immediately instead of relying on
975f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // TimeClip to do it.
98690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if ($abs(time) > MAX_TIME_BEFORE_UTC) return NAN;
995f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  return time;
10041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
10343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.1.14
10443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction TimeClip(time) {
105690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(time)) return NAN;
106690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if ($abs(time) > MAX_TIME_MS) return NAN;
10743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return TO_INTEGER(time);
10841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
10943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
11043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
11168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org// The Date cache is used to limit the cost of parsing the same Date
11268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org// strings over and over again.
11368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.orgvar Date_cache = {
11468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org  // Cached time value.
115113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org  time: 0,
11668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org  // String input for which the cached time is valid.
11768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org  string: null
11868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org};
11968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org
12068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org
121e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgfunction DateConstructor(year, month, date, hours, minutes, seconds, ms) {
12286f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  if (!%_IsConstructCall()) {
12386f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    // ECMA 262 - 15.9.2
12486f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    return (new $Date()).toString();
12586f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  }
12686f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org
12786f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  // ECMA 262 - 15.9.3
12886f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  var argc = %_ArgumentsLength();
12986f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  var value;
13086f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  if (argc == 0) {
13186f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    value = %DateCurrentTime();
1324efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    SET_UTC_DATE_VALUE(this, value);
13386f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  } else if (argc == 1) {
13486f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    if (IS_NUMBER(year)) {
1354efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      value = year;
13668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org    } else if (IS_STRING(year)) {
13768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      // Probe the Date cache. If we already have a time value for the
13868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      // given time, we re-use that instead of parsing the string again.
139486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org      CheckDateCacheCurrent();
14068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      var cache = Date_cache;
14168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      if (cache.string === year) {
14268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org        value = cache.time;
14368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      } else {
14468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org        value = DateParse(year);
145b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org        if (!NUMBER_IS_NAN(value)) {
146b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org          cache.time = value;
147b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org          cache.string = year;
148b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org        }
14968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      }
15068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org
15186f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    } else {
15243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      // According to ECMA 262, no hint should be given for this
15386f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // conversion. However, ToPrimitive defaults to STRING_HINT for
15486f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // Date objects which will lose precision when the Date
15543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      // constructor is called with another Date object as its
15686f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // argument. We therefore use NUMBER_HINT for the conversion,
15786f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // which is the default for everything else than Date objects.
15886f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // This makes us behave like KJS and SpiderMonkey.
15943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      var time = ToPrimitive(year, NUMBER_HINT);
1604efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      value = IS_STRING(time) ? DateParse(time) : ToNumber(time);
16143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    }
1624efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    SET_UTC_DATE_VALUE(this, value);
16386f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  } else {
16443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    year = ToNumber(year);
16543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    month = ToNumber(month);
16643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    date = argc > 2 ? ToNumber(date) : 1;
16743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    hours = argc > 3 ? ToNumber(hours) : 0;
16843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    minutes = argc > 4 ? ToNumber(minutes) : 0;
16943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    seconds = argc > 5 ? ToNumber(seconds) : 0;
17043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    ms = argc > 6 ? ToNumber(ms) : 0;
1711b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org    year = (!NUMBER_IS_NAN(year) &&
1721b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org            0 <= TO_INTEGER(year) &&
1731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org            TO_INTEGER(year) <= 99) ? 1900 + TO_INTEGER(year) : year;
17443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    var day = MakeDay(year, month, date);
17543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    var time = MakeTime(hours, minutes, seconds, ms);
1764efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    value = MakeDate(day, time);
1774efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    SET_LOCAL_DATE_VALUE(this, value);
17843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
179e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
18043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
18143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
18243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
1831b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgvar Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
1841b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org              'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
18543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
18643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
18743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction TwoDigitString(value) {
18843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return value < 10 ? "0" + value : "" + value;
18941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
19043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
19143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1924efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction DateString(date) {
1934efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return WeekDays[LOCAL_WEEKDAY(date)] + ' '
1944efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + Months[LOCAL_MONTH(date)] + ' '
1954efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(LOCAL_DAY(date)) + ' '
1964efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + LOCAL_YEAR(date);
19741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
19843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
19943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2001b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgvar LongWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday',
2011b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org    'Thursday', 'Friday', 'Saturday'];
2021b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgvar LongMonths = ['January', 'February', 'March', 'April', 'May', 'June',
2031b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org    'July', 'August', 'September', 'October', 'November', 'December'];
2049bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org
2059bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org
2064efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction LongDateString(date) {
2074efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LongWeekDays[LOCAL_WEEKDAY(date)] + ', '
2084efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + LongMonths[LOCAL_MONTH(date)] + ' '
2094efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(LOCAL_DAY(date)) + ', '
2104efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + LOCAL_YEAR(date);
2119bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org}
2129bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org
2139bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org
2144efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction TimeString(date) {
2154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TwoDigitString(LOCAL_HOUR(date)) + ':'
2164efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(LOCAL_MIN(date)) + ':'
2174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(LOCAL_SEC(date));
21841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
21943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
22043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2214efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction TimeStringUTC(date) {
2224efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TwoDigitString(UTC_HOUR(date)) + ':'
2234efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(UTC_MIN(date)) + ':'
2244efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(UTC_SEC(date));
2254efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org}
2264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2284efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction LocalTimezoneString(date) {
229397734cdd4d321a7fd57a0cf1c99d40bbf354ba3dslomov@chromium.org  var timezone = LocalTimezone(UTC_DATE_VALUE(date));
230397734cdd4d321a7fd57a0cf1c99d40bbf354ba3dslomov@chromium.org
2314efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var timezoneOffset = -TIMEZONE_OFFSET(date);
23243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var sign = (timezoneOffset >= 0) ? 1 : -1;
2337c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org  var hours = FLOOR((sign * timezoneOffset)/60);
2347c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org  var min   = FLOOR((sign * timezoneOffset)%60);
235b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org  var gmt = ' GMT' + ((sign == 1) ? '+' : '-') +
236b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org      TwoDigitString(hours) + TwoDigitString(min);
23725156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org  return gmt + ' (' +  timezone + ')';
23841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
23943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
24043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2414efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction DatePrintString(date) {
2424efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return DateString(date) + ' ' + TimeString(date);
24341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
24443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
24543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// -------------------------------------------------------------------
24643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
24768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org// Reused output buffer. Used when parsing date strings.
2484111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgvar parse_buffer = $Array(8);
24943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
25043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.4.2
25143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateParse(string) {
252bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org  var arr = %DateParseString(ToString(string), parse_buffer);
253690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (IS_NULL(arr)) return NAN;
25443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
25543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var day = MakeDay(arr[0], arr[1], arr[2]);
2564111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org  var time = MakeTime(arr[3], arr[4], arr[5], arr[6]);
25743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var date = MakeDate(day, time);
25841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
2594111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org  if (IS_NULL(arr[7])) {
26043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    return TimeClip(UTC(date));
26143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  } else {
2624111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org    return TimeClip(date - arr[7] * 1000);
26343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
26441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
26543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
26643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
26743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.4.3
26843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateUTC(year, month, date, hours, minutes, seconds, ms) {
26943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = ToNumber(year);
27043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  month = ToNumber(month);
27143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
27243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  date = argc > 2 ? ToNumber(date) : 1;
27343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  hours = argc > 3 ? ToNumber(hours) : 0;
27443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  minutes = argc > 4 ? ToNumber(minutes) : 0;
27543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  seconds = argc > 5 ? ToNumber(seconds) : 0;
27643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  ms = argc > 6 ? ToNumber(ms) : 0;
2771b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org  year = (!NUMBER_IS_NAN(year) &&
2781b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org          0 <= TO_INTEGER(year) &&
2791b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org          TO_INTEGER(year) <= 99) ? 1900 + TO_INTEGER(year) : year;
28043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var day = MakeDay(year, month, date);
28143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var time = MakeTime(hours, minutes, seconds, ms);
2824efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TimeClip(MakeDate(day, time));
28341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
28443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
28543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
286c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org// ECMA 262 - 15.9.4.4
28743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateNow() {
28831e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager  return %DateCurrentTime();
28941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
29043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
29143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
29243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.2
29343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateToString() {
2944efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this)
2952abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
2964efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time_zone_string = LocalTimezoneString(this)
2974efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return DatePrintString(this) + time_zone_string;
29841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
29943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
30043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
30143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.3
30243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateToDateString() {
3034efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
3042abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3054efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return DateString(this);
30641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
30743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
30843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
30943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.4
31043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateToTimeString() {
3114efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
3122abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3134efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time_zone_string = LocalTimezoneString(this);
3144efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TimeString(this) + time_zone_string;
31541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
31641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
31741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
31841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// ECMA 262 - 15.9.5.5
31941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction DateToLocaleString() {
3207a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org  return %_CallFunction(this, DateToString);
32141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
32241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
32341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
32441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// ECMA 262 - 15.9.5.6
32541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction DateToLocaleDateString() {
3264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
3272abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3284efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LongDateString(this);
32941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
33043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
33143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
332c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// ECMA 262 - 15.9.5.7
333c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgfunction DateToLocaleTimeString() {
3344efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
3352abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3364efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TimeString(this);
33741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
33841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
33941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
34041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// ECMA 262 - 15.9.5.8
34141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction DateValueOf() {
3424efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_DATE_VALUE(this);
34341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
344c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
345c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
34643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.9
34743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetTime() {
3484efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_DATE_VALUE(this);
34943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
35043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
35143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
35243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.10
35343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetFullYear() {
3544efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_YEAR(this);
35541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
35643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
35743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
35843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.11
35943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCFullYear() {
3604efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_YEAR(this);
36141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
36243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
36343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
36443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.12
36543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetMonth() {
3664efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_MONTH(this);
36741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
36843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
36943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
37043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.13
37143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCMonth() {
3724efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_MONTH(this);
37341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
37443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
37543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
37643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.14
37743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetDate() {
3784efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_DAY(this);
37941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
38043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
38143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
38243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.15
38343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCDate() {
3844efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_DAY(this);
38541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
38643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
38743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
38843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.16
38943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetDay() {
3904efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_WEEKDAY(this);
39141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
39243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
39343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
39443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.17
39543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCDay() {
3964efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_WEEKDAY(this);
39741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
39843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
39943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
40043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.18
40143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetHours() {
4024efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_HOUR(this);
40341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
40443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
40543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
40643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.19
40743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCHours() {
4084efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_HOUR(this);
40941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
41043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
41143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
41243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.20
41343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetMinutes() {
4144efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_MIN(this);
41541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
41643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
41743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
41843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.21
41943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCMinutes() {
4204efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_MIN(this);
42141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
42243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
42343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
42443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.22
42543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetSeconds() {
4264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_SEC(this);
42741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
42843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
42943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
43043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.23
43143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCSeconds() {
4324efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_SEC(this)
43341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
43443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
43543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
43643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.24
43743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetMilliseconds() {
4384efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_MS(this);
43941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
44043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
44143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
44243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.25
44343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCMilliseconds() {
4444efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_MS(this);
44541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
44643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
44743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
44843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.26
44943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetTimezoneOffset() {
4504efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TIMEZONE_OFFSET(this);
45141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
45243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
45343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
45443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.27
45543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetTime(ms) {
4564efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK_DATE(this);
4574efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  SET_UTC_DATE_VALUE(this, ToNumber(ms));
4584efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_DATE_VALUE(this);
45941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
46043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
46143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
46243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.28
46343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetMilliseconds(ms) {
4644efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
46543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  ms = ToNumber(ms);
4664efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), LOCAL_SEC(this), ms);
4671456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
46841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
46943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
47043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
47143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.29
47243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCMilliseconds(ms) {
4734efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
47443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  ms = ToNumber(ms);
4754efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(UTC_HOUR(this),
4764efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org                      UTC_MIN(this),
4774efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org                      UTC_SEC(this),
4781b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org                      ms);
4794efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
48041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
48143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
48243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
48343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.30
48443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetSeconds(sec, ms) {
4854efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
48643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  sec = ToNumber(sec);
4874efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = %_ArgumentsLength() < 2 ? LOCAL_MS(this) : ToNumber(ms);
4884efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), sec, ms);
4894efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
49041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
49143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
49243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
49343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.31
49443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCSeconds(sec, ms) {
4954efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
49643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  sec = ToNumber(sec);
4974efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = %_ArgumentsLength() < 2 ? UTC_MS(this) : ToNumber(ms);
4984efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(UTC_HOUR(this), UTC_MIN(this), sec, ms);
4994efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
50041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
50143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
50243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
50343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.33
50443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetMinutes(min, sec, ms) {
5054efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
50643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  min = ToNumber(min);
50743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
5084efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  sec = argc < 2 ? LOCAL_SEC(this) : ToNumber(sec);
5094efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = argc < 3 ? LOCAL_MS(this) : ToNumber(ms);
5104efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(LOCAL_HOUR(this), min, sec, ms);
5114efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
51241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
51343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
51443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
51543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.34
51643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCMinutes(min, sec, ms) {
5174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
51843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  min = ToNumber(min);
51943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
5204efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  sec = argc < 2 ? UTC_SEC(this) : ToNumber(sec);
5214efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = argc < 3 ? UTC_MS(this) : ToNumber(ms);
5224efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(UTC_HOUR(this), min, sec, ms);
5234efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
52441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
52543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
52643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
52743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.35
52843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetHours(hour, min, sec, ms) {
5294efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
53043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  hour = ToNumber(hour);
53143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
5324efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  min = argc < 2 ? LOCAL_MIN(this) : ToNumber(min);
5334efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  sec = argc < 3 ? LOCAL_SEC(this) : ToNumber(sec);
5344efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = argc < 4 ? LOCAL_MS(this) : ToNumber(ms);
53543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var time = MakeTime(hour, min, sec, ms);
5364efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
53741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
53843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
53943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
54043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.34
54143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCHours(hour, min, sec, ms) {
5424efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
54343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  hour = ToNumber(hour);
54443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
5454efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  min = argc < 2 ? UTC_MIN(this) : ToNumber(min);
5464efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  sec = argc < 3 ? UTC_SEC(this) : ToNumber(sec);
5474efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = argc < 4 ? UTC_MS(this) : ToNumber(ms);
54843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var time = MakeTime(hour, min, sec, ms);
5494efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
55041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
55143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
55243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
55343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.36
55443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetDate(date) {
5554efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
55643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  date = ToNumber(date);
5574efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(LOCAL_YEAR(this), LOCAL_MONTH(this), date);
5584efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this)));
55941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
56043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
56143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
56243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.37
56343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCDate(date) {
5644efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
56543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  date = ToNumber(date);
5664efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(UTC_YEAR(this), UTC_MONTH(this), date);
5674efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this)));
56841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
56943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
57043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
57143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.38
57243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetMonth(month, date) {
5734efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
57443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  month = ToNumber(month);
5754efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  date = %_ArgumentsLength() < 2 ? LOCAL_DAY(this) : ToNumber(date);
5764efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(LOCAL_YEAR(this), month, date);
5774efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this)));
57841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
57943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
58043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
58143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.39
58243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCMonth(month, date) {
5834efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
58443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  month = ToNumber(month);
5854efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  date = %_ArgumentsLength() < 2 ? UTC_DAY(this) : ToNumber(date);
5864efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(UTC_YEAR(this), month, date);
5874efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this)));
58841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
58943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
59043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
59143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.40
59243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetFullYear(year, month, date) {
5934efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
59443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = ToNumber(year);
59543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
5964efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time ;
5974efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (NUMBER_IS_NAN(t)) {
5984efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = argc < 2 ? 0 : ToNumber(month);
5994efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = argc < 3 ? 1 : ToNumber(date);
6004efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = 0;
6014efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  } else {
6024efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = argc < 2 ? LOCAL_MONTH(this) : ToNumber(month);
6034efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = argc < 3 ? LOCAL_DAY(this) : ToNumber(date);
6044efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = LOCAL_TIME_IN_DAY(this);
6054efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
60643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var day = MakeDay(year, month, date);
6074efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time));
60841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
60943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
61043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
61143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.41
61243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCFullYear(year, month, date) {
6134efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
61443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = ToNumber(year);
6154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var argc = %_ArgumentsLength();
6164efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time ;
6174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (NUMBER_IS_NAN(t)) {
6184efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = argc < 2 ? 0 : ToNumber(month);
6194efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = argc < 3 ? 1 : ToNumber(date);
6204efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = 0;
6214efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  } else {
6224efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = argc < 2 ? UTC_MONTH(this) : ToNumber(month);
6234efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = argc < 3 ? UTC_DAY(this) : ToNumber(date);
6244efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = UTC_TIME_IN_DAY(this);
6254efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
62643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var day = MakeDay(year, month, date);
6274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(day, time));
62841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
62943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
63043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
63143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.42
63243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateToUTCString() {
6334efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
6342abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
63543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT
6364efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return WeekDays[UTC_WEEKDAY(this)] + ', '
6374efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(UTC_DAY(this)) + ' '
6384efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + Months[UTC_MONTH(this)] + ' '
6394efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + UTC_YEAR(this) + ' '
6404efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TimeStringUTC(this) + ' GMT';
64141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
64243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
64343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
64443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - B.2.4
64543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetYear() {
6464efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_YEAR(this) - 1900;
64741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
64843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
64943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
65043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - B.2.5
65143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetYear(year) {
6524efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK_DATE(this);
65343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = ToNumber(year);
654690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (NUMBER_IS_NAN(year)) return SET_UTC_DATE_VALUE(this, NAN);
65543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99)
65643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      ? 1900 + TO_INTEGER(year) : year;
6574efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
6584efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var month, date, time;
6594efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (NUMBER_IS_NAN(t))  {
6604efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = 0;
6614efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = 1;
6624efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = 0;
6634efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  } else {
6644efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = LOCAL_MONTH(this);
6654efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = LOCAL_DAY(this);
6664efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = LOCAL_TIME_IN_DAY(this);
6674efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
6684efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(year, month, date);
6694efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time));
67041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
67141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
67241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
67341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// ECMA 262 - B.2.6
67441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org//
67541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// Notice that this does not follow ECMA 262 completely.  ECMA 262
67641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// says that toGMTString should be the same Function object as
67741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// toUTCString.  JSC does not do this, so for compatibility we do not
67841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// do that either.  Instead, we create a new function whose name
67941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// property will return toGMTString.
68041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction DateToGMTString() {
6817a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org  return %_CallFunction(this, DateToUTCString);
68241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
68343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
68443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6850c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.orgfunction PadInt(n, digits) {
6860c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org  if (digits == 1) return n;
6870c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org  return n < MathPow(10, digits - 1) ? '0' + PadInt(n, digits - 1) : n;
6883a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org}
6893a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
6903a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
691c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// ECMA 262 - 15.9.5.43
6923a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.orgfunction DateToISOString() {
6934efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
694c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  if (NUMBER_IS_NAN(t)) throw MakeRangeError("invalid_time_value", []);
6954f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  var year = this.getUTCFullYear();
6964f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  var year_string;
6974f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  if (year >= 0 && year <= 9999) {
6984f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    year_string = PadInt(year, 4);
6994f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  } else {
7004f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    if (year < 0) {
7014f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org      year_string = "-" + PadInt(-year, 6);
7024f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    } else {
7034f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org      year_string = "+" + PadInt(year, 6);
7044f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    }
7054f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  }
7064f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  return year_string +
7075f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org      '-' + PadInt(this.getUTCMonth() + 1, 2) +
7084f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org      '-' + PadInt(this.getUTCDate(), 2) +
7095f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org      'T' + PadInt(this.getUTCHours(), 2) +
7104f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org      ':' + PadInt(this.getUTCMinutes(), 2) +
7115f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org      ':' + PadInt(this.getUTCSeconds(), 2) +
7120c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org      '.' + PadInt(this.getUTCMilliseconds(), 3) +
7133a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org      'Z';
7143a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org}
7153a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
7163a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
7173a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.orgfunction DateToJSON(key) {
7185f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  var o = ToObject(this);
7195f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  var tv = DefaultNumber(o);
7204f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  if (IS_NUMBER(tv) && !NUMBER_IS_FINITE(tv)) {
7214f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    return null;
7225f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  }
7235f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  return o.toISOString();
7243a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org}
7253a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
7263a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
727486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.orgvar date_cache_version_holder;
728486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.orgvar date_cache_version = NAN;
729486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org
730486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org
731486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.orgfunction CheckDateCacheCurrent() {
732486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  if (!date_cache_version_holder) {
733486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org    date_cache_version_holder = %DateCacheVersion();
734486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  }
735486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  if (date_cache_version_holder[0] == date_cache_version) {
736486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org    return;
737486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  }
738486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  date_cache_version = date_cache_version_holder[0];
739486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org
740023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  // Reset the timezone cache:
741690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  timezone_cache_time = NAN;
742486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  timezone_cache_timezone = UNDEFINED;
743023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
744023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  // Reset the date cache:
7452904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  Date_cache.time = NAN;
7462904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  Date_cache.string = null;
747023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org}
748023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
749023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
75043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// -------------------------------------------------------------------
75143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7521805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgfunction SetUpDate() {
7531805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org  %CheckIsBootstrapping();
754e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
755e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  %SetCode($Date, DateConstructor);
756690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  %FunctionSetPrototype($Date, new $Date(NAN));
757e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
7581805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org  // Set up non-enumerable properties of the Date object itself.
75941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  InstallFunctions($Date, DONT_ENUM, $Array(
76041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "UTC", DateUTC,
76141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "parse", DateParse,
76241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "now", DateNow
76341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  ));
76441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
7651805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org  // Set up non-enumerable constructor property of the Date prototype object.
76641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  %SetProperty($Date.prototype, "constructor", $Date, DONT_ENUM);
76741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
7681805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org  // Set up non-enumerable functions of the Date prototype object and
76941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  // set their names.
77027bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org  InstallFunctions($Date.prototype, DONT_ENUM, $Array(
77141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toString", DateToString,
77241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toDateString", DateToDateString,
77341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toTimeString", DateToTimeString,
77441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toLocaleString", DateToLocaleString,
77541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toLocaleDateString", DateToLocaleDateString,
77641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toLocaleTimeString", DateToLocaleTimeString,
77741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "valueOf", DateValueOf,
77841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getTime", DateGetTime,
77941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getFullYear", DateGetFullYear,
78041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCFullYear", DateGetUTCFullYear,
78141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getMonth", DateGetMonth,
78241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCMonth", DateGetUTCMonth,
78341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getDate", DateGetDate,
78441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCDate", DateGetUTCDate,
78541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getDay", DateGetDay,
78641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCDay", DateGetUTCDay,
78741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getHours", DateGetHours,
78841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCHours", DateGetUTCHours,
78941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getMinutes", DateGetMinutes,
79041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCMinutes", DateGetUTCMinutes,
79141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getSeconds", DateGetSeconds,
79241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCSeconds", DateGetUTCSeconds,
79341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getMilliseconds", DateGetMilliseconds,
79441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCMilliseconds", DateGetUTCMilliseconds,
79541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getTimezoneOffset", DateGetTimezoneOffset,
79641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setTime", DateSetTime,
79741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setMilliseconds", DateSetMilliseconds,
79841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCMilliseconds", DateSetUTCMilliseconds,
79941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setSeconds", DateSetSeconds,
80041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCSeconds", DateSetUTCSeconds,
80141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setMinutes", DateSetMinutes,
80241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCMinutes", DateSetUTCMinutes,
80341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setHours", DateSetHours,
80441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCHours", DateSetUTCHours,
80541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setDate", DateSetDate,
80641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCDate", DateSetUTCDate,
80741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setMonth", DateSetMonth,
80841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCMonth", DateSetUTCMonth,
80941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setFullYear", DateSetFullYear,
81041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCFullYear", DateSetUTCFullYear,
81141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toGMTString", DateToGMTString,
81241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toUTCString", DateToUTCString,
81341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getYear", DateGetYear,
8143a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org    "setYear", DateSetYear,
8153a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org    "toISOString", DateToISOString,
8163a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org    "toJSON", DateToJSON
81741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  ));
81841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
81943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8201805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgSetUpDate();
821