Mercurial > hg > truffle
diff src/share/vm/classfile/javaClasses.cpp @ 726:be93aad57795
6655646: dynamic languages need dynamically linked call sites
Summary: invokedynamic instruction (JSR 292 RI)
Reviewed-by: twisti, never
author | jrose |
---|---|
date | Tue, 21 Apr 2009 23:21:04 -0700 |
parents | e5b0439ef4ae |
children | 9987d9d5eb0e |
line wrap: on
line diff
--- a/src/share/vm/classfile/javaClasses.cpp Mon Apr 20 14:48:03 2009 -0700 +++ b/src/share/vm/classfile/javaClasses.cpp Tue Apr 21 23:21:04 2009 -0700 @@ -2430,6 +2430,41 @@ } +// Support for sun_dyn_CallSiteImpl + +int sun_dyn_CallSiteImpl::_type_offset; +int sun_dyn_CallSiteImpl::_target_offset; +int sun_dyn_CallSiteImpl::_vmmethod_offset; + +void sun_dyn_CallSiteImpl::compute_offsets() { + if (!EnableInvokeDynamic) return; + klassOop k = SystemDictionary::CallSiteImpl_klass(); + if (k != NULL) { + compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_dyn_MethodType_signature(), true); + compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_dyn_MethodHandle_signature(), true); + compute_offset(_vmmethod_offset, k, vmSymbols::vmmethod_name(), vmSymbols::object_signature(), true); + } +} + +oop sun_dyn_CallSiteImpl::type(oop site) { + return site->obj_field(_type_offset); +} + +oop sun_dyn_CallSiteImpl::target(oop site) { + return site->obj_field(_target_offset); +} + +void sun_dyn_CallSiteImpl::set_target(oop site, oop target) { + site->obj_field_put(_target_offset, target); +} + +oop sun_dyn_CallSiteImpl::vmmethod(oop site) { + return site->obj_field(_vmmethod_offset); +} + +void sun_dyn_CallSiteImpl::set_vmmethod(oop site, oop ref) { + site->obj_field_put(_vmmethod_offset, ref); +} // Support for java_security_AccessControlContext @@ -2775,6 +2810,9 @@ java_dyn_MethodType::compute_offsets(); java_dyn_MethodTypeForm::compute_offsets(); } + if (EnableInvokeDynamic) { + sun_dyn_CallSiteImpl::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