X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjs%2FJSDate.java;h=19e4fc622adab0d630c7e1d5ed4feba30de2a4f0;hb=f3ad8b6cba43f3c5364dc2cd9f1d050c1f48f167;hp=68e893e98f10e7ecc20cd703f1808667263b2caf;hpb=b60ef275929f083da04751e5f2974924d8a6389a;p=org.ibex.js.git diff --git a/src/org/ibex/js/JSDate.java b/src/org/ibex/js/JSDate.java index 68e893e..19e4fc6 100644 --- a/src/org/ibex/js/JSDate.java +++ b/src/org/ibex/js/JSDate.java @@ -44,7 +44,8 @@ import java.text.DateFormat; * @author Mike McCabe * @author Adam Megacz (many modifications */ -public class JSDate extends JS { +public class JSDate extends JS.Immutable { + private static final JS.Method METHOD = new JS.Method(); public JSDate() { if (thisTimeZone == null) { @@ -55,85 +56,73 @@ public class JSDate extends JS { } } - public JSDate(long now) { - if (thisTimeZone == null) { - // j.u.TimeZone is synchronized, so setting class statics from it - // should be OK. - thisTimeZone = java.util.TimeZone.getDefault(); - LocalTZA = thisTimeZone.getRawOffset(); - } - date = (double)now; - } - - public String toString() { return date_format(date, FORMATSPEC_FULL); } + public String coerceToString() { return date_format(date, FORMATSPEC_FULL); } - public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn { - switch(nargs) { + public JS call(JS method, JS[] args) throws JSExn { + switch(args.length) { case 0: { - //#switch(method) - case "toString": return date_format(date, FORMATSPEC_FULL); - case "toTimeString": return date_format(date, FORMATSPEC_TIME); - case "toDateString": return date_format(date, FORMATSPEC_DATE); - case "toLocaleString": return toLocaleString(date); - case "toLocaleTimeString": return toLocaleTimeString(date); - case "toLocaleDateString": return toLocaleDateString(date); - case "toUTCString": return toUTCString(date); - case "valueOf": return N(this.date); - case "getTime": return N(this.date); - case "getYear": return N(getYear(date)); - case "getFullYear": return N(YearFromTime(LocalTime(date))); - case "getUTCFullYear": return N(YearFromTime(date)); - case "getMonth": return N(MonthFromTime(LocalTime(date))); - case "getUTCMonth": return N(MonthFromTime(date)); - case "getDate": return N(DateFromTime(LocalTime(date))); - case "getUTCDate": return N(DateFromTime(date)); - case "getDay": return N(WeekDay(LocalTime(date))); - case "getUTCDay": return N(WeekDay(date)); - case "getHours": return N(HourFromTime(LocalTime(date))); - case "getUTCHours": return N(HourFromTime(date)); - case "getMinutes": return N(MinFromTime(LocalTime(date))); - case "getUTCMinutes": return N(MinFromTime(date)); - case "getSeconds": return N(SecFromTime(LocalTime(date))); - case "getUTCSeconds": return N(SecFromTime(date)); - case "getMilliseconds": return N(msFromTime(LocalTime(date))); - case "getUTCMilliseconds": return N(msFromTime(date)); - case "getTimezoneOffset": return N(getTimezoneOffset(date)); + //#switch(JSU.toString(method)) + case "toString": return JSU.S(date_format(date, FORMATSPEC_FULL)); + case "toTimeString": return JSU.S(date_format(date, FORMATSPEC_TIME)); + case "toDateString": return JSU.S(date_format(date, FORMATSPEC_DATE)); + case "toLocaleString": return JSU.S(toLocaleString(date)); + case "toLocaleTimeString": return JSU.S(toLocaleTimeString(date)); + case "toLocaleDateString": return JSU.S(toLocaleDateString(date)); + case "toUTCString": return JSU.S(toUTCString(date)); + case "valueOf": return JSU.N(this.date); + case "getTime": return JSU.N(this.date); + case "getYear": return JSU.N(getYear(date)); + case "getFullYear": return JSU.N(YearFromTime(LocalTime(date))); + case "getUTCFullYear": return JSU.N(YearFromTime(date)); + case "getMonth": return JSU.N(MonthFromTime(LocalTime(date))); + case "getUTCMonth": return JSU.N(MonthFromTime(date)); + case "getDate": return JSU.N(DateFromTime(LocalTime(date))); + case "getUTCDate": return JSU.N(DateFromTime(date)); + case "getDay": return JSU.N(WeekDay(LocalTime(date))); + case "getUTCDay": return JSU.N(WeekDay(date)); + case "getHours": return JSU.N(HourFromTime(LocalTime(date))); + case "getUTCHours": return JSU.N(HourFromTime(date)); + case "getMinutes": return JSU.N(MinFromTime(LocalTime(date))); + case "getUTCMinutes": return JSU.N(MinFromTime(date)); + case "getSeconds": return JSU.N(SecFromTime(LocalTime(date))); + case "getUTCSeconds": return JSU.N(SecFromTime(date)); + case "getMilliseconds": return JSU.N(msFromTime(LocalTime(date))); + case "getUTCMilliseconds": return JSU.N(msFromTime(date)); + case "getTimezoneOffset": return JSU.N(getTimezoneOffset(date)); //#end - return super.callMethod(method, a0, a1, a2, rest, nargs); + return super.call(method, args); } case 1: { - //#switch(method) - case "setTime": return N(this.setTime(toDouble(a0))); - case "setYear": return N(this.setYear(toDouble(a0))); + //#switch(JSU.toString(method)) + case "setTime": return JSU.N(this.setTime(JSU.toDouble(args[0]))); + case "setYear": return JSU.N(this.setYear(JSU.toDouble(args[0]))); //#end // fall through } default: { - Object[] args = new Object[nargs]; - for(int i=0; i= 2) array[2] = toDouble(a2); - for(int i=0; i= 2) array[2] = JSU.toDouble(args[2]); + for (int i=0; i < args.length; i++) { + double d = _toNumber(args[i]); if (d != d || Double.isInfinite(d)) { obj.date = Double.NaN; return; @@ -1065,7 +1047,7 @@ public class JSDate extends JS { return this.date; } - private double makeTime(Object[] args, int maxargs, boolean local) { + private double makeTime(JS[] args, int maxargs, boolean local) throws JSExn { int i; double conv[] = new double[4]; double hour, min, sec, msec; @@ -1089,7 +1071,7 @@ public class JSDate extends JS { * d.setMilliseconds()" returns NaN. Blech. */ if (args.length == 0) - args = new Object[] { null }; + args = new JS[] { null }; for (i = 0; i < args.length && i < maxargs; i++) { conv[i] = _toNumber(args[i]); @@ -1099,7 +1081,6 @@ public class JSDate extends JS { this.date = Double.NaN; return this.date; } - conv[i] = toDouble(conv[i]); } if (local) @@ -1141,15 +1122,15 @@ public class JSDate extends JS { return date; } - private double setHours(Object[] args) { + private double setHours(JS[] args) throws JSExn { return makeTime(args, 4, true); } - private double setUTCHours(Object[] args) { + private double setUTCHours(JS[] args) throws JSExn { return makeTime(args, 4, false); } - private double makeDate(Object[] args, int maxargs, boolean local) { + private double makeDate(JS[] args, int maxargs, boolean local) throws JSExn { int i; double conv[] = new double[3]; double year, month, day; @@ -1160,7 +1141,7 @@ public class JSDate extends JS { /* See arg padding comment in makeTime.*/ if (args.length == 0) - args = new Object[] { null }; + args = new JS[] { null }; for (i = 0; i < args.length && i < maxargs; i++) { conv[i] = _toNumber(args[i]); @@ -1170,7 +1151,6 @@ public class JSDate extends JS { this.date = Double.NaN; return this.date; } - conv[i] = toDouble(conv[i]); } /* return NaN if date is NaN and we're not setting the year,