src/share/vm/prims/methodHandles.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/prims/methodHandles.cpp Thu Jun 2 14:57:21 2011
--- new/src/share/vm/prims/methodHandles.cpp Thu Jun 2 14:57:21 2011
*** 159,169 ****
--- 159,168 ----
NULL
};
// Adapters.
MethodHandlesAdapterBlob* MethodHandles::_adapter_code = NULL;
int MethodHandles::_adapter_code_size = StubRoutines::method_handles_adapters_code_size;
jobject MethodHandles::_raise_exception_method;
address MethodHandles::_adapter_return_handlers[CONV_TYPE_MASK+1];
*** 198,213 ****
--- 197,215 ----
assert(_adapter_code == NULL, "generate only once");
ResourceMark rm;
TraceTime timer("MethodHandles adapters generation", TraceStartupTime);
- _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");
CodeBuffer code(_adapter_code);
MethodHandlesAdapterGenerator g(&code);
g.generate();
+
+ // Transfer code comments
+ _adapter_code->set_comments(code.comments());
}
//------------------------------------------------------------------------------
// MethodHandlesAdapterGenerator::generate
//
*** 1719,1728 ****
--- 1721,1731 ----
java_lang_invoke_MethodHandle::set_vmentry(mh(), MethodHandles::entry(MethodHandles::_bound_ref_direct_mh));
}
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;
BasicType ptype = java_lang_Class::as_BasicType(ptype_handle(), &ptype_klass);
int slots_pushed = type2size[ptype];
*** 1882,1891 ****
--- 1885,1895 ----
jio_snprintf(msg, sizeof(msg), "bad adapter (conversion=0x%08x): %s", conversion, err);
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), msg);
}
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());
verify_vmargslot(mh, argnum, argslot, CHECK);
verify_vmslots(mh, CHECK);
*** 1985,1995 ****
--- 1989,1999 ----
int src_slot = argslot;
int dest_slot = vminfo;
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";
} else if (ek == _adapter_swap_args && !(src_slot > dest_slot)) {
err = "source of swap must be deeper in stack";
src/share/vm/prims/methodHandles.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File