187 public static final Call SET_USER_ACCESSORS = virtualCallNoLookup(ScriptObject.class, "setUserAccessors", void.class, Object.class, ScriptFunction.class, ScriptFunction.class); |
187 public static final Call SET_USER_ACCESSORS = virtualCallNoLookup(ScriptObject.class, "setUserAccessors", void.class, Object.class, ScriptFunction.class, ScriptFunction.class); |
188 |
188 |
189 /** Method handle for generic property setter */ |
189 /** Method handle for generic property setter */ |
190 public static final Call GENERIC_SET = virtualCallNoLookup(ScriptObject.class, "set", void.class, Object.class, Object.class, int.class); |
190 public static final Call GENERIC_SET = virtualCallNoLookup(ScriptObject.class, "set", void.class, Object.class, Object.class, int.class); |
191 |
191 |
|
192 public static final Call DELETE = virtualCall(MethodHandles.lookup(), ScriptObject.class, "delete", boolean.class, Object.class, boolean.class); |
|
193 |
192 static final MethodHandle[] SET_SLOW = new MethodHandle[] { |
194 static final MethodHandle[] SET_SLOW = new MethodHandle[] { |
193 findOwnMH_V("set", void.class, Object.class, int.class, int.class), |
195 findOwnMH_V("set", void.class, Object.class, int.class, int.class), |
194 findOwnMH_V("set", void.class, Object.class, double.class, int.class), |
196 findOwnMH_V("set", void.class, Object.class, double.class, int.class), |
195 findOwnMH_V("set", void.class, Object.class, Object.class, int.class) |
197 findOwnMH_V("set", void.class, Object.class, Object.class, int.class) |
196 }; |
198 }; |
199 public static final Call SET_MAP = virtualCallNoLookup(ScriptObject.class, "setMap", void.class, PropertyMap.class); |
201 public static final Call SET_MAP = virtualCallNoLookup(ScriptObject.class, "setMap", void.class, PropertyMap.class); |
200 |
202 |
201 static final MethodHandle CAS_MAP = findOwnMH_V("compareAndSetMap", boolean.class, PropertyMap.class, PropertyMap.class); |
203 static final MethodHandle CAS_MAP = findOwnMH_V("compareAndSetMap", boolean.class, PropertyMap.class, PropertyMap.class); |
202 static final MethodHandle EXTENSION_CHECK = findOwnMH_V("extensionCheck", boolean.class, boolean.class, String.class); |
204 static final MethodHandle EXTENSION_CHECK = findOwnMH_V("extensionCheck", boolean.class, boolean.class, String.class); |
203 static final MethodHandle ENSURE_SPILL_SIZE = findOwnMH_V("ensureSpillSize", Object.class, int.class); |
205 static final MethodHandle ENSURE_SPILL_SIZE = findOwnMH_V("ensureSpillSize", Object.class, int.class); |
|
206 |
|
207 private static final GuardedInvocation DELETE_GUARDED = new GuardedInvocation(MH.insertArguments(DELETE.methodHandle(), 2, false), NashornGuards.getScriptObjectGuard()); |
|
208 private static final GuardedInvocation DELETE_GUARDED_STRICT = new GuardedInvocation(MH.insertArguments(DELETE.methodHandle(), 2, true), NashornGuards.getScriptObjectGuard()); |
204 |
209 |
205 /** |
210 /** |
206 * Constructor |
211 * Constructor |
207 */ |
212 */ |
208 public ScriptObject() { |
213 public ScriptObject() { |
1867 : findGetIndexMethod(desc, request); |
1872 : findGetIndexMethod(desc, request); |
1868 case SET: |
1873 case SET: |
1869 return desc.getOperation() instanceof NamedOperation |
1874 return desc.getOperation() instanceof NamedOperation |
1870 ? findSetMethod(desc, request) |
1875 ? findSetMethod(desc, request) |
1871 : findSetIndexMethod(desc, request); |
1876 : findSetIndexMethod(desc, request); |
|
1877 case REMOVE: |
|
1878 final GuardedInvocation inv = NashornCallSiteDescriptor.isStrict(desc) ? DELETE_GUARDED_STRICT : DELETE_GUARDED; |
|
1879 final Object name = NamedOperation.getName(desc.getOperation()); |
|
1880 if (name != null) { |
|
1881 return inv.replaceMethods(MH.insertArguments(inv.getInvocation(), 1, name), inv.getGuard()); |
|
1882 } |
|
1883 return inv; |
1872 case CALL: |
1884 case CALL: |
1873 return findCallMethod(desc, request); |
1885 return findCallMethod(desc, request); |
1874 case NEW: |
1886 case NEW: |
1875 return findNewMethod(desc, request); |
1887 return findNewMethod(desc, request); |
1876 default: |
1888 default: |