--- a/hotspot/src/share/vm/prims/methodHandles.cpp Thu Jun 02 13:36:11 2011 -0700
+++ b/hotspot/src/share/vm/prims/methodHandles.cpp Fri Jun 03 22:31:43 2011 -0700
@@ -160,8 +160,7 @@
};
// Adapters.
-MethodHandlesAdapterBlob* MethodHandles::_adapter_code = NULL;
-int MethodHandles::_adapter_code_size = StubRoutines::method_handles_adapters_code_size;
+MethodHandlesAdapterBlob* MethodHandles::_adapter_code = NULL;
jobject MethodHandles::_raise_exception_method;
@@ -200,12 +199,15 @@
ResourceMark rm;
TraceTime timer("MethodHandles adapters generation", TraceStartupTime);
- _adapter_code = MethodHandlesAdapterBlob::create(_adapter_code_size);
+ _adapter_code = MethodHandlesAdapterBlob::create(adapter_code_size);
if (_adapter_code == NULL)
- vm_exit_out_of_memory(_adapter_code_size, "CodeCache: no room for MethodHandles adapters");
+ vm_exit_out_of_memory(adapter_code_size, "CodeCache: no room for MethodHandles adapters");
CodeBuffer code(_adapter_code);
MethodHandlesAdapterGenerator g(&code);
g.generate();
+
+ // Transfer code comments
+ _adapter_code->set_comments(code.comments());
}
//------------------------------------------------------------------------------
@@ -1721,6 +1723,7 @@
void MethodHandles::verify_BoundMethodHandle(Handle mh, Handle target, int argnum,
bool direct_to_method, TRAPS) {
+ ResourceMark rm;
Handle ptype_handle(THREAD,
java_lang_invoke_MethodType::ptype(java_lang_invoke_MethodHandle::type(target()), argnum));
KlassHandle ptype_klass;
@@ -1884,6 +1887,7 @@
}
void MethodHandles::verify_AdapterMethodHandle(Handle mh, int argnum, TRAPS) {
+ ResourceMark rm;
jint conversion = java_lang_invoke_AdapterMethodHandle::conversion(mh());
int argslot = java_lang_invoke_AdapterMethodHandle::vmargslot(mh());
@@ -1987,7 +1991,7 @@
bool rotate_up = (src_slot > dest_slot); // upward rotation
int src_arg = argnum;
int dest_arg = argument_slot_to_argnum(dst_mtype(), dest_slot);
- verify_vmargslot(mh, dest_arg, dest_slot, CHECK);
+ verify_vmargslot(target, dest_arg, dest_slot, CHECK);
if (!(dest_slot >= src_slot + swap_size) &&
!(src_slot >= dest_slot + swap_size)) {
err = "source, destination slots must be distinct";
@@ -2563,7 +2567,7 @@
}
if (err != NULL) {
- throw_InternalError_for_bad_conversion(conversion, err, THREAD);
+ throw_InternalError_for_bad_conversion(conversion, err_msg("%s: conv_op %d ek_opt %d", err, conv_op, ek_opt), THREAD);
return;
}