Mercurial > hg > truffle
comparison src/share/vm/classfile/systemDictionary.cpp @ 1076:1920bd911283
Merge
author | acorn |
---|---|
date | Mon, 23 Nov 2009 16:24:35 -0500 |
parents | a75edfd400ea 389049f3f393 |
children | e66fd840cb6b |
comparison
equal
deleted
inserted
replaced
1075:a75edfd400ea | 1076:1920bd911283 |
---|---|
1985 } | 1985 } |
1986 WKID indy_group_start = WK_KLASS_ENUM_NAME(Linkage_klass); | 1986 WKID indy_group_start = WK_KLASS_ENUM_NAME(Linkage_klass); |
1987 WKID indy_group_end = WK_KLASS_ENUM_NAME(Dynamic_klass); | 1987 WKID indy_group_end = WK_KLASS_ENUM_NAME(Dynamic_klass); |
1988 initialize_wk_klasses_until(indy_group_start, scan, CHECK); | 1988 initialize_wk_klasses_until(indy_group_start, scan, CHECK); |
1989 if (EnableInvokeDynamic) { | 1989 if (EnableInvokeDynamic) { |
1990 initialize_wk_klasses_through(indy_group_start, scan, CHECK); | 1990 initialize_wk_klasses_through(indy_group_end, scan, CHECK); |
1991 } | 1991 } |
1992 if (_well_known_klasses[indy_group_start] == NULL) { | 1992 if (_well_known_klasses[indy_group_start] == NULL) { |
1993 // Skip the rest of the dynamic typing classes, if Linkage is not loaded. | 1993 // Skip the rest of the dynamic typing classes, if Linkage is not loaded. |
1994 scan = WKID(indy_group_end+1); | 1994 scan = WKID(indy_group_end+1); |
1995 } | 1995 } |
2416 int caller_bci, | 2416 int caller_bci, |
2417 symbolHandle name, | 2417 symbolHandle name, |
2418 methodHandle mh_invdyn, | 2418 methodHandle mh_invdyn, |
2419 TRAPS) { | 2419 TRAPS) { |
2420 Handle empty; | 2420 Handle empty; |
2421 // call sun.dyn.CallSiteImpl::makeSite(caller, name, mtype, cmid, cbci) | 2421 // call java.dyn.CallSite::makeSite(caller, name, mtype, cmid, cbci) |
2422 oop name_str_oop = StringTable::intern(name(), CHECK_(empty)); // not a handle! | 2422 oop name_str_oop = StringTable::intern(name(), CHECK_(empty)); // not a handle! |
2423 JavaCallArguments args(Handle(THREAD, caller->java_mirror())); | 2423 JavaCallArguments args(Handle(THREAD, caller->java_mirror())); |
2424 args.push_oop(name_str_oop); | 2424 args.push_oop(name_str_oop); |
2425 args.push_oop(mh_invdyn->method_handle_type()); | 2425 args.push_oop(mh_invdyn->method_handle_type()); |
2426 args.push_int(caller_method_idnum); | 2426 args.push_int(caller_method_idnum); |
2427 args.push_int(caller_bci); | 2427 args.push_int(caller_bci); |
2428 JavaValue result(T_OBJECT); | 2428 JavaValue result(T_OBJECT); |
2429 JavaCalls::call_static(&result, | 2429 JavaCalls::call_static(&result, |
2430 SystemDictionary::CallSiteImpl_klass(), | 2430 SystemDictionary::CallSite_klass(), |
2431 vmSymbols::makeSite_name(), vmSymbols::makeSite_signature(), | 2431 vmSymbols::makeSite_name(), vmSymbols::makeSite_signature(), |
2432 &args, CHECK_(empty)); | 2432 &args, CHECK_(empty)); |
2433 oop call_site_oop = (oop) result.get_jobject(); | 2433 oop call_site_oop = (oop) result.get_jobject(); |
2434 assert(call_site_oop->is_oop() | 2434 assert(call_site_oop->is_oop() |
2435 /*&& sun_dyn_CallSiteImpl::is_instance(call_site_oop)*/, "must be sane"); | 2435 /*&& java_dyn_CallSite::is_instance(call_site_oop)*/, "must be sane"); |
2436 sun_dyn_CallSiteImpl::set_vmmethod(call_site_oop, mh_invdyn()); | 2436 java_dyn_CallSite::set_vmmethod(call_site_oop, mh_invdyn()); |
2437 if (TraceMethodHandles) { | 2437 if (TraceMethodHandles) { |
2438 #ifndef PRODUCT | |
2438 tty->print_cr("Linked invokedynamic bci=%d site="INTPTR_FORMAT":", caller_bci, call_site_oop); | 2439 tty->print_cr("Linked invokedynamic bci=%d site="INTPTR_FORMAT":", caller_bci, call_site_oop); |
2439 call_site_oop->print(); | 2440 call_site_oop->print(); |
2440 tty->cr(); | 2441 tty->cr(); |
2442 #endif //PRODUCT | |
2441 } | 2443 } |
2442 return call_site_oop; | 2444 return call_site_oop; |
2443 } | 2445 } |
2444 | 2446 |
2445 Handle SystemDictionary::find_bootstrap_method(KlassHandle caller, | 2447 Handle SystemDictionary::find_bootstrap_method(KlassHandle caller, |
2448 Handle empty; | 2450 Handle empty; |
2449 if (!caller->oop_is_instance()) return empty; | 2451 if (!caller->oop_is_instance()) return empty; |
2450 | 2452 |
2451 instanceKlassHandle ik(THREAD, caller()); | 2453 instanceKlassHandle ik(THREAD, caller()); |
2452 | 2454 |
2453 if (ik->bootstrap_method() != NULL) { | 2455 oop boot_method_oop = ik->bootstrap_method(); |
2454 return Handle(THREAD, ik->bootstrap_method()); | 2456 if (boot_method_oop != NULL) { |
2455 } | 2457 if (TraceMethodHandles) { |
2458 tty->print_cr("bootstrap method for "PTR_FORMAT" cached as "PTR_FORMAT":", ik(), boot_method_oop); | |
2459 } | |
2460 NOT_PRODUCT(if (!boot_method_oop->is_oop()) { tty->print_cr("*** boot MH of "PTR_FORMAT" = "PTR_FORMAT, ik(), boot_method_oop); ik()->print(); }); | |
2461 assert(boot_method_oop->is_oop() | |
2462 && java_dyn_MethodHandle::is_instance(boot_method_oop), "must be sane"); | |
2463 return Handle(THREAD, boot_method_oop); | |
2464 } | |
2465 boot_method_oop = NULL; // GC safety | |
2456 | 2466 |
2457 // call java.dyn.Linkage::findBootstrapMethod(caller, sbk) | 2467 // call java.dyn.Linkage::findBootstrapMethod(caller, sbk) |
2458 JavaCallArguments args(Handle(THREAD, ik->java_mirror())); | 2468 JavaCallArguments args(Handle(THREAD, ik->java_mirror())); |
2459 if (search_bootstrap_klass.is_null()) | 2469 if (search_bootstrap_klass.is_null()) |
2460 args.push_oop(Handle()); | 2470 args.push_oop(Handle()); |
2464 JavaCalls::call_static(&result, | 2474 JavaCalls::call_static(&result, |
2465 SystemDictionary::Linkage_klass(), | 2475 SystemDictionary::Linkage_klass(), |
2466 vmSymbols::findBootstrapMethod_name(), | 2476 vmSymbols::findBootstrapMethod_name(), |
2467 vmSymbols::findBootstrapMethod_signature(), | 2477 vmSymbols::findBootstrapMethod_signature(), |
2468 &args, CHECK_(empty)); | 2478 &args, CHECK_(empty)); |
2469 oop boot_method_oop = (oop) result.get_jobject(); | 2479 boot_method_oop = (oop) result.get_jobject(); |
2470 | 2480 |
2471 if (boot_method_oop != NULL) { | 2481 if (boot_method_oop != NULL) { |
2482 if (TraceMethodHandles) { | |
2483 #ifndef PRODUCT | |
2484 tty->print_cr("--------"); | |
2485 tty->print_cr("bootstrap method for "PTR_FORMAT" computed as "PTR_FORMAT":", ik(), boot_method_oop); | |
2486 ik()->print(); | |
2487 boot_method_oop->print(); | |
2488 tty->print_cr("========"); | |
2489 #endif //PRODUCT | |
2490 } | |
2472 assert(boot_method_oop->is_oop() | 2491 assert(boot_method_oop->is_oop() |
2473 && java_dyn_MethodHandle::is_instance(boot_method_oop), "must be sane"); | 2492 && java_dyn_MethodHandle::is_instance(boot_method_oop), "must be sane"); |
2474 // probably no race conditions, but let's be careful: | 2493 // probably no race conditions, but let's be careful: |
2475 if (Atomic::cmpxchg_ptr(boot_method_oop, ik->adr_bootstrap_method(), NULL) == NULL) | 2494 if (Atomic::cmpxchg_ptr(boot_method_oop, ik->adr_bootstrap_method(), NULL) == NULL) |
2476 ik->set_bootstrap_method(boot_method_oop); | 2495 ik->set_bootstrap_method(boot_method_oop); |
2477 else | 2496 else |
2478 boot_method_oop = ik->bootstrap_method(); | 2497 boot_method_oop = ik->bootstrap_method(); |
2479 } else { | 2498 } else { |
2499 if (TraceMethodHandles) { | |
2500 #ifndef PRODUCT | |
2501 tty->print_cr("--------"); | |
2502 tty->print_cr("bootstrap method for "PTR_FORMAT" computed as NULL:", ik()); | |
2503 ik()->print(); | |
2504 tty->print_cr("========"); | |
2505 #endif //PRODUCT | |
2506 } | |
2480 boot_method_oop = ik->bootstrap_method(); | 2507 boot_method_oop = ik->bootstrap_method(); |
2481 } | 2508 } |
2482 | 2509 |
2483 return Handle(THREAD, boot_method_oop); | 2510 return Handle(THREAD, boot_method_oop); |
2484 } | 2511 } |