| Index: src/date-delay.js
|
| ===================================================================
|
| --- src/date-delay.js (revision 2342)
|
| +++ src/date-delay.js (working copy)
|
| @@ -47,7 +47,7 @@
|
|
|
| // ECMA 262 - 15.9.1.2
|
| function Day(time) {
|
| - return FLOOR(time/msPerDay);
|
| + return FLOOR(time / msPerDay);
|
| }
|
|
|
|
|
| @@ -428,29 +428,33 @@
|
|
|
|
|
| %SetCode($Date, function(year, month, date, hours, minutes, seconds, ms) {
|
| - if (%_IsConstructCall()) {
|
| - // ECMA 262 - 15.9.3
|
| - var argc = %_ArgumentsLength();
|
| - if (argc == 0) {
|
| - %_SetValueOf(this, %DateCurrentTime());
|
| - return;
|
| - }
|
| - if (argc == 1) {
|
| + if (!%_IsConstructCall()) {
|
| + // ECMA 262 - 15.9.2
|
| + return (new $Date()).toString();
|
| + }
|
| +
|
| + // ECMA 262 - 15.9.3
|
| + var argc = %_ArgumentsLength();
|
| + var value;
|
| + if (argc == 0) {
|
| + value = %DateCurrentTime();
|
| +
|
| + } else if (argc == 1) {
|
| + if (IS_NUMBER(year)) {
|
| + value = TimeClip(year);
|
| + } else {
|
| // According to ECMA 262, no hint should be given for this
|
| - // conversion. However, ToPrimitive defaults to String Hint
|
| - // for Date objects which will lose precision when the Date
|
| + // conversion. However, ToPrimitive defaults to STRING_HINT for
|
| + // Date objects which will lose precision when the Date
|
| // constructor is called with another Date object as its
|
| - // argument. We therefore use Number Hint for the conversion
|
| - // (which is the default for everything else than Date
|
| - // objects). This makes us behave like KJS and SpiderMonkey.
|
| + // argument. We therefore use NUMBER_HINT for the conversion,
|
| + // which is the default for everything else than Date objects.
|
| + // This makes us behave like KJS and SpiderMonkey.
|
| var time = ToPrimitive(year, NUMBER_HINT);
|
| - if (IS_STRING(time)) {
|
| - %_SetValueOf(this, DateParse(time));
|
| - } else {
|
| - %_SetValueOf(this, TimeClip(ToNumber(time)));
|
| - }
|
| - return;
|
| + value = IS_STRING(time) ? DateParse(time) : TimeClip(ToNumber(time));
|
| }
|
| +
|
| + } else {
|
| year = ToNumber(year);
|
| month = ToNumber(month);
|
| date = argc > 2 ? ToNumber(date) : 1;
|
| @@ -462,11 +466,9 @@
|
| ? 1900 + TO_INTEGER(year) : year;
|
| var day = MakeDay(year, month, date);
|
| var time = MakeTime(hours, minutes, seconds, ms);
|
| - %_SetValueOf(this, TimeClip(UTC(MakeDate(day, time))));
|
| - } else {
|
| - // ECMA 262 - 15.9.2
|
| - return (new $Date()).toString();
|
| + value = TimeClip(UTC(MakeDate(day, time)));
|
| }
|
| + %_SetValueOf(this, value);
|
| });
|
|
|
|
|
|
|