< prev index next >

src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java

Print this page
rev 12327 : 8062543: Replace uses of MethodHandleImpl.castReference with Class.cast

*** 1,7 **** /* ! * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 216,226 **** for (int i = 0; i < convSpecs.length-1; i++) { Object convSpec = convSpecs[i]; if (convSpec == null) continue; MethodHandle fn; if (convSpec instanceof Class) { ! fn = Lazy.MH_castReference.bindTo(convSpec); } else { fn = (MethodHandle) convSpec; } Class<?> newType = basicSrcType.parameterType(i); if (--convCount == 0) --- 216,226 ---- for (int i = 0; i < convSpecs.length-1; i++) { Object convSpec = convSpecs[i]; if (convSpec == null) continue; MethodHandle fn; if (convSpec instanceof Class) { ! fn = Lazy.MH_cast.bindTo(convSpec); } else { fn = (MethodHandle) convSpec; } Class<?> newType = basicSrcType.parameterType(i); if (--convCount == 0)
*** 236,246 **** MethodHandle fn; if (convSpec instanceof Class) { if (convSpec == void.class) fn = null; else ! fn = Lazy.MH_castReference.bindTo(convSpec); } else { fn = (MethodHandle) convSpec; } Class<?> newType = basicSrcType.returnType(); assert(--convCount == 0); --- 236,246 ---- MethodHandle fn; if (convSpec instanceof Class) { if (convSpec == void.class) fn = null; else ! fn = Lazy.MH_cast.bindTo(convSpec); } else { fn = (MethodHandle) convSpec; } Class<?> newType = basicSrcType.returnType(); assert(--convCount == 0);
*** 299,309 **** } Name conv; if (convSpec instanceof Class) { Class<?> convClass = (Class<?>) convSpec; ! conv = new Name(Lazy.MH_castReference, convClass, names[INARG_BASE + i]); } else { MethodHandle fn = (MethodHandle) convSpec; conv = new Name(fn, names[INARG_BASE + i]); } assert(names[nameCursor] == null); --- 299,309 ---- } Name conv; if (convSpec instanceof Class) { Class<?> convClass = (Class<?>) convSpec; ! conv = new Name(Lazy.MH_cast, convClass, names[INARG_BASE + i]); } else { MethodHandle fn = (MethodHandle) convSpec; conv = new Name(fn, names[INARG_BASE + i]); } assert(names[nameCursor] == null);
*** 323,333 **** Name conv; if (convSpec == void.class) { conv = new Name(LambdaForm.constantZero(BasicType.basicType(srcType.returnType()))); } else if (convSpec instanceof Class) { Class<?> convClass = (Class<?>) convSpec; ! conv = new Name(Lazy.MH_castReference, convClass, names[OUT_CALL]); } else { MethodHandle fn = (MethodHandle) convSpec; if (fn.type().parameterCount() == 0) conv = new Name(fn); // don't pass retval to void conversion else --- 323,333 ---- Name conv; if (convSpec == void.class) { conv = new Name(LambdaForm.constantZero(BasicType.basicType(srcType.returnType()))); } else if (convSpec instanceof Class) { Class<?> convClass = (Class<?>) convSpec; ! conv = new Name(Lazy.MH_cast, convClass, names[OUT_CALL]); } else { MethodHandle fn = (MethodHandle) convSpec; if (fn.type().parameterCount() == 0) conv = new Name(fn); // don't pass retval to void conversion else
*** 340,368 **** LambdaForm form = new LambdaForm("convert", lambdaType.parameterCount(), names, RESULT); return SimpleMethodHandle.make(srcType, form); } - /** - * Identity function, with reference cast. - * @param t an arbitrary reference type - * @param x an arbitrary reference value - * @return the same value x - */ - @ForceInline - @SuppressWarnings("unchecked") - static <T,U> T castReference(Class<? extends T> t, U x) { - // inlined Class.cast because we can't ForceInline it - if (x != null && !t.isInstance(x)) - throw newClassCastException(t, x); - return (T) x; - } - - private static ClassCastException newClassCastException(Class<?> t, Object obj) { - return new ClassCastException("Cannot cast " + obj.getClass().getName() + " to " + t.getName()); - } - static Object[] computeValueConversions(MethodType srcType, MethodType dstType, boolean strict, boolean monobox) { final int INARG_COUNT = srcType.parameterCount(); Object[] convSpecs = new Object[INARG_COUNT+1]; for (int i = 0; i <= INARG_COUNT; i++) { --- 340,349 ----
*** 588,607 **** * Pre-initialized NamedFunctions for bootstrapping purposes. * Factored in an inner class to delay initialization until first usage. */ static class Lazy { private static final Class<?> MHI = MethodHandleImpl.class; private static final MethodHandle[] ARRAYS; private static final MethodHandle[] FILL_ARRAYS; static final NamedFunction NF_checkSpreadArgument; static final NamedFunction NF_guardWithCatch; static final NamedFunction NF_throwException; static final NamedFunction NF_profileBoolean; ! static final MethodHandle MH_castReference; static final MethodHandle MH_selectAlternative; static final MethodHandle MH_copyAsPrimitiveArray; static final MethodHandle MH_fillNewTypedArray; static final MethodHandle MH_fillNewArray; static final MethodHandle MH_arrayIdentity; --- 569,589 ---- * Pre-initialized NamedFunctions for bootstrapping purposes. * Factored in an inner class to delay initialization until first usage. */ static class Lazy { private static final Class<?> MHI = MethodHandleImpl.class; + private static final Class<?> CLS = Class.class; private static final MethodHandle[] ARRAYS; private static final MethodHandle[] FILL_ARRAYS; static final NamedFunction NF_checkSpreadArgument; static final NamedFunction NF_guardWithCatch; static final NamedFunction NF_throwException; static final NamedFunction NF_profileBoolean; ! static final MethodHandle MH_cast; static final MethodHandle MH_selectAlternative; static final MethodHandle MH_copyAsPrimitiveArray; static final MethodHandle MH_fillNewTypedArray; static final MethodHandle MH_fillNewArray; static final MethodHandle MH_arrayIdentity;
*** 620,631 **** NF_checkSpreadArgument.resolve(); NF_guardWithCatch.resolve(); NF_throwException.resolve(); NF_profileBoolean.resolve(); ! MH_castReference = IMPL_LOOKUP.findStatic(MHI, "castReference", ! MethodType.methodType(Object.class, Class.class, Object.class)); MH_copyAsPrimitiveArray = IMPL_LOOKUP.findStatic(MHI, "copyAsPrimitiveArray", MethodType.methodType(Object.class, Wrapper.class, Object[].class)); MH_arrayIdentity = IMPL_LOOKUP.findStatic(MHI, "identity", MethodType.methodType(Object[].class, Object[].class)); MH_fillNewArray = IMPL_LOOKUP.findStatic(MHI, "fillNewArray", --- 602,613 ---- NF_checkSpreadArgument.resolve(); NF_guardWithCatch.resolve(); NF_throwException.resolve(); NF_profileBoolean.resolve(); ! MH_cast = IMPL_LOOKUP.findVirtual(CLS, "cast", ! MethodType.methodType(Object.class, Object.class)); MH_copyAsPrimitiveArray = IMPL_LOOKUP.findStatic(MHI, "copyAsPrimitiveArray", MethodType.methodType(Object.class, Wrapper.class, Object[].class)); MH_arrayIdentity = IMPL_LOOKUP.findStatic(MHI, "identity", MethodType.methodType(Object[].class, Object[].class)); MH_fillNewArray = IMPL_LOOKUP.findStatic(MHI, "fillNewArray",
< prev index next >