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