Mercurial > hg > truffle
comparison src/share/vm/graal/graalCompilerToVM.cpp @ 7786:8bbbde9d0a52
extended ResolvedJavaMethod API by getLocalVariableTable
author | Matthias Grimmer <grimmer@ssw.jku.at> |
---|---|
date | Wed, 13 Feb 2013 13:34:05 +0100 |
parents | 016e23829147 |
children | 5aa05e6f9dee 225c984588ee |
comparison
equal
deleted
inserted
replaced
7785:f180d2a1c3a4 | 7786:8bbbde9d0a52 |
---|---|
990 } | 990 } |
991 | 991 |
992 return result; | 992 return result; |
993 C2V_END | 993 C2V_END |
994 | 994 |
995 C2V_VMENTRY(jobject, getLocalVariableTable, (JNIEnv *, jobject, jobject hotspot_method)) | |
996 ResourceMark rm; | |
997 | |
998 Method* method = getMethodFromHotSpotMethod(JNIHandles::resolve(hotspot_method)); | |
999 if(!method->has_localvariable_table()) { | |
1000 return NULL; | |
1001 } | |
1002 int localvariable_table_length = method->localvariable_table_length(); | |
1003 | |
1004 objArrayHandle local_array = oopFactory::new_objArray(SystemDictionary::LocalImpl_klass(), localvariable_table_length, CHECK_NULL); | |
1005 LocalVariableTableElement* table = method->localvariable_table_start(); | |
1006 for (int i = 0; i < localvariable_table_length; i++) { | |
1007 u2 start_bci = table[i].start_bci; | |
1008 u4 end_bci = (u4)(start_bci + table[i].length); | |
1009 u2 nameCPIdx = table[i].name_cp_index; | |
1010 u2 typeCPIdx = table[i].descriptor_cp_index; | |
1011 u2 slot = table[i].slot; | |
1012 | |
1013 char* name = method->constants()->string_at_noresolve(nameCPIdx); | |
1014 Handle nameHandle = java_lang_String::create_from_str(name, CHECK_NULL); | |
1015 | |
1016 char* typeInfo = method->constants()->string_at_noresolve(typeCPIdx); | |
1017 Handle typeHandle = java_lang_String::create_from_str(typeInfo, CHECK_NULL); | |
1018 | |
1019 Handle holderHandle = GraalCompiler::createHotSpotResolvedObjectType(method, CHECK_0); | |
1020 Handle local = VMToCompiler::createLocal(nameHandle, typeHandle, (int) start_bci, (int) end_bci, (int) slot, holderHandle, Thread::current()); | |
1021 local_array->obj_at_put(i, local()); | |
1022 } | |
1023 | |
1024 return JNIHandles::make_local(local_array()); | |
1025 C2V_END | |
1026 | |
995 | 1027 |
996 C2V_VMENTRY(jobject, getFileName, (JNIEnv *, jobject, jobject klass)) | 1028 C2V_VMENTRY(jobject, getFileName, (JNIEnv *, jobject, jobject klass)) |
997 ResourceMark rm; | 1029 ResourceMark rm; |
998 InstanceKlass* k = (InstanceKlass*) asKlass(HotSpotResolvedObjectType::metaspaceKlass(klass)); | 1030 InstanceKlass* k = (InstanceKlass*) asKlass(HotSpotResolvedObjectType::metaspaceKlass(klass)); |
999 Symbol *s = k->source_file_name(); | 1031 Symbol *s = k->source_file_name(); |
1014 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;" | 1046 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;" |
1015 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;" | 1047 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;" |
1016 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;" | 1048 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;" |
1017 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;" | 1049 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;" |
1018 #define KIND "Lcom/oracle/graal/api/meta/Kind;" | 1050 #define KIND "Lcom/oracle/graal/api/meta/Kind;" |
1051 #define LOCAL "Lcom/oracle/graal/api/meta/Local;" | |
1019 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;" | 1052 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;" |
1020 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;" | 1053 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;" |
1021 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" | 1054 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" |
1022 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;" | 1055 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;" |
1023 #define REFLECT_FIELD "Ljava/lang/reflect/Field;" | 1056 #define REFLECT_FIELD "Ljava/lang/reflect/Field;" |
1075 {CC"executeCompiledMethod", CC"("METASPACE_METHOD NMETHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)}, | 1108 {CC"executeCompiledMethod", CC"("METASPACE_METHOD NMETHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)}, |
1076 {CC"executeCompiledMethodVarargs", CC"("METASPACE_METHOD NMETHOD "["OBJECT")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, | 1109 {CC"executeCompiledMethodVarargs", CC"("METASPACE_METHOD NMETHOD "["OBJECT")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, |
1077 {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)}, | 1110 {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)}, |
1078 {CC"decodePC", CC"(J)"STRING, FN_PTR(decodePC)}, | 1111 {CC"decodePC", CC"(J)"STRING, FN_PTR(decodePC)}, |
1079 {CC"getLineNumberTable", CC"("HS_RESOLVED_METHOD")[J", FN_PTR(getLineNumberTable)}, | 1112 {CC"getLineNumberTable", CC"("HS_RESOLVED_METHOD")[J", FN_PTR(getLineNumberTable)}, |
1113 {CC"getLocalVariableTable", CC"("HS_RESOLVED_METHOD")["LOCAL, FN_PTR(getLocalVariableTable)}, | |
1080 {CC"getFileName", CC"("HS_RESOLVED_JAVA_TYPE")"STRING, FN_PTR(getFileName)}, | 1114 {CC"getFileName", CC"("HS_RESOLVED_JAVA_TYPE")"STRING, FN_PTR(getFileName)}, |
1081 }; | 1115 }; |
1082 | 1116 |
1083 int CompilerToVM_methods_count() { | 1117 int CompilerToVM_methods_count() { |
1084 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); | 1118 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); |