Mercurial > hg > truffle
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)}, |