< prev index next >

src/share/vm/runtime/sharedRuntime.cpp

Print this page

        

*** 2717,2737 **** sig_extended.push(SigEntry(T_OBJECT)); } } for (SignatureStream ss(method->signature()); !ss.at_return_type(); ss.next()) { if (ValueTypePassFieldsAsArgs && ss.type() == T_VALUETYPE) { ! Klass* k = ss.as_klass(Handle(THREAD, holder->class_loader()), ! Handle(THREAD, holder->protection_domain()), ! SignatureStream::ReturnNull, THREAD); ! assert(k != NULL && !HAS_PENDING_EXCEPTION, "can resolve klass?"); ! ValueKlass* vk = ValueKlass::cast(k); ! if (vk == SystemDictionary::___Value_klass()) { assert(method->is_compiled_lambda_form() || method->is_method_handle_intrinsic(), "should not use __Value for a value type argument"); sig_extended.push(SigEntry(T_OBJECT)); } else { ! const Array<SigEntry>* sig_vk = vk->extended_sig(); sig_extended.appendAll(sig_vk); } } else { sig_extended.push(SigEntry(ss.type())); if (ss.type() == T_LONG || ss.type() == T_DOUBLE) { --- 2717,2741 ---- sig_extended.push(SigEntry(T_OBJECT)); } } for (SignatureStream ss(method->signature()); !ss.at_return_type(); ss.next()) { if (ValueTypePassFieldsAsArgs && ss.type() == T_VALUETYPE) { ! Symbol* name = ss.as_symbol_or_null(); ! assert(name != NULL, "should not be null"); ! if (name == vmSymbols::java_lang____Value()) { assert(method->is_compiled_lambda_form() || method->is_method_handle_intrinsic(), "should not use __Value for a value type argument"); sig_extended.push(SigEntry(T_OBJECT)); } else { ! // Method handle intrinsics with a __Value argument may be created during ! // compilation. Only do a full system dictionary lookup if the argument name ! // is not __Value, to avoid lookups from the compiler thread. ! Klass* k = ss.as_klass(Handle(THREAD, holder->class_loader()), ! Handle(THREAD, holder->protection_domain()), ! SignatureStream::ReturnNull, THREAD); ! assert(k != NULL && !HAS_PENDING_EXCEPTION, "can resolve klass?"); ! const Array<SigEntry>* sig_vk = ValueKlass::cast(k)->extended_sig(); sig_extended.appendAll(sig_vk); } } else { sig_extended.push(SigEntry(ss.type())); if (ss.type() == T_LONG || ss.type() == T_DOUBLE) {
< prev index next >