comparison src/share/vm/graal/graalCompilerToVM.cpp @ 6442:45f682f7fea8

Add MetaAccessProvider.getResolvedJavaField to convert from reflection field to metadata field
author Christian Wimmer <christian.wimmer@oracle.com>
date Tue, 25 Sep 2012 09:23:45 -0700
parents d44835610b52
children 5a2c5d93f5c8
comparison
equal deleted inserted replaced
6441:460def61c04b 6442:45f682f7fea8
169 oop reflection_holder = java_lang_reflect_Method::clazz(reflection_method); 169 oop reflection_holder = java_lang_reflect_Method::clazz(reflection_method);
170 int slot = java_lang_reflect_Method::slot(reflection_method); 170 int slot = java_lang_reflect_Method::slot(reflection_method);
171 klassOop holder = java_lang_Class::as_klassOop(reflection_holder); 171 klassOop holder = java_lang_Class::as_klassOop(reflection_holder);
172 methodOop method = instanceKlass::cast(holder)->method_with_idnum(slot); 172 methodOop method = instanceKlass::cast(holder)->method_with_idnum(slot);
173 Handle ret = GraalCompiler::createHotSpotResolvedJavaMethod(method, CHECK_NULL); 173 Handle ret = GraalCompiler::createHotSpotResolvedJavaMethod(method, CHECK_NULL);
174 return JNIHandles::make_local(THREAD, ret());
175 }
176
177 C2V_VMENTRY(jobject, getJavaField, (JNIEnv *, jobject, jobject reflection_field_handle))
178 oop reflection_field = JNIHandles::resolve(reflection_field_handle);
179 oop reflection_holder = java_lang_reflect_Field::clazz(reflection_field);
180 int slot = java_lang_reflect_Field::slot(reflection_field);
181 instanceKlass* holder = instanceKlass::cast(java_lang_Class::as_klassOop(reflection_holder));
182
183 int offset = holder->field_offset(slot);
184 int flags = holder->field_access_flags(slot);
185 Symbol* field_name = holder->field_name(slot);
186 Handle field_holder = GraalCompiler::get_JavaTypeFromClass(reflection_holder, CHECK_NULL);
187 Handle field_type = GraalCompiler::get_JavaTypeFromClass(java_lang_reflect_Field::type(reflection_field), CHECK_NULL);
188
189 Handle ret = GraalCompiler::get_JavaField(offset, flags, field_name, field_holder, field_type, CHECK_NULL);
174 return JNIHandles::make_local(THREAD, ret()); 190 return JNIHandles::make_local(THREAD, ret());
175 } 191 }
176 192
177 C2V_VMENTRY(jobject, JavaMethod_uniqueConcreteMethod, (JNIEnv *, jobject, jobject hotspot_method)) 193 C2V_VMENTRY(jobject, JavaMethod_uniqueConcreteMethod, (JNIEnv *, jobject, jobject hotspot_method))
178 methodHandle method = getMethodFromHotSpotMethod(hotspot_method); 194 methodHandle method = getMethodFromHotSpotMethod(hotspot_method);
441 holder = GraalCompiler::get_JavaType(holder_klass, CHECK_NULL); 457 holder = GraalCompiler::get_JavaType(holder_klass, CHECK_NULL);
442 } 458 }
443 } 459 }
444 460
445 Handle type = GraalCompiler::get_JavaTypeFromSignature(cp, sig_index, cp->pool_holder(), CHECK_NULL); 461 Handle type = GraalCompiler::get_JavaTypeFromSignature(cp, sig_index, cp->pool_holder(), CHECK_NULL);
446 Handle field_handle = GraalCompiler::get_JavaField(offset, flags.as_int(), name, holder, type, code, THREAD); 462 Handle field_handle = GraalCompiler::get_JavaField(offset, flags.as_int(), name, holder, type, THREAD);
447 463
448 return JNIHandles::make_local(THREAD, field_handle()); 464 return JNIHandles::make_local(THREAD, field_handle());
449 C2V_END 465 C2V_END
450 466
451 C2V_VMENTRY(jobject, JavaType_resolveMethodImpl, (JNIEnv *, jobject, jobject resolved_type, jstring name, jstring signature)) 467 C2V_VMENTRY(jobject, JavaType_resolveMethodImpl, (JNIEnv *, jobject, jobject resolved_type, jstring name, jstring signature))
606 C2V_VMENTRY(jobject, getType, (JNIEnv *env, jobject, jobject javaClass)) 622 C2V_VMENTRY(jobject, getType, (JNIEnv *env, jobject, jobject javaClass))
607 oop javaClassOop = JNIHandles::resolve(javaClass); 623 oop javaClassOop = JNIHandles::resolve(javaClass);
608 if (javaClassOop == NULL) { 624 if (javaClassOop == NULL) {
609 fatal("argument to CompilerToVM.getType must not be NULL"); 625 fatal("argument to CompilerToVM.getType must not be NULL");
610 return NULL; 626 return NULL;
611 } else if (java_lang_Class::is_primitive(javaClassOop)) { 627 }
612 BasicType basicType = java_lang_Class::primitive_type(javaClassOop); 628 Handle type = GraalCompiler::get_JavaTypeFromClass(javaClassOop, CHECK_NULL);
613 return JNIHandles::make_local(THREAD, VMToCompiler::createPrimitiveJavaType((int) basicType, THREAD)); 629 return JNIHandles::make_local(THREAD, type());
614 } else {
615 KlassHandle klass = java_lang_Class::as_klassOop(javaClassOop);
616 Handle name = java_lang_String::create_from_symbol(klass->name(), CHECK_NULL);
617
618 Handle type = GraalCompiler::createHotSpotResolvedJavaType(klass, name, CHECK_NULL);
619 return JNIHandles::make_local(THREAD, type());
620 }
621 C2V_END 630 C2V_END
622 631
623 632
624 // helpers used to set fields in the HotSpotVMConfig object 633 // helpers used to set fields in the HotSpotVMConfig object
625 jfieldID getFieldID(JNIEnv* env, jobject obj, const char* name, const char* sig) { 634 jfieldID getFieldID(JNIEnv* env, jobject obj, const char* name, const char* sig) {
916 #define RESOLVED_METHOD "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod;" 925 #define RESOLVED_METHOD "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod;"
917 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" 926 #define REFLECT_METHOD "Ljava/lang/reflect/Method;"
918 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;" 927 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;"
919 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;" 928 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;"
920 #define RESOLVED_FIELD "Lcom/oracle/graal/api/meta/ResolvedJavaField;" 929 #define RESOLVED_FIELD "Lcom/oracle/graal/api/meta/ResolvedJavaField;"
930 #define REFLECT_FIELD "Ljava/lang/reflect/Field;"
921 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;" 931 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;"
922 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;" 932 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;"
923 #define HS_COMP_RESULT "Lcom/oracle/graal/hotspot/HotSpotCompilationResult;" 933 #define HS_COMP_RESULT "Lcom/oracle/graal/hotspot/HotSpotCompilationResult;"
924 #define CONFIG "Lcom/oracle/graal/hotspot/HotSpotVMConfig;" 934 #define CONFIG "Lcom/oracle/graal/hotspot/HotSpotVMConfig;"
925 #define HS_METHOD "Lcom/oracle/graal/hotspot/meta/HotSpotMethod;" 935 #define HS_METHOD "Lcom/oracle/graal/hotspot/meta/HotSpotMethod;"
967 {CC"JavaType_isInitialized", CC"("RESOLVED_TYPE")Z", FN_PTR(JavaType_isInitialized)}, 977 {CC"JavaType_isInitialized", CC"("RESOLVED_TYPE")Z", FN_PTR(JavaType_isInitialized)},
968 978
969 {CC"getPrimitiveArrayType", CC"("KIND")"TYPE, FN_PTR(getPrimitiveArrayType)}, 979 {CC"getPrimitiveArrayType", CC"("KIND")"TYPE, FN_PTR(getPrimitiveArrayType)},
970 {CC"getMaxCallTargetOffset", CC"("RUNTIME_CALL")J", FN_PTR(getMaxCallTargetOffset)}, 980 {CC"getMaxCallTargetOffset", CC"("RUNTIME_CALL")J", FN_PTR(getMaxCallTargetOffset)},
971 {CC"getType", CC"("CLASS")"TYPE, FN_PTR(getType)}, 981 {CC"getType", CC"("CLASS")"TYPE, FN_PTR(getType)},
972 {CC"getJavaMethod", CC"("REFLECT_METHOD")"METHOD, FN_PTR(getJavaMethod)}, 982 {CC"getJavaMethod", CC"("REFLECT_METHOD")"METHOD , FN_PTR(getJavaMethod)},
983 {CC"getJavaField", CC"("REFLECT_FIELD")"RESOLVED_FIELD, FN_PTR(getJavaField)},
973 {CC"initializeConfiguration", CC"("CONFIG")V", FN_PTR(initializeConfiguration)}, 984 {CC"initializeConfiguration", CC"("CONFIG")V", FN_PTR(initializeConfiguration)},
974 {CC"installMethod", CC"("HS_COMP_RESULT"Z"HS_CODE_INFO")"HS_COMP_METHOD, FN_PTR(installMethod)}, 985 {CC"installMethod", CC"("HS_COMP_RESULT"Z"HS_CODE_INFO")"HS_COMP_METHOD, FN_PTR(installMethod)},
975 {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)}, 986 {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)},
976 {CC"executeCompiledMethod", CC"("HS_COMP_METHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)}, 987 {CC"executeCompiledMethod", CC"("HS_COMP_METHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)},
977 {CC"executeCompiledMethodVarargs", CC"("HS_COMP_METHOD "["OBJECT")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, 988 {CC"executeCompiledMethodVarargs", CC"("HS_COMP_METHOD "["OBJECT")"OBJECT, FN_PTR(executeCompiledMethodVarargs)},