});
-// Helper functions.
-function GetTimeFrom(aDate) {
- return DATE_VALUE(aDate);
-}
-
-function GetMillisecondsFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return MS_FROM_TIME(LocalTimeNoCheck(t));
-}
-
-
-function GetUTCMillisecondsFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return MS_FROM_TIME(t);
-}
-
-
-function GetSecondsFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return SEC_FROM_TIME(LocalTimeNoCheck(t));
-}
-
-
-function GetUTCSecondsFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return SEC_FROM_TIME(t);
-}
-
-
-function GetMinutesFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return MIN_FROM_TIME(LocalTimeNoCheck(t));
-}
-
-
-function GetUTCMinutesFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return MIN_FROM_TIME(t);
-}
-
-
-function GetHoursFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return HOUR_FROM_TIME(LocalTimeNoCheck(t));
-}
-
-
-function GetUTCHoursFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return HOUR_FROM_TIME(t);
-}
-
-
-function GetFullYearFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- var cache = Date_cache;
- if (cache.time === t) return cache.year;
- return YEAR_FROM_TIME(LocalTimeNoCheck(t));
-}
-
-
-function GetUTCFullYearFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return YEAR_FROM_TIME(t);
-}
-
-
-function GetMonthFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return MONTH_FROM_TIME(LocalTimeNoCheck(t));
-}
-
-
-function GetUTCMonthFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return MONTH_FROM_TIME(t);
-}
-
-
-function GetDateFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return DATE_FROM_TIME(LocalTimeNoCheck(t));
-}
-
-
-function GetUTCDateFrom(aDate) {
- var t = DATE_VALUE(aDate);
- if (NUMBER_IS_NAN(t)) return t;
- return DATE_FROM_TIME(t);
-}
-
-
%FunctionSetPrototype($Date, new $Date($NaN));
// ECMA 262 - 15.9.5.10
function DateGetFullYear() {
- return GetFullYearFrom(this)
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ var cache = Date_cache;
+ if (cache.time === t) return cache.year;
+ return YEAR_FROM_TIME(LocalTimeNoCheck(t));
}
// ECMA 262 - 15.9.5.11
function DateGetUTCFullYear() {
- return GetUTCFullYearFrom(this)
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ return YEAR_FROM_TIME(t);
}
// ECMA 262 - 15.9.5.12
function DateGetMonth() {
- return GetMonthFrom(this);
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ return MONTH_FROM_TIME(LocalTimeNoCheck(t));
}
// ECMA 262 - 15.9.5.13
function DateGetUTCMonth() {
- return GetUTCMonthFrom(this);
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ return MONTH_FROM_TIME(t);
}
// ECMA 262 - 15.9.5.14
function DateGetDate() {
- return GetDateFrom(this);
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ return DATE_FROM_TIME(LocalTimeNoCheck(t));
}
// ECMA 262 - 15.9.5.15
function DateGetUTCDate() {
- return GetUTCDateFrom(this);
+ var t = DATE_VALUE(this);
+ return NAN_OR_DATE_FROM_TIME(t);
}
// ECMA 262 - 15.9.5.18
function DateGetHours() {
- return GetHoursFrom(this);
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ return HOUR_FROM_TIME(LocalTimeNoCheck(t));
}
// ECMA 262 - 15.9.5.19
function DateGetUTCHours() {
- return GetUTCHoursFrom(this);
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ return HOUR_FROM_TIME(t);
}
// ECMA 262 - 15.9.5.20
function DateGetMinutes() {
- return GetMinutesFrom(this);
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ return MIN_FROM_TIME(LocalTimeNoCheck(t));
}
// ECMA 262 - 15.9.5.21
function DateGetUTCMinutes() {
- return GetUTCMinutesFrom(this);
+ var t = DATE_VALUE(this);
+ return NAN_OR_MIN_FROM_TIME(t);
}
// ECMA 262 - 15.9.5.22
function DateGetSeconds() {
- return GetSecondsFrom(this);
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ return SEC_FROM_TIME(LocalTimeNoCheck(t));
}
// ECMA 262 - 15.9.5.23
function DateGetUTCSeconds() {
- return GetUTCSecondsFrom(this);
+ var t = DATE_VALUE(this);
+ return NAN_OR_SEC_FROM_TIME(t);
}
// ECMA 262 - 15.9.5.24
function DateGetMilliseconds() {
- return GetMillisecondsFrom(this);
+ var t = DATE_VALUE(this);
+ if (NUMBER_IS_NAN(t)) return t;
+ return MS_FROM_TIME(LocalTimeNoCheck(t));
}
// ECMA 262 - 15.9.5.25
function DateGetUTCMilliseconds() {
- return GetUTCMillisecondsFrom(this);
+ var t = DATE_VALUE(this);
+ return NAN_OR_MS_FROM_TIME(t);
}
function DateSetSeconds(sec, ms) {
var t = LocalTime(DATE_VALUE(this));
sec = ToNumber(sec);
- ms = %_ArgumentsLength() < 2 ? GetMillisecondsFrom(this) : ToNumber(ms);
+ ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms);
return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
}
function DateSetUTCSeconds(sec, ms) {
var t = DATE_VALUE(this);
sec = ToNumber(sec);
- ms = %_ArgumentsLength() < 2 ? GetUTCMillisecondsFrom(this) : ToNumber(ms);
+ ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms);
return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
}
var t = LocalTime(DATE_VALUE(this));
min = ToNumber(min);
var argc = %_ArgumentsLength();
- sec = argc < 2 ? GetSecondsFrom(this) : ToNumber(sec);
- ms = argc < 3 ? GetMillisecondsFrom(this) : ToNumber(ms);
+ sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
+ ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms);
return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
}
var t = DATE_VALUE(this);
min = ToNumber(min);
var argc = %_ArgumentsLength();
- sec = argc < 2 ? GetUTCSecondsFrom(this) : ToNumber(sec);
- ms = argc < 3 ? GetUTCMillisecondsFrom(this) : ToNumber(ms);
+ sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
+ ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms);
return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
}
var t = LocalTime(DATE_VALUE(this));
hour = ToNumber(hour);
var argc = %_ArgumentsLength();
- min = argc < 2 ? GetMinutesFrom(this) : ToNumber(min);
- sec = argc < 3 ? GetSecondsFrom(this) : ToNumber(sec);
- ms = argc < 4 ? GetMillisecondsFrom(this) : ToNumber(ms);
+ min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min);
+ sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
+ ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
var time = MakeTime(hour, min, sec, ms);
return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
}
var t = DATE_VALUE(this);
hour = ToNumber(hour);
var argc = %_ArgumentsLength();
- min = argc < 2 ? GetUTCMinutesFrom(this) : ToNumber(min);
- sec = argc < 3 ? GetUTCSecondsFrom(this) : ToNumber(sec);
- ms = argc < 4 ? GetUTCMillisecondsFrom(this) : ToNumber(ms);
+ min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min);
+ sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
+ ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
var time = MakeTime(hour, min, sec, ms);
return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
}
function DateSetMonth(month, date) {
var t = LocalTime(DATE_VALUE(this));
month = ToNumber(month);
- date = %_ArgumentsLength() < 2 ? GetDateFrom(this) : ToNumber(date);
+ date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date);
var day = MakeDay(YEAR_FROM_TIME(t), month, date);
return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
}
function DateSetUTCMonth(month, date) {
var t = DATE_VALUE(this);
month = ToNumber(month);
- date = %_ArgumentsLength() < 2 ? GetUTCDateFrom(this) : ToNumber(date);
+ date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date);
var day = MakeDay(YEAR_FROM_TIME(t), month, date);
return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t))));
}