Mercurial > hg > release > icedtea7-forest-2.6 > jdk
changeset 5951:e012aace9050 jdk7u14-b10
Merge
author | amurillo |
---|---|
date | Tue, 15 Jan 2013 16:12:44 -0800 |
parents | 71e81b2e6383 (current diff) dc837ec825dc (diff) |
children | b27c16f81b65 1e05556dce1c |
files | |
diffstat | 4 files changed, 23 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Mon Jan 14 10:34:29 2013 -0800 +++ b/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Tue Jan 15 16:12:44 2013 -0800 @@ -295,9 +295,6 @@ String invokerDesc = invokerType.toMethodDescriptorString(); mv = cw.visitMethod(Opcodes.ACC_STATIC, invokerName, invokerDesc, null, null); - - // Force inlining of this invoker method. - mv.visitAnnotation("Ljava/lang/invoke/ForceInline;", true); } /** @@ -524,6 +521,9 @@ // Mark this method as a compiled LambdaForm mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Compiled;", true); + // Force inlining of this invoker method. + mv.visitAnnotation("Ljava/lang/invoke/ForceInline;", true); + // iterate over the form's names, generating bytecode instructions for each // start iterating at the first name following the arguments for (int i = lambdaForm.arity; i < lambdaForm.names.length; i++) { @@ -943,6 +943,9 @@ // Suppress this method in backtraces displayed to the user. mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true); + // Don't inline the interpreter entry. + mv.visitAnnotation("Ljava/lang/invoke/DontInline;", true); + // create parameter array emitIconstInsn(invokerType.parameterCount()); mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object"); @@ -1005,6 +1008,9 @@ // Suppress this method in backtraces displayed to the user. mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true); + // Force inlining of this invoker method. + mv.visitAnnotation("Ljava/lang/invoke/ForceInline;", true); + // Load receiver emitAloadInsn(0);
--- a/src/share/classes/java/lang/invoke/LambdaForm.java Mon Jan 14 10:34:29 2013 -0800 +++ b/src/share/classes/java/lang/invoke/LambdaForm.java Tue Jan 15 16:12:44 2013 -0800 @@ -592,6 +592,7 @@ private int invocationCounter = 0; @Hidden + @DontInline /** Interpretively invoke this form on the given arguments. */ Object interpretWithArguments(Object... argumentValues) throws Throwable { if (TRACE_INTERPRETER) @@ -606,6 +607,7 @@ } @Hidden + @DontInline /** Evaluate a single Name within this form, applying its function to its arguments. */ Object interpretName(Name name, Object[] values) throws Throwable { if (TRACE_INTERPRETER)
--- a/src/share/classes/java/lang/invoke/MethodHandleImpl.java Mon Jan 14 10:34:29 2013 -0800 +++ b/src/share/classes/java/lang/invoke/MethodHandleImpl.java Tue Jan 15 16:12:44 2013 -0800 @@ -311,9 +311,9 @@ } static class AsVarargsCollector extends MethodHandle { - MethodHandle target; - final Class<?> arrayType; - MethodHandle cache; + private final MethodHandle target; + private final Class<?> arrayType; + private MethodHandle cache; AsVarargsCollector(MethodHandle target, MethodType type, Class<?> arrayType) { super(type, reinvokerForm(type));
--- a/src/share/classes/sun/invoke/util/ValueConversions.java Mon Jan 14 10:34:29 2013 -0800 +++ b/src/share/classes/sun/invoke/util/ValueConversions.java Tue Jan 15 16:12:44 2013 -0800 @@ -449,8 +449,16 @@ * @param x an arbitrary reference value * @return the same value x */ + @SuppressWarnings("unchecked") static <T,U> T castReference(Class<? extends T> t, U x) { - return t.cast(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()); } private static final MethodHandle IDENTITY, CAST_REFERENCE, ZERO_OBJECT, IGNORE, EMPTY,