X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjs%2FJSDate.java;h=8d267d238353cdef81de930516c0ee641dce916c;hb=36b48aab36d33bd862a9ce81ac69f57fd0a94484;hp=694122c693daeb2dc278f04a29b2fdeadd320048;hpb=b1fa73c17b31f268fca5695d0876d7314fbacce3;p=org.ibex.js.git diff --git a/src/org/ibex/js/JSDate.java b/src/org/ibex/js/JSDate.java index 694122c..8d267d2 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,75 +56,73 @@ public class JSDate extends JS { } } - 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; @@ -1055,7 +1053,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; @@ -1079,7 +1077,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]); @@ -1089,7 +1087,6 @@ public class JSDate extends JS { this.date = Double.NaN; return this.date; } - conv[i] = toDouble(conv[i]); } if (local) @@ -1131,15 +1128,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; @@ -1150,7 +1147,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]); @@ -1160,7 +1157,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,