8167037: Remove CALL_METHOD support from internal Nashorn linkers
Reviewed-by: hannesw, sundar
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeJSAdapter.java Fri Sep 30 19:40:31 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeJSAdapter.java Tue Oct 04 13:23:10 2016 +0200
@@ -473,22 +473,6 @@
}
@Override
- protected GuardedInvocation findCallMethodMethod(final CallSiteDescriptor desc, final LinkRequest request) {
- if (overrides && super.hasOwnProperty(NashornCallSiteDescriptor.getOperand(desc))) {
- try {
- final GuardedInvocation inv = super.findCallMethodMethod(desc, request);
- if (inv != null) {
- return inv;
- }
- } catch (final Exception e) {
- //ignored
- }
- }
-
- return findHook(desc, __call__);
- }
-
- @Override
protected GuardedInvocation findGetMethod(final CallSiteDescriptor desc, final LinkRequest request, final StandardOperation operation) {
final String name = NashornCallSiteDescriptor.getOperand(desc);
if (overrides && super.hasOwnProperty(name)) {
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptObject.java Fri Sep 30 19:40:31 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptObject.java Tue Oct 04 13:23:10 2016 +0200
@@ -80,7 +80,6 @@
import jdk.nashorn.internal.objects.NativeArray;
import jdk.nashorn.internal.runtime.arrays.ArrayData;
import jdk.nashorn.internal.runtime.arrays.ArrayIndex;
-import jdk.nashorn.internal.runtime.linker.Bootstrap;
import jdk.nashorn.internal.runtime.linker.LinkerCallSite;
import jdk.nashorn.internal.runtime.linker.NashornCallSiteDescriptor;
import jdk.nashorn.internal.runtime.linker.NashornGuards;
@@ -1883,8 +1882,6 @@
return findCallMethod(desc, request);
case NEW:
return findNewMethod(desc, request);
- case CALL_METHOD:
- return findCallMethodMethod(desc, request);
default:
}
return null;
@@ -1920,32 +1917,6 @@
}
/**
- * Find an implementation for a CALL_METHOD operation. Note that Nashorn internally never uses
- * CALL_METHOD, but instead always emits two call sites in bytecode, one for GET_METHOD, and then another
- * one for CALL. Explicit support for CALL_METHOD is provided for the benefit of potential external
- * callers. The implementation itself actually folds a GET_METHOD method handle into a CALL method handle.
- *
- * @param desc the call site descriptor.
- * @param request the link request
- *
- * @return GuardedInvocation to be invoked at call site.
- */
- protected GuardedInvocation findCallMethodMethod(final CallSiteDescriptor desc, final LinkRequest request) {
- // R(P0, P1, ...)
- final MethodType callType = desc.getMethodType();
- // use type Object(P0) for the getter
- final CallSiteDescriptor getterType = desc.changeMethodType(MethodType.methodType(Object.class, callType.parameterType(0)));
- final GuardedInvocation getter = findGetMethod(getterType, request, StandardOperation.GET_METHOD);
-
- // Object(P0) => Object(P0, P1, ...)
- final MethodHandle argDroppingGetter = MH.dropArguments(getter.getInvocation(), 1, callType.parameterList().subList(1, callType.parameterCount()));
- // R(Object, P0, P1, ...)
- final MethodHandle invoker = Bootstrap.createDynamicInvoker("", NashornCallSiteDescriptor.CALL, callType.insertParameterTypes(0, argDroppingGetter.type().returnType()));
- // Fold Object(P0, P1, ...) into R(Object, P0, P1, ...) => R(P0, P1, ...)
- return getter.replaceMethods(MH.foldArguments(invoker, argDroppingGetter), getter.getGuard());
- }
-
- /**
* Test whether this object contains in its prototype chain or is itself a with-object.
* @return true if a with-object was found
*/
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Undefined.java Fri Sep 30 19:40:31 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Undefined.java Tue Oct 04 13:23:10 2016 +0200
@@ -103,8 +103,6 @@
final String name = NashornCallSiteDescriptor.getOperand(desc);
final String msg = name != null? "not.a.function" : "cant.call.undefined";
throw typeError(msg, name);
- case CALL_METHOD:
- throw lookupTypeError("cant.read.property.of.undefined", desc);
case GET_PROPERTY:
case GET_ELEMENT:
case GET_METHOD:
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java Fri Sep 30 19:40:31 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java Tue Oct 04 13:23:10 2016 +0200
@@ -86,13 +86,11 @@
private static final MethodHandle EMPTY_ELEM_SETTER =
MH.dropArguments(EMPTY_PROP_SETTER, 0, Object.class);
- private static final MethodHandle THROW_NO_SUCH_FUNCTION;
private static final MethodHandle THROW_STRICT_PROPERTY_SETTER;
private static final MethodHandle THROW_OPTIMISTIC_UNDEFINED;
static {
final Lookup lookup = new Lookup(MethodHandles.lookup());
- THROW_NO_SUCH_FUNCTION = lookup.findOwnStatic("throwNoSuchFunction", Object.class, Object.class, Object.class);
THROW_STRICT_PROPERTY_SETTER = lookup.findOwnStatic("throwStrictPropertySetter", void.class, Object.class, Object.class);
THROW_OPTIMISTIC_UNDEFINED = lookup.findOwnStatic("throwOptimisticUndefined", Object.class, int.class);
}
@@ -130,8 +128,6 @@
if (op != null) {
final String operand = NashornCallSiteDescriptor.getOperand(desc);
switch (op) {
- case CALL_METHOD:
- return adaptThrower(bindOperand(THROW_NO_SUCH_FUNCTION, operand), desc);
case GET_METHOD:
case GET_PROPERTY:
case GET_ELEMENT: {
@@ -172,11 +168,6 @@
}
@SuppressWarnings("unused")
- private static Object throwNoSuchFunction(final Object self, final Object name) {
- throw createTypeError(self, name, "no.such.function");
- }
-
- @SuppressWarnings("unused")
private static void throwStrictPropertySetter(final Object self, final Object name) {
throw createTypeError(self, name, "cant.set.property");
}
@@ -230,7 +221,6 @@
case NEW:
case CALL:
throw typeError("not.a.function", "null");
- case CALL_METHOD:
case GET_METHOD:
throw typeError("no.such.function", getArgument(linkRequest), "null");
case GET_PROPERTY: