19258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org// Copyright 2006-2008 the V8 project authors. All rights reserved.
243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without
343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met:
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Redistributions of source code must retain the above copyright
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       notice, this list of conditions and the following disclaimer.
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Redistributions in binary form must reproduce the above
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       copyright notice, this list of conditions and the following
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       disclaimer in the documentation and/or other materials provided
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       with the distribution.
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Neither the name of Google Inc. nor the names of its
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       contributors may be used to endorse or promote products derived
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       from this software without specific prior written permission.
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// This file relies on the fact that the following declarations have been made
2941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// in v8natives.js:
30f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// var $isFinite = GlobalIsFinite;
3141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
32e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvar $Date = global.Date;
33e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// -------------------------------------------------------------------
3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// This file contains date support implemented in JavaScript.
3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
382abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org// Helper function to throw error.
392abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgfunction ThrowDateTypeError() {
402abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  throw new $TypeError('this is not a Date object.');
412abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org}
422abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org
4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
44690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgvar timezone_cache_time = NAN;
4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar timezone_cache_timezone;
4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction LocalTimezone(t) {
48b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org  if (NUMBER_IS_NAN(t)) return "";
49eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org  if (t == timezone_cache_time) {
5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    return timezone_cache_timezone;
5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
524efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var timezone = %DateLocalTimezone(t);
5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  timezone_cache_time = t;
5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  timezone_cache_timezone = timezone;
5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return timezone;
5641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction UTC(time) {
602abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(time)) return time;
61421a0f4d7b8d61d313e8bcc630f34f942d7c811ewhesse@chromium.org  // local_time_offset is needed before the call to DaylightSavingsOffset,
62421a0f4d7b8d61d313e8bcc630f34f942d7c811ewhesse@chromium.org  // so it may be uninitialized.
634efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return %DateToUTC(time);
6441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
6543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.1.11
6843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeTime(hour, min, sec, ms) {
69690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(hour)) return NAN;
70690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(min)) return NAN;
71690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(sec)) return NAN;
72690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(ms)) return NAN;
7343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return TO_INTEGER(hour) * msPerHour
7443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      + TO_INTEGER(min) * msPerMinute
7543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      + TO_INTEGER(sec) * msPerSecond
7643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      + TO_INTEGER(ms);
7741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
7843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.1.12
8143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction TimeInYear(year) {
8243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return DaysInYear(year) * msPerDay;
8341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
8443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Compute number of days given a year, month, date.
8743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Note that month and date can lie outside the normal range.
8843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//   For example:
8943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     MakeDay(2007, -4, 20) --> MakeDay(2006, 8, 20)
9043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     MakeDay(2007, -33, 1) --> MakeDay(2004, 3, 1)
9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     MakeDay(2007, 14, -50) --> MakeDay(2007, 8, 11)
9243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeDay(year, month, date) {
93690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) return NAN;
9443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
9569ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org  // Convert to integer and map -0 to 0.
9669ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org  year = TO_INTEGER_MAP_MINUS_ZERO(year);
9769ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org  month = TO_INTEGER_MAP_MINUS_ZERO(month);
9869ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org  date = TO_INTEGER_MAP_MINUS_ZERO(date);
9943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
100ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  if (year < kMinYear || year > kMaxYear ||
101c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org      month < kMinMonth || month > kMaxMonth) {
102690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org    return NAN;
10343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
10443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
105c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  // Now we rely on year and month being SMIs.
106fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org  return %DateMakeDay(year | 0, month | 0) + date - 1;
10741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
10843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
10943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
11043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.1.13
11143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeDate(day, time) {
1125f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  var time = day * msPerDay + time;
1135f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // Some of our runtime funtions for computing UTC(time) rely on
1145f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // times not being significantly larger than MAX_TIME_MS. If there
1155f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // is no way that the time can be within range even after UTC
1165f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // conversion we return NaN immediately instead of relying on
1175f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  // TimeClip to do it.
118690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if ($abs(time) > MAX_TIME_BEFORE_UTC) return NAN;
1195f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  return time;
12041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
12243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
12343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.1.14
12443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction TimeClip(time) {
125690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (!$isFinite(time)) return NAN;
126690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if ($abs(time) > MAX_TIME_MS) return NAN;
12743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return TO_INTEGER(time);
12841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
13168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org// The Date cache is used to limit the cost of parsing the same Date
13268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org// strings over and over again.
13368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.orgvar Date_cache = {
13468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org  // Cached time value.
135ecfa363c53ab5e5f01fb0645fabd2c060c967385ulan@chromium.org  time: 0,
13668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org  // String input for which the cached time is valid.
13768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org  string: null
13868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org};
13968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org
14068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org
141e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgfunction DateConstructor(year, month, date, hours, minutes, seconds, ms) {
14286f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  if (!%_IsConstructCall()) {
14386f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    // ECMA 262 - 15.9.2
14486f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    return (new $Date()).toString();
14586f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  }
14686f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org
14786f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  // ECMA 262 - 15.9.3
14886f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  var argc = %_ArgumentsLength();
14986f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  var value;
15086f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  if (argc == 0) {
15186f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    value = %DateCurrentTime();
1524efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    SET_UTC_DATE_VALUE(this, value);
15386f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  } else if (argc == 1) {
15486f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    if (IS_NUMBER(year)) {
1554efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      value = year;
15668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org    } else if (IS_STRING(year)) {
15768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      // Probe the Date cache. If we already have a time value for the
15868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      // given time, we re-use that instead of parsing the string again.
15968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      var cache = Date_cache;
16068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      if (cache.string === year) {
16168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org        value = cache.time;
16268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      } else {
16368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org        value = DateParse(year);
164b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org        if (!NUMBER_IS_NAN(value)) {
165b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org          cache.time = value;
166b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org          cache.string = year;
167b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org        }
16868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      }
16968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org
17086f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org    } else {
17143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      // According to ECMA 262, no hint should be given for this
17286f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // conversion. However, ToPrimitive defaults to STRING_HINT for
17386f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // Date objects which will lose precision when the Date
17443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      // constructor is called with another Date object as its
17586f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // argument. We therefore use NUMBER_HINT for the conversion,
17686f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // which is the default for everything else than Date objects.
17786f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org      // This makes us behave like KJS and SpiderMonkey.
17843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      var time = ToPrimitive(year, NUMBER_HINT);
1794efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      value = IS_STRING(time) ? DateParse(time) : ToNumber(time);
18043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    }
1814efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    SET_UTC_DATE_VALUE(this, value);
18286f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  } else {
18343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    year = ToNumber(year);
18443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    month = ToNumber(month);
18543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    date = argc > 2 ? ToNumber(date) : 1;
18643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    hours = argc > 3 ? ToNumber(hours) : 0;
18743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    minutes = argc > 4 ? ToNumber(minutes) : 0;
18843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    seconds = argc > 5 ? ToNumber(seconds) : 0;
18943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    ms = argc > 6 ? ToNumber(ms) : 0;
1901b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org    year = (!NUMBER_IS_NAN(year) &&
1911b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org            0 <= TO_INTEGER(year) &&
1921b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org            TO_INTEGER(year) <= 99) ? 1900 + TO_INTEGER(year) : year;
19343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    var day = MakeDay(year, month, date);
19443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    var time = MakeTime(hours, minutes, seconds, ms);
1954efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    value = MakeDate(day, time);
1964efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    SET_LOCAL_DATE_VALUE(this, value);
19743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
198e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
19943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
20043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
20143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
2021b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgvar Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
2031b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org              'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
20443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
20543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
20643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction TwoDigitString(value) {
20743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return value < 10 ? "0" + value : "" + value;
20841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
20943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
21043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2114efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction DateString(date) {
2124efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return WeekDays[LOCAL_WEEKDAY(date)] + ' '
2134efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + Months[LOCAL_MONTH(date)] + ' '
2144efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(LOCAL_DAY(date)) + ' '
2154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + LOCAL_YEAR(date);
21641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
21743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
21843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2191b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgvar LongWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday',
2201b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org    'Thursday', 'Friday', 'Saturday'];
2211b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgvar LongMonths = ['January', 'February', 'March', 'April', 'May', 'June',
2221b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org    'July', 'August', 'September', 'October', 'November', 'December'];
2239bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org
2249bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org
2254efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction LongDateString(date) {
2264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LongWeekDays[LOCAL_WEEKDAY(date)] + ', '
2274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + LongMonths[LOCAL_MONTH(date)] + ' '
2284efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(LOCAL_DAY(date)) + ', '
2294efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + LOCAL_YEAR(date);
2309bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org}
2319bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org
2329bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org
2334efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction TimeString(date) {
2344efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TwoDigitString(LOCAL_HOUR(date)) + ':'
2354efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(LOCAL_MIN(date)) + ':'
2364efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(LOCAL_SEC(date));
23741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
23843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
23943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2404efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction TimeStringUTC(date) {
2414efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TwoDigitString(UTC_HOUR(date)) + ':'
2424efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(UTC_MIN(date)) + ':'
2434efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(UTC_SEC(date));
2444efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org}
2454efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2464efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2474efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction LocalTimezoneString(date) {
2484efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var timezone = LocalTimezone(UTC_DATE_VALUE(date));
24925156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org
2504efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var timezoneOffset = -TIMEZONE_OFFSET(date);
25143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var sign = (timezoneOffset >= 0) ? 1 : -1;
2527c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org  var hours = FLOOR((sign * timezoneOffset)/60);
2537c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org  var min   = FLOOR((sign * timezoneOffset)%60);
254b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org  var gmt = ' GMT' + ((sign == 1) ? '+' : '-') +
255b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org      TwoDigitString(hours) + TwoDigitString(min);
25625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org  return gmt + ' (' +  timezone + ')';
25741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
25843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
25943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2604efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgfunction DatePrintString(date) {
2614efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return DateString(date) + ' ' + TimeString(date);
26241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
26343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
26443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// -------------------------------------------------------------------
26543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
26668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org// Reused output buffer. Used when parsing date strings.
2674111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgvar parse_buffer = $Array(8);
26843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
26943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.4.2
27043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateParse(string) {
271bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org  var arr = %DateParseString(ToString(string), parse_buffer);
272690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (IS_NULL(arr)) return NAN;
27343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
27443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var day = MakeDay(arr[0], arr[1], arr[2]);
2754111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org  var time = MakeTime(arr[3], arr[4], arr[5], arr[6]);
27643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var date = MakeDate(day, time);
27741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
2784111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org  if (IS_NULL(arr[7])) {
27943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    return TimeClip(UTC(date));
28043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  } else {
2814111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org    return TimeClip(date - arr[7] * 1000);
28243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
28341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
28443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
28543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
28643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.4.3
28743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateUTC(year, month, date, hours, minutes, seconds, ms) {
28843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = ToNumber(year);
28943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  month = ToNumber(month);
29043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
29143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  date = argc > 2 ? ToNumber(date) : 1;
29243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  hours = argc > 3 ? ToNumber(hours) : 0;
29343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  minutes = argc > 4 ? ToNumber(minutes) : 0;
29443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  seconds = argc > 5 ? ToNumber(seconds) : 0;
29543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  ms = argc > 6 ? ToNumber(ms) : 0;
2961b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org  year = (!NUMBER_IS_NAN(year) &&
2971b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org          0 <= TO_INTEGER(year) &&
2981b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org          TO_INTEGER(year) <= 99) ? 1900 + TO_INTEGER(year) : year;
29943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var day = MakeDay(year, month, date);
30043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var time = MakeTime(hours, minutes, seconds, ms);
3014efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TimeClip(MakeDate(day, time));
30241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
30343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
30443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
305c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org// ECMA 262 - 15.9.4.4
30643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateNow() {
30731e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager  return %DateCurrentTime();
30841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
30943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
31043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
31143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.2
31243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateToString() {
3134efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this)
3142abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time_zone_string = LocalTimezoneString(this)
3164efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return DatePrintString(this) + time_zone_string;
31741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
31843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
31943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
32043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.3
32143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateToDateString() {
3224efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
3232abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3244efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return DateString(this);
32541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
32643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
32743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
32843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.4
32943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateToTimeString() {
3304efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
3312abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3324efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time_zone_string = LocalTimezoneString(this);
3334efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TimeString(this) + time_zone_string;
33441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
33541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
33641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
33741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// ECMA 262 - 15.9.5.5
33841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction DateToLocaleString() {
3397a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org  return %_CallFunction(this, DateToString);
34041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
34141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
34241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
34341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// ECMA 262 - 15.9.5.6
34441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction DateToLocaleDateString() {
3454efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
3462abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3474efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LongDateString(this);
34841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
34943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
35043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
351c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// ECMA 262 - 15.9.5.7
352c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgfunction DateToLocaleTimeString() {
3534efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
3542abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3554efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TimeString(this);
35641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
35741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
35841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
35941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// ECMA 262 - 15.9.5.8
36041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction DateValueOf() {
3614efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_DATE_VALUE(this);
36241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
363c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
364c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
36543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.9
36643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetTime() {
3674efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_DATE_VALUE(this);
36843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
36943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
37043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
37143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.10
37243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetFullYear() {
3734efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_YEAR(this);
37441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
37543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
37643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
37743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.11
37843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCFullYear() {
3794efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_YEAR(this);
38041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
38143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
38243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
38343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.12
38443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetMonth() {
3854efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_MONTH(this);
38641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
38743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
38843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
38943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.13
39043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCMonth() {
3914efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_MONTH(this);
39241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
39343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
39443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
39543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.14
39643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetDate() {
3974efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_DAY(this);
39841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
39943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
40043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
40143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.15
40243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCDate() {
4034efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_DAY(this);
40441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
40543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
40643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
40743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.16
40843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetDay() {
4094efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_WEEKDAY(this);
41041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
41143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
41243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
41343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.17
41443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCDay() {
4154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_WEEKDAY(this);
41641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
41743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
41843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
41943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.18
42043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetHours() {
4214efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_HOUR(this);
42241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
42343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
42443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
42543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.19
42643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCHours() {
4274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_HOUR(this);
42841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
42943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
43043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
43143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.20
43243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetMinutes() {
4334efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_MIN(this);
43441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
43543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
43643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
43743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.21
43843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCMinutes() {
4394efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_MIN(this);
44041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
44143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
44243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
44343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.22
44443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetSeconds() {
4454efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_SEC(this);
44641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
44743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
44843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
44943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.23
45043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCSeconds() {
4514efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_SEC(this)
45241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
45343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
45443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
45543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.24
45643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetMilliseconds() {
4574efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_MS(this);
45841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
45943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
46043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
46143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.25
46243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetUTCMilliseconds() {
4634efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_MS(this);
46441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
46543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
46643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
46743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.26
46843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetTimezoneOffset() {
4694efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return TIMEZONE_OFFSET(this);
47041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
47143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
47243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
47343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.27
47443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetTime(ms) {
4754efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK_DATE(this);
4764efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  SET_UTC_DATE_VALUE(this, ToNumber(ms));
4774efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return UTC_DATE_VALUE(this);
47841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
47943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
48043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
48143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.28
48243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetMilliseconds(ms) {
4834efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
48443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  ms = ToNumber(ms);
4854efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), LOCAL_SEC(this), ms);
4861456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
48741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
48843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
48943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
49043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.29
49143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCMilliseconds(ms) {
4924efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
49343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  ms = ToNumber(ms);
4944efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(UTC_HOUR(this),
4954efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org                      UTC_MIN(this),
4964efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org                      UTC_SEC(this),
4971b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org                      ms);
4984efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
49941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
50043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
50143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
50243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.30
50343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetSeconds(sec, ms) {
5044efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
50543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  sec = ToNumber(sec);
5064efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = %_ArgumentsLength() < 2 ? LOCAL_MS(this) : ToNumber(ms);
5074efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), sec, ms);
5084efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
50941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
51043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
51143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
51243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.31
51343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCSeconds(sec, ms) {
5144efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
51543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  sec = ToNumber(sec);
5164efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = %_ArgumentsLength() < 2 ? UTC_MS(this) : ToNumber(ms);
5174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(UTC_HOUR(this), UTC_MIN(this), sec, ms);
5184efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
51941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
52043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
52143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
52243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.33
52343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetMinutes(min, sec, ms) {
5244efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
52543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  min = ToNumber(min);
52643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
5274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  sec = argc < 2 ? LOCAL_SEC(this) : ToNumber(sec);
5284efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = argc < 3 ? LOCAL_MS(this) : ToNumber(ms);
5294efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(LOCAL_HOUR(this), min, sec, ms);
5304efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
53141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
53243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
53343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
53443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.34
53543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCMinutes(min, sec, ms) {
5364efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
53743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  min = ToNumber(min);
53843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
5394efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  sec = argc < 2 ? UTC_SEC(this) : ToNumber(sec);
5404efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = argc < 3 ? UTC_MS(this) : ToNumber(ms);
5414efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time = MakeTime(UTC_HOUR(this), min, sec, ms);
5424efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
54341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
54443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
54543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
54643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.35
54743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetHours(hour, min, sec, ms) {
5484efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
54943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  hour = ToNumber(hour);
55043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
5514efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  min = argc < 2 ? LOCAL_MIN(this) : ToNumber(min);
5524efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  sec = argc < 3 ? LOCAL_SEC(this) : ToNumber(sec);
5534efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = argc < 4 ? LOCAL_MS(this) : ToNumber(ms);
55443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var time = MakeTime(hour, min, sec, ms);
5554efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
55641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
55743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
55843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
55943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.34
56043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCHours(hour, min, sec, ms) {
5614efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
56243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  hour = ToNumber(hour);
56343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
5644efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  min = argc < 2 ? UTC_MIN(this) : ToNumber(min);
5654efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  sec = argc < 3 ? UTC_SEC(this) : ToNumber(sec);
5664efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  ms = argc < 4 ? UTC_MS(this) : ToNumber(ms);
56743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var time = MakeTime(hour, min, sec, ms);
5684efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
56941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
57043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
57143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
57243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.36
57343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetDate(date) {
5744efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
57543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  date = ToNumber(date);
5764efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(LOCAL_YEAR(this), LOCAL_MONTH(this), 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.37
58243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCDate(date) {
5834efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
58443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  date = ToNumber(date);
5854efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(UTC_YEAR(this), UTC_MONTH(this), date);
5864efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this)));
58741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
58843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
58943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
59043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.38
59143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetMonth(month, date) {
5924efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
59343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  month = ToNumber(month);
5944efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  date = %_ArgumentsLength() < 2 ? LOCAL_DAY(this) : ToNumber(date);
5954efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(LOCAL_YEAR(this), month, date);
5964efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this)));
59741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
59843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
59943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
60043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.39
60143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCMonth(month, date) {
6024efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
60343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  month = ToNumber(month);
6044efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  date = %_ArgumentsLength() < 2 ? UTC_DAY(this) : ToNumber(date);
6054efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(UTC_YEAR(this), month, date);
6064efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this)));
60741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
60843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
60943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
61043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.40
61143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetFullYear(year, month, date) {
6124efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
61343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = ToNumber(year);
61443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var argc = %_ArgumentsLength();
6154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time ;
6164efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (NUMBER_IS_NAN(t)) {
6174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = argc < 2 ? 0 : ToNumber(month);
6184efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = argc < 3 ? 1 : ToNumber(date);
6194efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = 0;
6204efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  } else {
6214efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = argc < 2 ? LOCAL_MONTH(this) : ToNumber(month);
6224efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = argc < 3 ? LOCAL_DAY(this) : ToNumber(date);
6234efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = LOCAL_TIME_IN_DAY(this);
6244efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
62543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var day = MakeDay(year, month, date);
6264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time));
62741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
62843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
62943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
63043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.41
63143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetUTCFullYear(year, month, date) {
6324efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
63343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = ToNumber(year);
6344efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var argc = %_ArgumentsLength();
6354efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var time ;
6364efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (NUMBER_IS_NAN(t)) {
6374efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = argc < 2 ? 0 : ToNumber(month);
6384efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = argc < 3 ? 1 : ToNumber(date);
6394efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = 0;
6404efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  } else {
6414efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = argc < 2 ? UTC_MONTH(this) : ToNumber(month);
6424efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = argc < 3 ? UTC_DAY(this) : ToNumber(date);
6434efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = UTC_TIME_IN_DAY(this);
6444efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
64543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  var day = MakeDay(year, month, date);
6464efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_UTC_DATE_VALUE(this, MakeDate(day, time));
64741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
64843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
64943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
65043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - 15.9.5.42
65143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateToUTCString() {
6524efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
6532abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  if (NUMBER_IS_NAN(t)) return kInvalidDate;
65443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT
6554efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return WeekDays[UTC_WEEKDAY(this)] + ', '
6564efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TwoDigitString(UTC_DAY(this)) + ' '
6574efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + Months[UTC_MONTH(this)] + ' '
6584efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + UTC_YEAR(this) + ' '
6594efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      + TimeStringUTC(this) + ' GMT';
66041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
66143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
66243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
66343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - B.2.4
66443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateGetYear() {
6654efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return LOCAL_YEAR(this) - 1900;
66641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
66743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
66843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
66943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ECMA 262 - B.2.5
67043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction DateSetYear(year) {
6714efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK_DATE(this);
67243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = ToNumber(year);
673690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  if (NUMBER_IS_NAN(year)) return SET_UTC_DATE_VALUE(this, NAN);
67443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99)
67543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      ? 1900 + TO_INTEGER(year) : year;
6764efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = LOCAL_DATE_VALUE(this);
6774efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var month, date, time;
6784efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (NUMBER_IS_NAN(t))  {
6794efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = 0;
6804efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = 1;
6814efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = 0;
6824efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  } else {
6834efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    month = LOCAL_MONTH(this);
6844efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    date = LOCAL_DAY(this);
6854efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    time = LOCAL_TIME_IN_DAY(this);
6864efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
6874efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var day = MakeDay(year, month, date);
6884efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time));
68941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
69041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
69141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
69241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// ECMA 262 - B.2.6
69341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org//
69441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// Notice that this does not follow ECMA 262 completely.  ECMA 262
69541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// says that toGMTString should be the same Function object as
69641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// toUTCString.  JSC does not do this, so for compatibility we do not
69741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// do that either.  Instead, we create a new function whose name
69841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// property will return toGMTString.
69941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction DateToGMTString() {
7007a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org  return %_CallFunction(this, DateToUTCString);
70141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
70243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
70343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7040c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.orgfunction PadInt(n, digits) {
7050c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org  if (digits == 1) return n;
7060c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org  return n < MathPow(10, digits - 1) ? '0' + PadInt(n, digits - 1) : n;
7073a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org}
7083a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
7093a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
710c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// ECMA 262 - 15.9.5.43
7113a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.orgfunction DateToISOString() {
7124efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  var t = UTC_DATE_VALUE(this);
713c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org  if (NUMBER_IS_NAN(t)) throw MakeRangeError("invalid_time_value", []);
7144f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  var year = this.getUTCFullYear();
7154f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  var year_string;
7164f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  if (year >= 0 && year <= 9999) {
7174f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    year_string = PadInt(year, 4);
7184f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  } else {
7194f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    if (year < 0) {
7204f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org      year_string = "-" + PadInt(-year, 6);
7214f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    } else {
7224f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org      year_string = "+" + PadInt(year, 6);
7234f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    }
7244f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  }
7254f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  return year_string +
7265f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org      '-' + PadInt(this.getUTCMonth() + 1, 2) +
7274f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org      '-' + PadInt(this.getUTCDate(), 2) +
7285f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org      'T' + PadInt(this.getUTCHours(), 2) +
7294f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org      ':' + PadInt(this.getUTCMinutes(), 2) +
7305f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org      ':' + PadInt(this.getUTCSeconds(), 2) +
7310c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org      '.' + PadInt(this.getUTCMilliseconds(), 3) +
7323a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org      'Z';
7333a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org}
7343a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
7353a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
7363a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.orgfunction DateToJSON(key) {
7375f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  var o = ToObject(this);
7385f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  var tv = DefaultNumber(o);
7394f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  if (IS_NUMBER(tv) && !NUMBER_IS_FINITE(tv)) {
7404f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org    return null;
7415f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  }
7425f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org  return o.toISOString();
7433a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org}
7443a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
7453a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org
746023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.orgfunction ResetDateCache() {
747023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  // Reset the timezone cache:
748690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  timezone_cache_time = NAN;
749023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  timezone_cache_timezone = undefined;
750023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
751023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  // Reset the date cache:
752023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  cache = Date_cache;
753690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  cache.time = NAN;
754023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  cache.string = null;
755023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org}
756023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
757023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
75843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// -------------------------------------------------------------------
75943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7601805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgfunction SetUpDate() {
7611805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org  %CheckIsBootstrapping();
762e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
763e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  %SetCode($Date, DateConstructor);
764690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org  %FunctionSetPrototype($Date, new $Date(NAN));
765e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
7661805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org  // Set up non-enumerable properties of the Date object itself.
76741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  InstallFunctions($Date, DONT_ENUM, $Array(
76841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "UTC", DateUTC,
76941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "parse", DateParse,
77041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "now", DateNow
77141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  ));
77241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
7731805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org  // Set up non-enumerable constructor property of the Date prototype object.
77441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  %SetProperty($Date.prototype, "constructor", $Date, DONT_ENUM);
77541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org
7761805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org  // Set up non-enumerable functions of the Date prototype object and
77741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  // set their names.
77827bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org  InstallFunctions($Date.prototype, DONT_ENUM, $Array(
77941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toString", DateToString,
78041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toDateString", DateToDateString,
78141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toTimeString", DateToTimeString,
78241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toLocaleString", DateToLocaleString,
78341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toLocaleDateString", DateToLocaleDateString,
78441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toLocaleTimeString", DateToLocaleTimeString,
78541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "valueOf", DateValueOf,
78641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getTime", DateGetTime,
78741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getFullYear", DateGetFullYear,
78841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCFullYear", DateGetUTCFullYear,
78941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getMonth", DateGetMonth,
79041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCMonth", DateGetUTCMonth,
79141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getDate", DateGetDate,
79241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCDate", DateGetUTCDate,
79341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getDay", DateGetDay,
79441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCDay", DateGetUTCDay,
79541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getHours", DateGetHours,
79641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCHours", DateGetUTCHours,
79741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getMinutes", DateGetMinutes,
79841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCMinutes", DateGetUTCMinutes,
79941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getSeconds", DateGetSeconds,
80041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCSeconds", DateGetUTCSeconds,
80141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getMilliseconds", DateGetMilliseconds,
80241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getUTCMilliseconds", DateGetUTCMilliseconds,
80341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getTimezoneOffset", DateGetTimezoneOffset,
80441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setTime", DateSetTime,
80541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setMilliseconds", DateSetMilliseconds,
80641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCMilliseconds", DateSetUTCMilliseconds,
80741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setSeconds", DateSetSeconds,
80841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCSeconds", DateSetUTCSeconds,
80941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setMinutes", DateSetMinutes,
81041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCMinutes", DateSetUTCMinutes,
81141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setHours", DateSetHours,
81241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCHours", DateSetUTCHours,
81341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setDate", DateSetDate,
81441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCDate", DateSetUTCDate,
81541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setMonth", DateSetMonth,
81641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCMonth", DateSetUTCMonth,
81741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setFullYear", DateSetFullYear,
81841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "setUTCFullYear", DateSetUTCFullYear,
81941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toGMTString", DateToGMTString,
82041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "toUTCString", DateToUTCString,
82141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    "getYear", DateGetYear,
8223a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org    "setYear", DateSetYear,
8233a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org    "toISOString", DateToISOString,
8243a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org    "toJSON", DateToJSON
82541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  ));
82641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org}
82743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8281805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgSetUpDate();
829