# HG changeset patch # User asaha # Date 1442815408 25200 # Node ID 0fe957cacc1e369a44e292411be58959e5cc8891 # Parent 9b9565054f137042487822098c80a5151a8aac55# Parent 126df6b4ff177086f88b0ab433b3129100cedd71 Merge diff -r 9b9565054f13 -r 0fe957cacc1e .hgtags --- a/.hgtags Mon Aug 31 14:50:39 2015 -0700 +++ b/.hgtags Sun Sep 20 23:03:28 2015 -0700 @@ -341,6 +341,7 @@ 34a64e22b81bd78cf29603a80ff1f4cfc1694df8 jdk8u31-b31 d2b5784a3452a4fd9d1ccfefe93ee2d36662842c jdk8u31-b32 c6dd08613a440ed8d0f1b14b85911d6f3826e1d4 jdk8u31-b33 +e92af20b58190a0fa46c2c93636368866e274b39 jdk8u31-b34 f2925491b61b22ac42f8c30ee9c6723ffa401a4c jdk8u40-b00 62468d841b842769d875bd97d10370585c296eb7 jdk8u40-b01 b476c69c820ac1e05071f4de5abab8e2dff80e87 jdk8u40-b02 @@ -412,6 +413,8 @@ 4cbc78843829b3f6de43b3c056565834008419a6 jdk8u51-b15 f01ca5e6b907d1fc2c17068fb28a74411e833f16 jdk8u51-b16 4e5f9de7a3dfd0c4e15714863007ac591e9dffea jdk8u51-b31 +009644f58d73263eec2582a84a1e9b63975c5387 jdk8u51-b32 +eac4b87f86dde817023a07dcb701dc5d986b705f jdk8u51-b33 6ec61d2494283fbaca6df227f1a5b45487dc1ca7 jdk8u60-b00 af290f203369ecf8e67b89c4a3a8df0bf535230e jdk8u60-b01 39e0c14d45c3fee93a29993f1415b3393d03483f jdk8u60-b02 @@ -440,6 +443,8 @@ 371f3f83f773ec97491d994bbcce834f0a2cca74 jdk8u60-b25 58791cd01bc9aa973d8845ce63403b90d357b5ac jdk8u60-b26 72a33aed7dccf570f4e05ea1121522a88ac190b2 jdk8u60-b27 +fc0045a6aaeee45f5d2505a2f7a07ec6cd6f56bc jdk8u60-b31 +2d161c9248ca7bf5779cf33c45768e26c1161eb4 jdk8u60-b32 afc8b472a5f3d54734be29aa9c4f617191fc9246 jdk8u52-b06 8cd2d9bea168694db5f090b30ba5973e1656385b jdk8u52-b07 afc8b472a5f3d54734be29aa9c4f617191fc9246 jdk8u65-b00 @@ -455,6 +460,8 @@ be2856f5c3e4ced88259759201fbb3d5c0e4db94 jdk8u65-b10 6a809be8e2057b290871707aeaadf79679afbf90 jdk8u65-b11 b9bc29802d24cf3e82f0b435c82d567e27373aa6 jdk8u65-b12 +5ad3832ac8d01656ec28d03f81042f2672360219 jdk8u65-b13 +1448629ede5316a04b15f66667a8cfc4bd1b5009 jdk8u65-b14 9ed906919b5d92067edcdd966a3f413fca0f70ab jdk8u66-b00 c0f0613d1b1119afc9446eb187a2a7b5f534f050 jdk8u66-b01 16220ab541af04fe79d9143fb62854f7acf46eca jdk8u66-b02 @@ -464,4 +471,6 @@ 998d6b5b976ba8db410b9f8cccf1cc927280b542 jdk8u66-b10 46022f24d619e56ff41a432a5211bd9560d3e237 jdk8u66-b11 2bdd08a9cc8ca594723e412cc9479f4f7351959f jdk8u66-b12 +cd562acc692c5ea4d5e3ea5164757f1b7e00e274 jdk8u66-b13 +165ed6982da8dc7dc5562d5b4a8f07dba55c7448 jdk8u66-b14 a7ac4116ee88aa86fec5ac66901302e11f578172 jdk8u71-b00 diff -r 9b9565054f13 -r 0fe957cacc1e src/jdk/nashorn/internal/runtime/UserAccessorProperty.java --- a/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java Mon Aug 31 14:50:39 2015 -0700 +++ b/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java Sun Sep 20 23:03:28 2015 -0700 @@ -24,7 +24,6 @@ */ package jdk.nashorn.internal.runtime; - import static jdk.nashorn.internal.lookup.Lookup.MH; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; @@ -34,6 +33,7 @@ import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; +import java.util.concurrent.Callable; import jdk.nashorn.internal.lookup.Lookup; import jdk.nashorn.internal.runtime.linker.Bootstrap; import jdk.nashorn.internal.runtime.linker.NashornCallSiteDescriptor; @@ -80,6 +80,15 @@ private final static MethodHandle INVOKE_LONG_SETTER = findOwnMH_S("invokeLongSetter", void.class, Accessors.class, MethodHandle.class, String.class, Object.class, long.class); private final static MethodHandle INVOKE_NUMBER_SETTER = findOwnMH_S("invokeNumberSetter", void.class, Accessors.class, MethodHandle.class, String.class, Object.class, double.class); + private static final Object OBJECT_GETTER_INVOKER_KEY = new Object(); + private static MethodHandle getObjectGetterInvoker() { + return Context.getGlobal().getDynamicInvoker(OBJECT_GETTER_INVOKER_KEY, new Callable() { + @Override + public MethodHandle call() throws Exception { + return getINVOKE_UA_GETTER(Object.class, INVALID_PROGRAM_POINT); + } + }); + } static MethodHandle getINVOKE_UA_GETTER(final Class returnType, final int programPoint) { if (UnwarrantedOptimismException.isValid(programPoint)) { @@ -90,6 +99,16 @@ } } + private static final Object OBJECT_SETTER_INVOKER_KEY = new Object(); + private static MethodHandle getObjectSetterInvoker() { + return Context.getGlobal().getDynamicInvoker(OBJECT_SETTER_INVOKER_KEY, new Callable() { + @Override + public MethodHandle call() throws Exception { + return getINVOKE_UA_SETTER(Object.class); + } + }); + } + static MethodHandle getINVOKE_UA_SETTER(final Class valueType) { return Bootstrap.createDynamicInvoker("dyn:call", void.class, Object.class, Object.class, valueType); } @@ -181,7 +200,7 @@ @Override public Object getObjectValue(final ScriptObject self, final ScriptObject owner) { try { - return invokeObjectGetter(getAccessors((owner != null) ? owner : self), getINVOKE_UA_GETTER(Object.class, INVALID_PROGRAM_POINT), self); + return invokeObjectGetter(getAccessors((owner != null) ? owner : self), getObjectGetterInvoker(), self); } catch (final Error | RuntimeException t) { throw t; } catch (final Throwable t) { @@ -207,7 +226,7 @@ @Override public void setValue(final ScriptObject self, final ScriptObject owner, final Object value, final boolean strict) { try { - invokeObjectSetter(getAccessors((owner != null) ? owner : self), getINVOKE_UA_SETTER(Object.class), strict ? getKey() : null, self, value); + invokeObjectSetter(getAccessors((owner != null) ? owner : self), getObjectSetterInvoker(), strict ? getKey() : null, self, value); } catch (final Error | RuntimeException t) { throw t; } catch (final Throwable t) {