# HG changeset patch # User Doug Simon # Date 1354037420 -3600 # Node ID 5d4676ae84a45eb78c966148c478badbb923cb58 # Parent 014727292ae0ffd339370504cdebb1580c4746e9 removed usages of ResolvedJavaType.toJava() from bytecode interpreter diff -r 014727292ae0 -r 5d4676ae84a4 graal/com.oracle.graal.api.interpreter/src/com/oracle/graal/api/interpreter/RuntimeInterpreterInterface.java --- a/graal/com.oracle.graal.api.interpreter/src/com/oracle/graal/api/interpreter/RuntimeInterpreterInterface.java Tue Nov 27 18:03:49 2012 +0100 +++ b/graal/com.oracle.graal.api.interpreter/src/com/oracle/graal/api/interpreter/RuntimeInterpreterInterface.java Tue Nov 27 18:30:20 2012 +0100 @@ -100,4 +100,5 @@ void setArrayObject(Object value, long index, Object array); + Class getMirror(ResolvedJavaType type); } diff -r 014727292ae0 -r 5d4676ae84a4 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/MetaUtil.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/MetaUtil.java Tue Nov 27 18:03:49 2012 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/MetaUtil.java Tue Nov 27 18:30:20 2012 +0100 @@ -429,15 +429,6 @@ return result; } - public static Class< ? >[] signatureToTypes(Signature signature, ResolvedJavaType accessingClass) { - int count = signature.getParameterCount(false); - Class< ? >[] result = new Class< ? >[count]; - for (int i = 0; i < result.length; ++i) { - result[i] = signature.getParameterType(i, accessingClass).resolve(accessingClass).toJava(); - } - return result; - } - /** * Formats some profiling information associated as a string. * diff -r 014727292ae0 -r 5d4676ae84a4 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeInterpreterInterface.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeInterpreterInterface.java Tue Nov 27 18:03:49 2012 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeInterpreterInterface.java Tue Nov 27 18:30:20 2012 +0100 @@ -40,6 +40,10 @@ this.metaProvider = metaProvider; } + public Class< ? > getMirror(ResolvedJavaType type) { + return ((HotSpotJavaType) type).mirror(); + } + public native Object invoke(ResolvedJavaMethod method, Object... args); public void monitorEnter(Object value) { @@ -53,7 +57,7 @@ } public Object newObject(ResolvedJavaType type) throws InstantiationException { - return unsafe.allocateInstance(type.toJava()); + return unsafe.allocateInstance(getMirror(type)); } public Object getFieldObject(Object base, ResolvedJavaField field) { @@ -286,7 +290,7 @@ return; } ResolvedJavaType type = metaProvider.lookupJavaType(array.getClass()).getComponentType(); - if (!type.toJava().isAssignableFrom(arrayType)) { + if (!getMirror(type).isAssignableFrom(arrayType)) { throw new ArrayStoreException(arrayType.getName()); } } @@ -315,10 +319,10 @@ return ((HotSpotResolvedJavaField) field).offset(); } - private static Object resolveBase(Object base, ResolvedJavaField field) { + private Object resolveBase(Object base, ResolvedJavaField field) { Object accessorBase = base; if (accessorBase == null) { - accessorBase = field.getDeclaringClass().toJava(); + accessorBase = getMirror(field.getDeclaringClass()); } return accessorBase; } diff -r 014727292ae0 -r 5d4676ae84a4 graal/com.oracle.graal.interpreter/src/com/oracle/graal/interpreter/BytecodeInterpreter.java --- a/graal/com.oracle.graal.interpreter/src/com/oracle/graal/interpreter/BytecodeInterpreter.java Tue Nov 27 18:03:49 2012 +0100 +++ b/graal/com.oracle.graal.interpreter/src/com/oracle/graal/interpreter/BytecodeInterpreter.java Tue Nov 27 18:30:20 2012 +0100 @@ -89,7 +89,7 @@ @Override public Object invoke(InterpreterFrame caller, ResolvedJavaMethod method, Object[] arguments) throws Throwable { - setBackTrace(caller, (Throwable) arguments[0], createStackTraceElements(caller)); + setBackTrace(caller, (Throwable) arguments[0], createStackTraceElements(caller, runtimeInterface)); return null; } }); @@ -942,7 +942,7 @@ setStackTrace(frame, t, elements); setBackTrace(frame, t, null); } else { - setBackTrace(frame, t, createStackTraceElements(frame)); + setBackTrace(frame, t, createStackTraceElements(frame, runtimeInterface)); } } @@ -973,7 +973,7 @@ catchType = resolveType(frame, Bytecodes.INSTANCEOF, (char) handler.catchTypeCPI()); } - if (catchType == null || catchType.toJava().isInstance(t)) { + if (catchType == null || catchType.isInstance(Constant.forObject(t))) { // the first found exception handler is our exception handler return handler; } @@ -982,6 +982,10 @@ return null; } + private Class mirror(ResolvedJavaType type) { + return runtimeInterface.getMirror(type); + } + private InterpreterFrame allocateFrame(InterpreterFrame frame, BytecodeStream bs) { try { InterpreterFrame nextFrame = this.callFrame; @@ -1000,7 +1004,7 @@ traceOp(frame, "Method monitor enter"); } if (Modifier.isStatic(nextFrame.getMethod().getModifiers())) { - runtimeInterface.monitorEnter(nextFrame.getMethod().getDeclaringClass().toJava()); + runtimeInterface.monitorEnter(mirror(nextFrame.getMethod().getDeclaringClass())); } else { Object enterObject = nextFrame.getObject(frame.resolveLocalIndex(0)); assert enterObject != null; @@ -1022,7 +1026,7 @@ traceOp(frame, "Method monitor exit"); } if (Modifier.isStatic(frame.getMethod().getModifiers())) { - runtimeInterface.monitorExit(frame.getMethod().getDeclaringClass().toJava()); + runtimeInterface.monitorExit(mirror(frame.getMethod().getDeclaringClass())); } else { Object exitObject = frame.getObject(frame.resolveLocalIndex(0)); if (exitObject != null) { @@ -1181,7 +1185,7 @@ } private void checkCast(InterpreterFrame frame, char cpi) { - frame.pushObject(resolveType(frame, Bytecodes.CHECKCAST, cpi).toJava().cast(frame.popObject())); + frame.pushObject(mirror(resolveType(frame, Bytecodes.CHECKCAST, cpi)).cast(frame.popObject())); } private ResolvedJavaType resolveType(InterpreterFrame frame, int opcode, char cpi) { @@ -1236,7 +1240,7 @@ assert false : "unspecified case"; } } else if (constant instanceof JavaType) { - frame.pushObject(((JavaType) constant).resolve(method.getDeclaringClass()).toJava()); + frame.pushObject(mirror(((JavaType) constant).resolve(method.getDeclaringClass()))); } else { assert false : "unexpected case"; } @@ -1387,7 +1391,7 @@ for (int i = dimension - 1; i >= 0; i--) { dimensions[i] = frame.popInt(); } - return Array.newInstance(type.toJava(), dimensions); + return Array.newInstance(mirror(type), dimensions); } private ResolvedJavaType getLastDimensionType(ResolvedJavaType type) { @@ -1400,7 +1404,7 @@ private Object allocateArray(InterpreterFrame frame, char cpi) { ResolvedJavaType type = resolveType(frame, Bytecodes.ANEWARRAY, cpi); - return Array.newInstance(type.toJava(), frame.popInt()); + return Array.newInstance(runtimeInterface.getMirror(type), frame.popInt()); } private Object allocateNativeArray(InterpreterFrame frame, byte cpi) { @@ -1613,12 +1617,12 @@ } } - private static StackTraceElement[] createStackTraceElements(InterpreterFrame frame) { + private static StackTraceElement[] createStackTraceElements(InterpreterFrame frame, RuntimeInterpreterInterface runtimeInterface) { InterpreterFrame tmp = frame; List elements = new ArrayList<>(); boolean first = false; // filter only first stack elements while (tmp != null) { - if (first || !filterStackElement(tmp)) { + if (first || !filterStackElement(tmp, runtimeInterface)) { first = true; elements.add(tmp.getMethod().asStackTraceElement(tmp.getBCI())); } @@ -1627,8 +1631,8 @@ return elements.toArray(new StackTraceElement[elements.size()]); } - private static boolean filterStackElement(InterpreterFrame frame) { - return Throwable.class.isAssignableFrom(frame.getMethod().getDeclaringClass().toJava()); + private static boolean filterStackElement(InterpreterFrame frame, RuntimeInterpreterInterface runtimeInterface) { + return Throwable.class.isAssignableFrom(runtimeInterface.getMirror(frame.getMethod().getDeclaringClass())); } private ResolvedJavaField findThrowableField(InterpreterFrame frame, String name) { diff -r 014727292ae0 -r 5d4676ae84a4 graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetIntrinsificationPhase.java --- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetIntrinsificationPhase.java Tue Nov 27 18:03:49 2012 +0100 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetIntrinsificationPhase.java Tue Nov 27 18:30:20 2012 +0100 @@ -79,6 +79,15 @@ } } + public static Class< ? >[] signatureToTypes(Signature signature, ResolvedJavaType accessingClass) { + int count = signature.getParameterCount(false); + Class< ? >[] result = new Class< ? >[count]; + for (int i = 0; i < result.length; ++i) { + result[i] = signature.getParameterType(i, accessingClass).resolve(accessingClass).toJava(); + } + return result; + } + private void tryIntrinsify(Invoke invoke) { ResolvedJavaMethod target = invoke.methodCallTarget().targetMethod(); NodeIntrinsic intrinsic = target.getAnnotation(Node.NodeIntrinsic.class); @@ -87,7 +96,7 @@ assert target.getAnnotation(Fold.class) == null; assert Modifier.isNative(target.getModifiers()) : "node intrinsic " + target + " should be native"; - Class< ? >[] parameterTypes = MetaUtil.signatureToTypes(target.getSignature(), declaringClass); + Class< ? >[] parameterTypes = signatureToTypes(target.getSignature(), declaringClass); ResolvedJavaType returnType = target.getSignature().getReturnType(declaringClass).resolve(declaringClass); // Prepare the arguments for the reflective constructor call on the node class. @@ -104,7 +113,7 @@ // Clean up checkcast instructions inserted by javac if the return type is generic. cleanUpReturnCheckCast(newInstance); } else if (target.getAnnotation(Fold.class) != null) { - Class< ? >[] parameterTypes = MetaUtil.signatureToTypes(target.getSignature(), declaringClass); + Class< ? >[] parameterTypes = signatureToTypes(target.getSignature(), declaringClass); // Prepare the arguments for the reflective method call Object[] arguments = prepareArguments(invoke, parameterTypes, target, true);