< prev index next >
src/share/vm/classfile/javaClasses.cpp
Print this page
*** 2965,3015 ****
// Support for java_lang_invoke_CallSite
int java_lang_invoke_CallSite::_target_offset;
int java_lang_invoke_CallSite::_context_offset;
- int java_lang_invoke_CallSite::_default_context_offset;
void java_lang_invoke_CallSite::compute_offsets() {
Klass* k = SystemDictionary::CallSite_klass();
if (k != NULL) {
compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature());
! compute_offset(_context_offset, k, vmSymbols::context_name(), vmSymbols::sun_misc_Cleaner_signature());
! compute_offset(_default_context_offset, k,
! vmSymbols::DEFAULT_CONTEXT_name(), vmSymbols::sun_misc_Cleaner_signature(),
! /*is_static=*/true, /*allow_super=*/false);
}
}
! oop java_lang_invoke_CallSite::context_volatile(oop call_site) {
assert(java_lang_invoke_CallSite::is_instance(call_site), "");
! oop dep_oop = call_site->obj_field_volatile(_context_offset);
return dep_oop;
}
! void java_lang_invoke_CallSite::set_context_volatile(oop call_site, oop context) {
! assert(java_lang_invoke_CallSite::is_instance(call_site), "");
! call_site->obj_field_put_volatile(_context_offset, context);
}
! bool java_lang_invoke_CallSite::set_context_cas(oop call_site, oop context, oop expected) {
! assert(java_lang_invoke_CallSite::is_instance(call_site), "");
! HeapWord* context_addr = call_site->obj_field_addr<HeapWord>(_context_offset);
! oop res = oopDesc::atomic_compare_exchange_oop(context, context_addr, expected, true);
! bool success = (res == expected);
! if (success) {
! update_barrier_set((void*)context_addr, context);
! }
! return success;
}
! oop java_lang_invoke_CallSite::default_context() {
! InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::CallSite_klass());
! oop def_context_oop = ik->java_mirror()->obj_field(_default_context_offset);
! assert(!oopDesc::is_null(def_context_oop), "");
! return def_context_oop;
}
// Support for java_security_AccessControlContext
int java_security_AccessControlContext::_context_offset = 0;
--- 2965,3009 ----
// Support for java_lang_invoke_CallSite
int java_lang_invoke_CallSite::_target_offset;
int java_lang_invoke_CallSite::_context_offset;
void java_lang_invoke_CallSite::compute_offsets() {
Klass* k = SystemDictionary::CallSite_klass();
if (k != NULL) {
compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature());
! compute_offset(_context_offset, k, vmSymbols::context_name(), vmSymbols::java_lang_invoke_CallSite_Context_signature());
}
}
! oop java_lang_invoke_CallSite::context(oop call_site) {
assert(java_lang_invoke_CallSite::is_instance(call_site), "");
! oop dep_oop = call_site->obj_field(_context_offset);
return dep_oop;
}
! // Support for java_lang_invoke_CallSite_Context
!
! int java_lang_invoke_CallSite_Context::_dependencies_offset;
!
! void java_lang_invoke_CallSite_Context::compute_offsets() {
! Klass* k = SystemDictionary::Context_klass();
! if (k != NULL) {
! compute_offset(_dependencies_offset, k, vmSymbols::dependencies_name(), vmSymbols::long_signature());
! }
}
! nmethodBucket* java_lang_invoke_CallSite_Context::dependencies(oop call_site) {
! assert(java_lang_invoke_CallSite_Context::is_instance(call_site), "");
! return (nmethodBucket*) (address) call_site->long_field(_dependencies_offset);
}
! void java_lang_invoke_CallSite_Context::set_dependencies(oop call_site, nmethodBucket* context) {
! assert(java_lang_invoke_CallSite_Context::is_instance(call_site), "");
! call_site->long_field_put(_dependencies_offset, (jlong) (address) context);
}
// Support for java_security_AccessControlContext
int java_security_AccessControlContext::_context_offset = 0;
*** 3401,3410 ****
--- 3395,3405 ----
java_lang_invoke_DirectMethodHandle::compute_offsets();
java_lang_invoke_MemberName::compute_offsets();
java_lang_invoke_LambdaForm::compute_offsets();
java_lang_invoke_MethodType::compute_offsets();
java_lang_invoke_CallSite::compute_offsets();
+ java_lang_invoke_CallSite_Context::compute_offsets();
java_security_AccessControlContext::compute_offsets();
// Initialize reflection classes. The layouts of these classes
// changed with the new reflection implementation in JDK 1.4, and
// since the Universe doesn't know what JDK version it is until this
// point we defer computation of these offsets until now.
< prev index next >