* This class implements the Date native object.
* See ECMA 15.9.
* @author Mike McCabe
+ * @author Adam Megacz (many modifications
*/
public class JSDate extends JSCallable {
public String coerceToString() { return date_format(date, FORMATSPEC_FULL); }
- public Object call(Object name, JSArray args_) {
- Object[] args = new Object[args_.length()];
- for(int i=0; i<args.length; i++) args[i] = args_.elementAt(i);
-
- if (name.equals(getIdName(ConstructorId_UTC))) {
- return new Double(jsStaticJSFunction_UTC(args));
-
- } else if (name.equals(getIdName(ConstructorId_parse))) {
- return new Double(jsStaticJSFunction_parse(args[0].toString()));
-
- } else if (name.equals(getIdName(Id_constructor))) {
- return new JSDate(args_);
-
- } else if (name.equals(getIdName(Id_toString))) {
- double t = date;
- return date_format(t, FORMATSPEC_FULL);
-
- } else if (name.equals(getIdName(Id_toTimeString))) {
- double t = date;
- return date_format(t, FORMATSPEC_TIME);
-
- } else if (name.equals(getIdName(Id_toDateString))) {
- double t = date;
- return date_format(t, FORMATSPEC_DATE);
-
- } else if (name.equals(getIdName(Id_toLocaleString))) {
- double t = date;
- return jsJSFunction_toLocaleString(t);
-
- } else if (name.equals(getIdName(Id_toLocaleTimeString))) {
- double t = date;
- return jsJSFunction_toLocaleTimeString(t);
-
- } else if (name.equals(getIdName(Id_toLocaleDateString))) {
- double t = date;
- return jsJSFunction_toLocaleDateString(t);
-
- } else if (name.equals(getIdName(Id_toUTCString))) {
- double t = date;
- return jsJSFunction_toUTCString(t);
-
- } else if (name.equals(getIdName(Id_valueOf))) {
- return new Double(this.date);
-
- } else if (name.equals(getIdName(Id_getTime))) {
- return new Double(this.date);
-
- } else if (name.equals(getIdName(Id_getYear))) {
- double t = date;
- t = jsJSFunction_getYear(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getFullYear))) {
- double t = date;
- t = YearFromTime(LocalTime(t));
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getUTCFullYear))) {
- double t = date;
- t = YearFromTime(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getMonth))) {
- double t = date;
- t = MonthFromTime(LocalTime(t));
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getUTCMonth))) {
- double t = date;
- t = MonthFromTime(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getDate))) {
- double t = date;
- t = DateFromTime(LocalTime(t));
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getUTCDate))) {
- double t = date;
- t = DateFromTime(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getDay))) {
- double t = date;
- t = WeekDay(LocalTime(t));
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getUTCDay))) {
- double t = date;
- t = WeekDay(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getHours))) {
- double t = date;
- t = HourFromTime(LocalTime(t));
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getUTCHours))) {
- double t = date;
- t = HourFromTime(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getMinutes))) {
- double t = date;
- t = MinFromTime(LocalTime(t));
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getUTCMinutes))) {
- double t = date;
- t = MinFromTime(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getSeconds))) {
- double t = date;
- t = SecFromTime(LocalTime(t));
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getUTCSeconds))) {
- double t = date;
- t = SecFromTime(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getMilliseconds))) {
- double t = date;
- t = msFromTime(LocalTime(t));
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getUTCMilliseconds))) {
- double t = date;
- t = msFromTime(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_getTimezoneOffset))) {
- double t = date;
- t = jsJSFunction_getTimezoneOffset(t);
- return new Double(t);
-
- } else if (name.equals(getIdName(Id_setTime))) {
- return new Double(this.jsJSFunction_setTime(_toNumber(args, 0)));
-
- } else if (name.equals(getIdName(Id_setMilliseconds))) {
- return new Double(this.
- makeTime(args, 1, true));
-
- } else if (name.equals(getIdName(Id_setUTCMilliseconds))) {
- return new Double(this.
- makeTime(args, 1, false));
-
- } else if (name.equals(getIdName(Id_setSeconds))) {
- return new Double(this.
- makeTime(args, 2, true));
-
- } else if (name.equals(getIdName(Id_setUTCSeconds))) {
- return new Double(this.
- makeTime(args, 2, false));
-
- } else if (name.equals(getIdName(Id_setMinutes))) {
- return new Double(this.
- makeTime(args, 3, true));
-
- } else if (name.equals(getIdName(Id_setUTCMinutes))) {
- return new Double(this.
- makeTime(args, 3, false));
-
- } else if (name.equals(getIdName(Id_setHours))) {
- return new Double(this.
- makeTime(args, 4, true));
-
- } else if (name.equals(getIdName(Id_setUTCHours))) {
- return new Double(this.
- makeTime(args, 4, false));
-
- } else if (name.equals(getIdName(Id_setDate))) {
- return new Double(this.
- makeDate(args, 1, true));
-
- } else if (name.equals(getIdName(Id_setUTCDate))) {
- return new Double(this.
- makeDate(args, 1, false));
-
- } else if (name.equals(getIdName(Id_setMonth))) {
- return new Double(this.
- makeDate(args, 2, true));
-
- } else if (name.equals(getIdName(Id_setUTCMonth))) {
- return new Double(this.
- makeDate(args, 2, false));
-
- } else if (name.equals(getIdName(Id_setFullYear))) {
- return new Double(this.
- makeDate(args, 3, true));
-
- } else if (name.equals(getIdName(Id_setUTCFullYear))) {
- return new Double(this.
- makeDate(args, 3, false));
-
- } else if (name.equals(getIdName(Id_setYear))) {
- return new Double(this.
- jsJSFunction_setYear(_toNumber(args, 0)));
+ public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) {
+ switch(nargs) {
+ 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));
+ //#end
+ return super.callMethod(method, a0, a1, a2, rest, nargs);
+ }
+ case 1: {
+ //#switch(method)
+ case "setTime": return N(this.setTime(toDouble(a0)));
+ case "setYear": return N(this.setYear(toDouble(a0)));
+ //#end
+ // fall through
+ }
+ default: {
+ Object[] args = new Object[nargs];
+ for(int i=0; i<nargs; i++) args[i] = i==0 ? a0 : i==1 ? a1 : i==2 ? a2 : rest[i-3];
+ //#switch(method)
+ case "setMilliseconds": return N(this.makeTime(args, 1, true));
+ case "setUTCMilliseconds": return N(this.makeTime(args, 1, false));
+ case "setSeconds": return N(this.makeTime(args, 2, true));
+ case "setUTCSeconds": return N(this.makeTime(args, 2, false));
+ case "setMinutes": return N(this.makeTime(args, 3, true));
+ case "setUTCMinutes": return N(this.makeTime(args, 3, false));
+ case "setHours": return N(this.makeTime(args, 4, true));
+ case "setUTCHours": return N(this.makeTime(args, 4, false));
+ case "setDate": return N(this.makeDate(args, 1, true));
+ case "setUTCDate": return N(this.makeDate(args, 1, false));
+ case "setMonth": return N(this.makeDate(args, 2, true));
+ case "setUTCMonth": return N(this.makeDate(args, 2, false));
+ case "setFullYear": return N(this.makeDate(args, 3, true));
+ case "setUTCFullYear": return N(this.makeDate(args, 3, false));
+ //#end
+ }
}
- return null;
+ return super.callMethod(method, a0, a1, a2, rest, nargs);
+ }
+
+ public Object get(Object key) {
+ //#switch(key)
+ case "toString": return METHOD;
+ case "toTimeString": return METHOD;
+ case "toDateString": return METHOD;
+ case "toLocaleString": return METHOD;
+ case "toLocaleTimeString": return METHOD;
+ case "toLocaleDateString": return METHOD;
+ case "toUTCString": return METHOD;
+ case "valueOf": return METHOD;
+ case "getTime": return METHOD;
+ case "getYear": return METHOD;
+ case "getFullYear": return METHOD;
+ case "getUTCFullYear": return METHOD;
+ case "getMonth": return METHOD;
+ case "getUTCMonth": return METHOD;
+ case "getDate": return METHOD;
+ case "getUTCDate": return METHOD;
+ case "getDay": return METHOD;
+ case "getUTCDay": return METHOD;
+ case "getHours": return METHOD;
+ case "getUTCHours": return METHOD;
+ case "getMinutes": return METHOD;
+ case "getUTCMinutes": return METHOD;
+ case "getSeconds": return METHOD;
+ case "getUTCSeconds": return METHOD;
+ case "getMilliseconds": return METHOD;
+ case "getUTCMilliseconds": return METHOD;
+ case "getTimezoneOffset": return METHOD;
+ case "setTime": return METHOD;
+ case "setYear": return METHOD;
+ case "setMilliseconds": return METHOD;
+ case "setUTCMilliseconds": return METHOD;
+ case "setSeconds": return METHOD;
+ case "setUTCSeconds": return METHOD;
+ case "setMinutes": return METHOD;
+ case "setUTCMinutes": return METHOD;
+ case "setHours": return METHOD;
+ case "setUTCHours": return METHOD;
+ case "setDate": return METHOD;
+ case "setUTCDate": return METHOD;
+ case "setMonth": return METHOD;
+ case "setUTCMonth": return METHOD;
+ case "setFullYear": return METHOD;
+ case "setUTCFullYear": return METHOD;
+ //#end
+ return super.get(key);
}
/* ECMA helper functions */
array[3], array[4], array[5], array[6]);
d = TimeClip(d);
return d;
- // return new Double(d);
+ // return N(d);
}
/*
private static String date_format(double t, int format) {
if (t != t)
- return jsJSFunction_NaN_date_str;
+ return NaN_date_str;
StringBuffer result = new StringBuffer(60);
double local = LocalTime(t);
}
/* constants for toString, toUTCString */
- private static String jsJSFunction_NaN_date_str = "Invalid Date";
+ private static String NaN_date_str = "Invalid Date";
private static String[] days = {
"Sun","Mon","Tue","Wed","Thu","Fri","Sat"
java.text.DateFormat formatter)
{
if (t != t)
- return jsJSFunction_NaN_date_str;
+ return NaN_date_str;
java.util.Date tempdate = new java.util.Date((long) t);
return formatter.format(tempdate);
}
- private static String jsJSFunction_toLocaleString(double date) {
+ private static String toLocaleString(double date) {
if (localeDateTimeFormatter == null)
localeDateTimeFormatter =
DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
return toLocale_helper(date, localeDateTimeFormatter);
}
- private static String jsJSFunction_toLocaleTimeString(double date) {
+ private static String toLocaleTimeString(double date) {
if (localeTimeFormatter == null)
localeTimeFormatter = DateFormat.getTimeInstance(DateFormat.LONG);
return toLocale_helper(date, localeTimeFormatter);
}
- private static String jsJSFunction_toLocaleDateString(double date) {
+ private static String toLocaleDateString(double date) {
if (localeDateFormatter == null)
localeDateFormatter = DateFormat.getDateInstance(DateFormat.LONG);
return toLocale_helper(date, localeDateFormatter);
}
- private static String jsJSFunction_toUTCString(double date) {
+ private static String toUTCString(double date) {
StringBuffer result = new StringBuffer(60);
String dateStr = Integer.toString(DateFromTime(date));
return result.toString();
}
- private static double jsJSFunction_getYear(double date) {
+ private static double getYear(double date) {
int result = YearFromTime(LocalTime(date));
result -= 1900;
return result;
}
- private static double jsJSFunction_getTimezoneOffset(double date) {
+ private static double getTimezoneOffset(double date) {
return (date - LocalTime(date)) / msPerMinute;
}
- public double jsJSFunction_setTime(double time) {
+ public double setTime(double time) {
this.date = TimeClip(time);
return this.date;
}
return date;
}
- private double jsJSFunction_setHours(Object[] args) {
+ private double setHours(Object[] args) {
return makeTime(args, 4, true);
}
- private double jsJSFunction_setUTCHours(Object[] args) {
+ private double setUTCHours(Object[] args) {
return makeTime(args, 4, false);
}
return date;
}
- private double jsJSFunction_setYear(double year) {
+ private double setYear(double year) {
double day, result;
if (year != year || Double.isInfinite(year)) {
this.date = Double.NaN;
return this.date;
}
- protected String getIdName(int id) {
- switch (id) {
- case ConstructorId_UTC: return "UTC";
- case ConstructorId_parse: return "parse";
- case Id_constructor: return "constructor";
- case Id_toString: return "toString";
- case Id_toTimeString: return "toTimeString";
- case Id_toDateString: return "toDateString";
- case Id_toLocaleString: return "toLocaleString";
- case Id_toLocaleTimeString: return "toLocaleTimeString";
- case Id_toLocaleDateString: return "toLocaleDateString";
- case Id_toUTCString: return "toUTCString";
- case Id_valueOf: return "valueOf";
- case Id_getTime: return "getTime";
- case Id_getYear: return "getYear";
- case Id_getFullYear: return "getFullYear";
- case Id_getUTCFullYear: return "getUTCFullYear";
- case Id_getMonth: return "getMonth";
- case Id_getUTCMonth: return "getUTCMonth";
- case Id_getDate: return "getDate";
- case Id_getUTCDate: return "getUTCDate";
- case Id_getDay: return "getDay";
- case Id_getUTCDay: return "getUTCDay";
- case Id_getHours: return "getHours";
- case Id_getUTCHours: return "getUTCHours";
- case Id_getMinutes: return "getMinutes";
- case Id_getUTCMinutes: return "getUTCMinutes";
- case Id_getSeconds: return "getSeconds";
- case Id_getUTCSeconds: return "getUTCSeconds";
- case Id_getMilliseconds: return "getMilliseconds";
- case Id_getUTCMilliseconds: return "getUTCMilliseconds";
- case Id_getTimezoneOffset: return "getTimezoneOffset";
- case Id_setTime: return "setTime";
- case Id_setMilliseconds: return "setMilliseconds";
- case Id_setUTCMilliseconds: return "setUTCMilliseconds";
- case Id_setSeconds: return "setSeconds";
- case Id_setUTCSeconds: return "setUTCSeconds";
- case Id_setMinutes: return "setMinutes";
- case Id_setUTCMinutes: return "setUTCMinutes";
- case Id_setHours: return "setHours";
- case Id_setUTCHours: return "setUTCHours";
- case Id_setDate: return "setDate";
- case Id_setUTCDate: return "setUTCDate";
- case Id_setMonth: return "setMonth";
- case Id_setUTCMonth: return "setUTCMonth";
- case Id_setFullYear: return "setFullYear";
- case Id_setUTCFullYear: return "setUTCFullYear";
- case Id_setYear: return "setYear";
- }
- return null;
- }
-
-// #string_id_map#
-
- protected int mapNameToId(String s) {
- int id;
-// #generated# Last update: 2001-04-22 23:46:59 CEST
- L0: { id = 0; String X = null; int c;
- L: switch (s.length()) {
- case 6: X="getDay";id=Id_getDay; break L;
- case 7: switch (s.charAt(3)) {
- case 'D': c=s.charAt(0);
- if (c=='g') { X="getDate";id=Id_getDate; }
- else if (c=='s') { X="setDate";id=Id_setDate; }
- break L;
- case 'T': c=s.charAt(0);
- if (c=='g') { X="getTime";id=Id_getTime; }
- else if (c=='s') { X="setTime";id=Id_setTime; }
- break L;
- case 'Y': c=s.charAt(0);
- if (c=='g') { X="getYear";id=Id_getYear; }
- else if (c=='s') { X="setYear";id=Id_setYear; }
- break L;
- case 'u': X="valueOf";id=Id_valueOf; break L;
- } break L;
- case 8: c=s.charAt(0);
- if (c=='g') {
- c=s.charAt(7);
- if (c=='h') { X="getMonth";id=Id_getMonth; }
- else if (c=='s') { X="getHours";id=Id_getHours; }
- }
- else if (c=='s') {
- c=s.charAt(7);
- if (c=='h') { X="setMonth";id=Id_setMonth; }
- else if (c=='s') { X="setHours";id=Id_setHours; }
- }
- else if (c=='t') { X="toString";id=Id_toString; }
- break L;
- case 9: X="getUTCDay";id=Id_getUTCDay; break L;
- case 10: c=s.charAt(3);
- if (c=='M') {
- c=s.charAt(0);
- if (c=='g') { X="getMinutes";id=Id_getMinutes; }
- else if (c=='s') { X="setMinutes";id=Id_setMinutes; }
- }
- else if (c=='S') {
- c=s.charAt(0);
- if (c=='g') { X="getSeconds";id=Id_getSeconds; }
- else if (c=='s') { X="setSeconds";id=Id_setSeconds; }
- }
- else if (c=='U') {
- c=s.charAt(0);
- if (c=='g') { X="getUTCDate";id=Id_getUTCDate; }
- else if (c=='s') { X="setUTCDate";id=Id_setUTCDate; }
- }
- break L;
- case 11: switch (s.charAt(3)) {
- case 'F': c=s.charAt(0);
- if (c=='g') { X="getFullYear";id=Id_getFullYear; }
- else if (c=='s') { X="setFullYear";id=Id_setFullYear; }
- break L;
- case 'M': X="toGMTString";id=Id_toGMTString; break L;
- case 'T': X="toUTCString";id=Id_toUTCString; break L;
- case 'U': c=s.charAt(0);
- if (c=='g') {
- c=s.charAt(9);
- if (c=='r') { X="getUTCHours";id=Id_getUTCHours; }
- else if (c=='t') { X="getUTCMonth";id=Id_getUTCMonth; }
- }
- else if (c=='s') {
- c=s.charAt(9);
- if (c=='r') { X="setUTCHours";id=Id_setUTCHours; }
- else if (c=='t') { X="setUTCMonth";id=Id_setUTCMonth; }
- }
- break L;
- case 's': X="constructor";id=Id_constructor; break L;
- } break L;
- case 12: c=s.charAt(2);
- if (c=='D') { X="toDateString";id=Id_toDateString; }
- else if (c=='T') { X="toTimeString";id=Id_toTimeString; }
- break L;
- case 13: c=s.charAt(0);
- if (c=='g') {
- c=s.charAt(6);
- if (c=='M') { X="getUTCMinutes";id=Id_getUTCMinutes; }
- else if (c=='S') { X="getUTCSeconds";id=Id_getUTCSeconds; }
- }
- else if (c=='s') {
- c=s.charAt(6);
- if (c=='M') { X="setUTCMinutes";id=Id_setUTCMinutes; }
- else if (c=='S') { X="setUTCSeconds";id=Id_setUTCSeconds; }
- }
- break L;
- case 14: c=s.charAt(0);
- if (c=='g') { X="getUTCFullYear";id=Id_getUTCFullYear; }
- else if (c=='s') { X="setUTCFullYear";id=Id_setUTCFullYear; }
- else if (c=='t') { X="toLocaleString";id=Id_toLocaleString; }
- break L;
- case 15: c=s.charAt(0);
- if (c=='g') { X="getMilliseconds";id=Id_getMilliseconds; }
- else if (c=='s') { X="setMilliseconds";id=Id_setMilliseconds; }
- break L;
- case 17: X="getTimezoneOffset";id=Id_getTimezoneOffset; break L;
- case 18: c=s.charAt(0);
- if (c=='g') { X="getUTCMilliseconds";id=Id_getUTCMilliseconds; }
- else if (c=='s') { X="setUTCMilliseconds";id=Id_setUTCMilliseconds; }
- else if (c=='t') {
- c=s.charAt(8);
- if (c=='D') { X="toLocaleDateString";id=Id_toLocaleDateString; }
- else if (c=='T') { X="toLocaleTimeString";id=Id_toLocaleTimeString; }
- }
- break L;
- }
- if (X!=null && X!=s && !X.equals(s)) id = 0;
- }
-// #/generated#
- return id;
- }
- private static final int
- ConstructorId_UTC = -2,
- ConstructorId_parse = -1,
-
- Id_constructor = 1,
- Id_toString = 2,
- Id_toTimeString = 3,
- Id_toDateString = 4,
- Id_toLocaleString = 5,
- Id_toLocaleTimeString = 6,
- Id_toLocaleDateString = 7,
- Id_toUTCString = 8,
- Id_valueOf = 9,
- Id_getTime = 10,
- Id_getYear = 11,
- Id_getFullYear = 12,
- Id_getUTCFullYear = 13,
- Id_getMonth = 14,
- Id_getUTCMonth = 15,
- Id_getDate = 16,
- Id_getUTCDate = 17,
- Id_getDay = 18,
- Id_getUTCDay = 19,
- Id_getHours = 20,
- Id_getUTCHours = 21,
- Id_getMinutes = 22,
- Id_getUTCMinutes = 23,
- Id_getSeconds = 24,
- Id_getUTCSeconds = 25,
- Id_getMilliseconds = 26,
- Id_getUTCMilliseconds = 27,
- Id_getTimezoneOffset = 28,
- Id_setTime = 29,
- Id_setMilliseconds = 30,
- Id_setUTCMilliseconds = 31,
- Id_setSeconds = 32,
- Id_setUTCSeconds = 33,
- Id_setMinutes = 34,
- Id_setUTCMinutes = 35,
- Id_setHours = 36,
- Id_setUTCHours = 37,
- Id_setDate = 38,
- Id_setUTCDate = 39,
- Id_setMonth = 40,
- Id_setUTCMonth = 41,
- Id_setFullYear = 42,
- Id_setUTCFullYear = 43,
- Id_setYear = 44,
-
- MAX_PROTOTYPE_ID = 44;
-
- private static final int
- Id_toGMTString = Id_toUTCString; // Alias, see Ecma B.2.6
+ // private static final int
+ // Id_toGMTString = Id_toUTCString; // Alias, see Ecma B.2.6
// #/string_id_map#
/* cached values */