equal
deleted
inserted
replaced
543 if (!uninitialized_static) { |
543 if (!uninitialized_static) { |
544 get_code = ((is_static) ? Bytecodes::_getstatic : Bytecodes::_getfield); |
544 get_code = ((is_static) ? Bytecodes::_getstatic : Bytecodes::_getfield); |
545 if (is_put || !info.access_flags().is_final()) { |
545 if (is_put || !info.access_flags().is_final()) { |
546 put_code = ((is_static) ? Bytecodes::_putstatic : Bytecodes::_putfield); |
546 put_code = ((is_static) ? Bytecodes::_putstatic : Bytecodes::_putfield); |
547 } |
547 } |
548 } |
|
549 |
|
550 if (is_put && !is_static && klass->is_subclass_of(SystemDictionary::CallSite_klass()) && (info.name() == vmSymbols::target_name())) { |
|
551 const jint direction = frame::interpreter_frame_expression_stack_direction(); |
|
552 Handle call_site (THREAD, *((oop*) thread->last_frame().interpreter_frame_tos_at(-1 * direction))); |
|
553 Handle method_handle(THREAD, *((oop*) thread->last_frame().interpreter_frame_tos_at( 0 * direction))); |
|
554 assert(call_site ->is_a(SystemDictionary::CallSite_klass()), "must be"); |
|
555 assert(method_handle->is_a(SystemDictionary::MethodHandle_klass()), "must be"); |
|
556 |
|
557 { |
|
558 // Walk all nmethods depending on this call site. |
|
559 MutexLocker mu(Compile_lock, thread); |
|
560 Universe::flush_dependents_on(call_site, method_handle); |
|
561 } |
|
562 |
|
563 // Don't allow fast path for setting CallSite.target and sub-classes. |
|
564 put_code = (Bytecodes::Code) 0; |
|
565 } |
548 } |
566 |
549 |
567 cache_entry(thread)->set_field( |
550 cache_entry(thread)->set_field( |
568 get_code, |
551 get_code, |
569 put_code, |
552 put_code, |