# HG changeset patch # User twisti # Date 1387344327 28800 # Node ID ad187607b784c7ee65c4832923619461c3243148 # Parent 430c9f08728d9efa37f4311aa712e969f9e5e254 make CompilerToVM.resolveMethod return a metadata method instead of a Java type diff -r 430c9f08728d -r ad187607b784 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Tue Dec 17 19:09:29 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Tue Dec 17 21:25:27 2013 -0800 @@ -194,7 +194,7 @@ void initializeConfiguration(HotSpotVMConfig config); - JavaMethod resolveMethod(HotSpotResolvedObjectType klass, String name, String signature); + long resolveMethod(HotSpotResolvedObjectType klass, String name, String signature); HotSpotResolvedJavaField[] getInstanceFields(HotSpotResolvedObjectType klass); diff -r 430c9f08728d -r ad187607b784 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Tue Dec 17 19:09:29 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Tue Dec 17 21:25:27 2013 -0800 @@ -86,7 +86,7 @@ public native void initializeConfiguration(HotSpotVMConfig config); @Override - public native JavaMethod resolveMethod(HotSpotResolvedObjectType klass, String name, String signature); + public native long resolveMethod(HotSpotResolvedObjectType klass, String name, String signature); @Override public native boolean hasFinalizableSubclass(HotSpotResolvedObjectType klass); diff -r 430c9f08728d -r ad187607b784 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Tue Dec 17 19:09:29 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Tue Dec 17 21:25:27 2013 -0800 @@ -125,7 +125,7 @@ * * @param javaClass the Class to create the mirror for */ - public HotSpotResolvedObjectType(Class javaClass) { + private HotSpotResolvedObjectType(Class javaClass) { super(getSignatureName(javaClass)); this.javaClass = javaClass; assert getName().charAt(0) != '[' || isArray() : getName(); @@ -356,11 +356,15 @@ @Override public ResolvedJavaMethod resolveMethod(ResolvedJavaMethod method) { assert method instanceof HotSpotMethod; - ResolvedJavaMethod res = (ResolvedJavaMethod) runtime().getCompilerToVM().resolveMethod(this, method.getName(), ((HotSpotSignature) method.getSignature()).getMethodDescriptor()); - if (res == null || isAbstract(res.getModifiers())) { + final long resolvedMetaspaceMethod = runtime().getCompilerToVM().resolveMethod(this, method.getName(), ((HotSpotSignature) method.getSignature()).getMethodDescriptor()); + if (resolvedMetaspaceMethod == 0) { return null; } - return res; + HotSpotResolvedJavaMethod resolvedMethod = HotSpotResolvedJavaMethod.fromMetaspace(resolvedMetaspaceMethod); + if (isAbstract(resolvedMethod.getModifiers())) { + return null; + } + return resolvedMethod; } public ConstantPool constantPool() { diff -r 430c9f08728d -r ad187607b784 src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Tue Dec 17 19:09:29 2013 -0800 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Tue Dec 17 21:25:27 2013 -0800 @@ -373,22 +373,20 @@ return JNIHandles::make_local(THREAD, field_handle()); C2V_END -C2V_VMENTRY(jobject, resolveMethod, (JNIEnv *, jobject, jobject resolved_type, jstring name, jstring signature)) - +C2V_VMENTRY(jlong, resolveMethod, (JNIEnv *, jobject, jobject resolved_type, jstring name, jstring signature)) assert(JNIHandles::resolve(resolved_type) != NULL, ""); Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaClass(resolved_type)); Symbol* name_symbol = java_lang_String::as_symbol(JNIHandles::resolve(name), THREAD); Symbol* signature_symbol = java_lang_String::as_symbol(JNIHandles::resolve(signature), THREAD); - methodHandle method = klass->lookup_method(name_symbol, signature_symbol); - if (method.is_null()) { + Method* method = klass->lookup_method(name_symbol, signature_symbol); + if (method == NULL) { if (TraceGraal >= 3) { ResourceMark rm; tty->print_cr("Could not resolve method %s %s on klass %s", name_symbol->as_C_string(), signature_symbol->as_C_string(), klass->name()->as_C_string()); } - return NULL; + return 0; } - Handle holder = GraalCompiler::get_JavaType(method->method_holder(), CHECK_NULL); - return JNIHandles::make_local(THREAD, VMToCompiler::createResolvedJavaMethod(holder, method(), THREAD)); + return (jlong) (address) method; C2V_END C2V_VMENTRY(jboolean, hasFinalizableSubclass,(JNIEnv *, jobject, jobject hotspot_klass)) @@ -884,7 +882,7 @@ {CC"lookupTypeInPool", CC"("METASPACE_CONSTANT_POOL"I)"TYPE, FN_PTR(lookupTypeInPool)}, {CC"lookupReferencedTypeInPool", CC"("METASPACE_CONSTANT_POOL"IB)V", FN_PTR(lookupReferencedTypeInPool)}, {CC"lookupFieldInPool", CC"("METASPACE_CONSTANT_POOL"IB)"FIELD, FN_PTR(lookupFieldInPool)}, - {CC"resolveMethod", CC"("HS_RESOLVED_TYPE STRING STRING")"METHOD, FN_PTR(resolveMethod)}, + {CC"resolveMethod", CC"("HS_RESOLVED_TYPE STRING STRING")"METASPACE_METHOD, FN_PTR(resolveMethod)}, {CC"getInstanceFields", CC"("HS_RESOLVED_TYPE")["HS_RESOLVED_FIELD, FN_PTR(getInstanceFields)}, {CC"getClassInitializer", CC"("HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getClassInitializer)}, {CC"hasFinalizableSubclass", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(hasFinalizableSubclass)},