comparison src/share/vm/graal/graalCompilerToVM.cpp @ 4484:14a00ee82980

Implement eager type resolving.
author Andreas Woess <andreas.woess@jku.at>
date Tue, 07 Feb 2012 21:15:58 +0100
parents f400f9554f09
children 3a309467fc8e 818757f088d3
comparison
equal deleted inserted replaced
4479:95802b2cec42 4484:14a00ee82980
238 TRACE_graal_3("CompilerToVM::RiMethod_hasCompiledCode"); 238 TRACE_graal_3("CompilerToVM::RiMethod_hasCompiledCode");
239 return getMethodFromHotSpotMethod(hotspot_method)->has_compiled_code(); 239 return getMethodFromHotSpotMethod(hotspot_method)->has_compiled_code();
240 } 240 }
241 241
242 // public RiType RiSignature_lookupType(String returnType, HotSpotTypeResolved accessingClass); 242 // public RiType RiSignature_lookupType(String returnType, HotSpotTypeResolved accessingClass);
243 JNIEXPORT jobject JNICALL Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_RiSignature_1lookupType(JNIEnv *env, jobject, jstring jname, jobject accessingClass) { 243 JNIEXPORT jobject JNICALL Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_RiSignature_1lookupType(JNIEnv *env, jobject, jstring jname, jobject accessingClass, jboolean eagerResolve) {
244 TRACE_graal_3("CompilerToVM::RiSignature_lookupType"); 244 TRACE_graal_3("CompilerToVM::RiSignature_lookupType");
245 VM_ENTRY_MARK; 245 VM_ENTRY_MARK;
246 ResourceMark rm; 246 ResourceMark rm;
247 247
248 Symbol* nameSymbol = VmIds::toSymbol(jname); 248 Symbol* nameSymbol = VmIds::toSymbol(jname);
273 Handle protectionDomain; 273 Handle protectionDomain;
274 if (JNIHandles::resolve(accessingClass) != NULL) { 274 if (JNIHandles::resolve(accessingClass) != NULL) {
275 classloader = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(accessingClass))->klass_part()->class_loader(); 275 classloader = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(accessingClass))->klass_part()->class_loader();
276 protectionDomain = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(accessingClass))->klass_part()->protection_domain(); 276 protectionDomain = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(accessingClass))->klass_part()->protection_domain();
277 } 277 }
278 resolved_type = SystemDictionary::resolve_or_null(nameSymbol, classloader, protectionDomain, THREAD); 278 if (eagerResolve) {
279 resolved_type = SystemDictionary::resolve_or_null(nameSymbol, classloader, protectionDomain, THREAD);
280 } else {
281 resolved_type = SystemDictionary::find(nameSymbol, classloader, protectionDomain, THREAD);
282 }
279 if (HAS_PENDING_EXCEPTION) { 283 if (HAS_PENDING_EXCEPTION) {
280 CLEAR_PENDING_EXCEPTION; 284 CLEAR_PENDING_EXCEPTION;
281 resolved_type = NULL; 285 resolved_type = NULL;
282 } 286 }
283 } 287 }
933 {CC"getRiMethod", CC"("REFLECT_METHOD")"METHOD, FN_PTR(getRiMethod)}, 937 {CC"getRiMethod", CC"("REFLECT_METHOD")"METHOD, FN_PTR(getRiMethod)},
934 {CC"RiMethod_methodData", CC"("RESOLVED_METHOD")"METHOD_DATA, FN_PTR(RiMethod_1methodData)}, 938 {CC"RiMethod_methodData", CC"("RESOLVED_METHOD")"METHOD_DATA, FN_PTR(RiMethod_1methodData)},
935 {CC"HotSpotMethodData_isMature", CC"("METHOD_DATA")Z", FN_PTR(HotSpotMethodData_1isMature)}, 939 {CC"HotSpotMethodData_isMature", CC"("METHOD_DATA")Z", FN_PTR(HotSpotMethodData_1isMature)},
936 {CC"RiMethod_invocationCount", CC"("RESOLVED_METHOD")I", FN_PTR(RiMethod_1invocationCount)}, 940 {CC"RiMethod_invocationCount", CC"("RESOLVED_METHOD")I", FN_PTR(RiMethod_1invocationCount)},
937 {CC"RiMethod_hasCompiledCode", CC"("RESOLVED_METHOD")Z", FN_PTR(RiMethod_1hasCompiledCode)}, 941 {CC"RiMethod_hasCompiledCode", CC"("RESOLVED_METHOD")Z", FN_PTR(RiMethod_1hasCompiledCode)},
938 {CC"RiSignature_lookupType", CC"("STRING RESOLVED_TYPE")"TYPE, FN_PTR(RiSignature_1lookupType)}, 942 {CC"RiSignature_lookupType", CC"("STRING RESOLVED_TYPE"Z)"TYPE, FN_PTR(RiSignature_1lookupType)},
939 {CC"RiConstantPool_lookupConstant", CC"("RESOLVED_TYPE"I)"OBJECT, FN_PTR(RiConstantPool_1lookupConstant)}, 943 {CC"RiConstantPool_lookupConstant", CC"("RESOLVED_TYPE"I)"OBJECT, FN_PTR(RiConstantPool_1lookupConstant)},
940 {CC"RiConstantPool_lookupMethod", CC"("RESOLVED_TYPE"IB)"METHOD, FN_PTR(RiConstantPool_1lookupMethod)}, 944 {CC"RiConstantPool_lookupMethod", CC"("RESOLVED_TYPE"IB)"METHOD, FN_PTR(RiConstantPool_1lookupMethod)},
941 {CC"RiConstantPool_lookupType", CC"("RESOLVED_TYPE"I)"TYPE, FN_PTR(RiConstantPool_1lookupType)}, 945 {CC"RiConstantPool_lookupType", CC"("RESOLVED_TYPE"I)"TYPE, FN_PTR(RiConstantPool_1lookupType)},
942 {CC"RiConstantPool_loadReferencedType", CC"("RESOLVED_TYPE"IB)V", FN_PTR(RiConstantPool_1loadReferencedType)}, 946 {CC"RiConstantPool_loadReferencedType", CC"("RESOLVED_TYPE"IB)V", FN_PTR(RiConstantPool_1loadReferencedType)},
943 {CC"RiConstantPool_lookupField", CC"("RESOLVED_TYPE"IB)"FIELD, FN_PTR(RiConstantPool_1lookupField)}, 947 {CC"RiConstantPool_lookupField", CC"("RESOLVED_TYPE"IB)"FIELD, FN_PTR(RiConstantPool_1lookupField)},