1089 init(eng);
1090 }
1091
1092 /**
1093 * Wrap a Java object as corresponding script object
1094 *
1095 * @param obj object to wrap
1096 * @return wrapped object
1097 */
1098 public Object wrapAsObject(final Object obj) {
1099 if (obj instanceof Boolean) {
1100 return new NativeBoolean((Boolean)obj, this);
1101 } else if (obj instanceof Number) {
1102 return new NativeNumber(((Number)obj).doubleValue(), this);
1103 } else if (isString(obj)) {
1104 return new NativeString((CharSequence)obj, this);
1105 } else if (obj instanceof Object[]) { // extension
1106 return new NativeArray(ArrayData.allocate((Object[])obj), this);
1107 } else if (obj instanceof double[]) { // extension
1108 return new NativeArray(ArrayData.allocate((double[])obj), this);
1109 } else if (obj instanceof long[]) {
1110 return new NativeArray(ArrayData.allocate((long[])obj), this);
1111 } else if (obj instanceof int[]) {
1112 return new NativeArray(ArrayData.allocate((int[]) obj), this);
1113 } else if (obj instanceof ArrayData) {
1114 return new NativeArray((ArrayData) obj, this);
1115 } else if (obj instanceof Symbol) {
1116 return new NativeSymbol((Symbol) obj, this);
1117 } else {
1118 // FIXME: more special cases? Map? List?
1119 return obj;
1120 }
1121 }
1122
1123 /**
1124 * Lookup helper for JS primitive types
1125 *
1126 * @param request the link request for the dynamic call site.
1127 * @param self self reference
1128 *
1129 * @return guarded invocation
1130 */
1977
1978 if (value == ScriptRuntime.EMPTY) {
1979 arrayData = arrayData.delete(index);
1980 }
1981 }
1982
1983 return new NativeArray(arrayData);
1984 }
1985
1986 /**
1987 * Allocate a new number array.
1988 *
1989 * @param initial number values.
1990 * @return the new array
1991 */
1992 public static NativeArray allocate(final double[] initial) {
1993 return new NativeArray(ArrayData.allocate(initial));
1994 }
1995
1996 /**
1997 * Allocate a new long array.
1998 *
1999 * @param initial number values.
2000 * @return the new array
2001 */
2002 public static NativeArray allocate(final long[] initial) {
2003 return new NativeArray(ArrayData.allocate(initial));
2004 }
2005
2006 /**
2007 * Allocate a new integer array.
2008 *
2009 * @param initial number values.
2010 * @return the new array
2011 */
2012 public static NativeArray allocate(final int[] initial) {
2013 return new NativeArray(ArrayData.allocate(initial));
2014 }
2015
2016 /**
2017 * Allocate a new object array for arguments.
2018 *
2019 * @param arguments initial arguments passed.
2020 * @param callee reference to the function that uses arguments object
2021 * @param numParams actual number of declared parameters
2022 *
2023 * @return the new array
2024 */
2025 public static ScriptObject allocateArguments(final Object[] arguments, final Object callee, final int numParams) {
2026 return NativeArguments.allocate(arguments, (ScriptFunction)callee, numParams);
2274 }
2275
2276 private void init(final ScriptEngine eng) {
2277 assert Context.getGlobal() == this : "this global is not set as current";
2278
2279 final ScriptEnvironment env = getContext().getEnv();
2280
2281 // initialize Function and Object constructor
2282 initFunctionAndObject();
2283
2284 // Now fix Global's own proto.
2285 this.setInitialProto(getObjectPrototype());
2286
2287 // initialize global function properties
2288 this.eval = this.builtinEval = ScriptFunction.createBuiltin("eval", EVAL);
2289
2290 this.parseInt = ScriptFunction.createBuiltin("parseInt", GlobalFunctions.PARSEINT,
2291 new Specialization[] {
2292 new Specialization(GlobalFunctions.PARSEINT_Z),
2293 new Specialization(GlobalFunctions.PARSEINT_I),
2294 new Specialization(GlobalFunctions.PARSEINT_J),
2295 new Specialization(GlobalFunctions.PARSEINT_OI),
2296 new Specialization(GlobalFunctions.PARSEINT_O) });
2297 this.parseFloat = ScriptFunction.createBuiltin("parseFloat", GlobalFunctions.PARSEFLOAT);
2298 this.isNaN = ScriptFunction.createBuiltin("isNaN", GlobalFunctions.IS_NAN,
2299 new Specialization[] {
2300 new Specialization(GlobalFunctions.IS_NAN_I),
2301 new Specialization(GlobalFunctions.IS_NAN_J),
2302 new Specialization(GlobalFunctions.IS_NAN_D) });
2303 this.parseFloat = ScriptFunction.createBuiltin("parseFloat", GlobalFunctions.PARSEFLOAT);
2304 this.isNaN = ScriptFunction.createBuiltin("isNaN", GlobalFunctions.IS_NAN);
2305 this.isFinite = ScriptFunction.createBuiltin("isFinite", GlobalFunctions.IS_FINITE);
2306 this.encodeURI = ScriptFunction.createBuiltin("encodeURI", GlobalFunctions.ENCODE_URI);
2307 this.encodeURIComponent = ScriptFunction.createBuiltin("encodeURIComponent", GlobalFunctions.ENCODE_URICOMPONENT);
2308 this.decodeURI = ScriptFunction.createBuiltin("decodeURI", GlobalFunctions.DECODE_URI);
2309 this.decodeURIComponent = ScriptFunction.createBuiltin("decodeURIComponent", GlobalFunctions.DECODE_URICOMPONENT);
2310 this.escape = ScriptFunction.createBuiltin("escape", GlobalFunctions.ESCAPE);
2311 this.unescape = ScriptFunction.createBuiltin("unescape", GlobalFunctions.UNESCAPE);
2312 this.print = ScriptFunction.createBuiltin("print", env._print_no_newline ? PRINT : PRINTLN);
2313 this.load = ScriptFunction.createBuiltin("load", LOAD);
2314 this.loadWithNewGlobal = ScriptFunction.createBuiltin("loadWithNewGlobal", LOAD_WITH_NEW_GLOBAL);
|
1089 init(eng);
1090 }
1091
1092 /**
1093 * Wrap a Java object as corresponding script object
1094 *
1095 * @param obj object to wrap
1096 * @return wrapped object
1097 */
1098 public Object wrapAsObject(final Object obj) {
1099 if (obj instanceof Boolean) {
1100 return new NativeBoolean((Boolean)obj, this);
1101 } else if (obj instanceof Number) {
1102 return new NativeNumber(((Number)obj).doubleValue(), this);
1103 } else if (isString(obj)) {
1104 return new NativeString((CharSequence)obj, this);
1105 } else if (obj instanceof Object[]) { // extension
1106 return new NativeArray(ArrayData.allocate((Object[])obj), this);
1107 } else if (obj instanceof double[]) { // extension
1108 return new NativeArray(ArrayData.allocate((double[])obj), this);
1109 } else if (obj instanceof int[]) {
1110 return new NativeArray(ArrayData.allocate((int[]) obj), this);
1111 } else if (obj instanceof ArrayData) {
1112 return new NativeArray((ArrayData) obj, this);
1113 } else if (obj instanceof Symbol) {
1114 return new NativeSymbol((Symbol) obj, this);
1115 } else {
1116 // FIXME: more special cases? Map? List?
1117 return obj;
1118 }
1119 }
1120
1121 /**
1122 * Lookup helper for JS primitive types
1123 *
1124 * @param request the link request for the dynamic call site.
1125 * @param self self reference
1126 *
1127 * @return guarded invocation
1128 */
1975
1976 if (value == ScriptRuntime.EMPTY) {
1977 arrayData = arrayData.delete(index);
1978 }
1979 }
1980
1981 return new NativeArray(arrayData);
1982 }
1983
1984 /**
1985 * Allocate a new number array.
1986 *
1987 * @param initial number values.
1988 * @return the new array
1989 */
1990 public static NativeArray allocate(final double[] initial) {
1991 return new NativeArray(ArrayData.allocate(initial));
1992 }
1993
1994 /**
1995 * Allocate a new integer array.
1996 *
1997 * @param initial number values.
1998 * @return the new array
1999 */
2000 public static NativeArray allocate(final int[] initial) {
2001 return new NativeArray(ArrayData.allocate(initial));
2002 }
2003
2004 /**
2005 * Allocate a new object array for arguments.
2006 *
2007 * @param arguments initial arguments passed.
2008 * @param callee reference to the function that uses arguments object
2009 * @param numParams actual number of declared parameters
2010 *
2011 * @return the new array
2012 */
2013 public static ScriptObject allocateArguments(final Object[] arguments, final Object callee, final int numParams) {
2014 return NativeArguments.allocate(arguments, (ScriptFunction)callee, numParams);
2262 }
2263
2264 private void init(final ScriptEngine eng) {
2265 assert Context.getGlobal() == this : "this global is not set as current";
2266
2267 final ScriptEnvironment env = getContext().getEnv();
2268
2269 // initialize Function and Object constructor
2270 initFunctionAndObject();
2271
2272 // Now fix Global's own proto.
2273 this.setInitialProto(getObjectPrototype());
2274
2275 // initialize global function properties
2276 this.eval = this.builtinEval = ScriptFunction.createBuiltin("eval", EVAL);
2277
2278 this.parseInt = ScriptFunction.createBuiltin("parseInt", GlobalFunctions.PARSEINT,
2279 new Specialization[] {
2280 new Specialization(GlobalFunctions.PARSEINT_Z),
2281 new Specialization(GlobalFunctions.PARSEINT_I),
2282 new Specialization(GlobalFunctions.PARSEINT_OI),
2283 new Specialization(GlobalFunctions.PARSEINT_O) });
2284 this.parseFloat = ScriptFunction.createBuiltin("parseFloat", GlobalFunctions.PARSEFLOAT);
2285 this.isNaN = ScriptFunction.createBuiltin("isNaN", GlobalFunctions.IS_NAN,
2286 new Specialization[] {
2287 new Specialization(GlobalFunctions.IS_NAN_I),
2288 new Specialization(GlobalFunctions.IS_NAN_J),
2289 new Specialization(GlobalFunctions.IS_NAN_D) });
2290 this.parseFloat = ScriptFunction.createBuiltin("parseFloat", GlobalFunctions.PARSEFLOAT);
2291 this.isNaN = ScriptFunction.createBuiltin("isNaN", GlobalFunctions.IS_NAN);
2292 this.isFinite = ScriptFunction.createBuiltin("isFinite", GlobalFunctions.IS_FINITE);
2293 this.encodeURI = ScriptFunction.createBuiltin("encodeURI", GlobalFunctions.ENCODE_URI);
2294 this.encodeURIComponent = ScriptFunction.createBuiltin("encodeURIComponent", GlobalFunctions.ENCODE_URICOMPONENT);
2295 this.decodeURI = ScriptFunction.createBuiltin("decodeURI", GlobalFunctions.DECODE_URI);
2296 this.decodeURIComponent = ScriptFunction.createBuiltin("decodeURIComponent", GlobalFunctions.DECODE_URICOMPONENT);
2297 this.escape = ScriptFunction.createBuiltin("escape", GlobalFunctions.ESCAPE);
2298 this.unescape = ScriptFunction.createBuiltin("unescape", GlobalFunctions.UNESCAPE);
2299 this.print = ScriptFunction.createBuiltin("print", env._print_no_newline ? PRINT : PRINTLN);
2300 this.load = ScriptFunction.createBuiltin("load", LOAD);
2301 this.loadWithNewGlobal = ScriptFunction.createBuiltin("loadWithNewGlobal", LOAD_WITH_NEW_GLOBAL);
|