< prev index next >

src/hotspot/share/prims/methodHandles.cpp

Print this page

        

*** 535,545 **** bool MethodHandles::is_basic_type_signature(Symbol* sig) { assert(vmSymbols::object_signature()->utf8_length() == (int)OBJ_SIG_LEN, ""); assert(vmSymbols::object_signature()->equals(OBJ_SIG), ""); const int len = sig->utf8_length(); for (int i = 0; i < len; i++) { ! switch (sig->byte_at(i)) { case 'L': // only java/lang/Object is valid here if (sig->index_of_at(i, OBJ_SIG, OBJ_SIG_LEN) != i) return false; i += OBJ_SIG_LEN-1; //-1 because of i++ in loop --- 535,545 ---- bool MethodHandles::is_basic_type_signature(Symbol* sig) { assert(vmSymbols::object_signature()->utf8_length() == (int)OBJ_SIG_LEN, ""); assert(vmSymbols::object_signature()->equals(OBJ_SIG), ""); const int len = sig->utf8_length(); for (int i = 0; i < len; i++) { ! switch (sig->char_at(i)) { case 'L': // only java/lang/Object is valid here if (sig->index_of_at(i, OBJ_SIG, OBJ_SIG_LEN) != i) return false; i += OBJ_SIG_LEN-1; //-1 because of i++ in loop
*** 561,572 **** if (sig == NULL) { return sig; } else if (is_basic_type_signature(sig)) { sig->increment_refcount(); return sig; // that was easy ! } else if (sig->byte_at(0) != '(') { ! BasicType bt = char2type(sig->byte_at(0)); if (is_subword_type(bt)) { bsig = vmSymbols::int_signature(); } else { assert(bt == T_OBJECT || bt == T_ARRAY, "is_basic_type_signature was false"); bsig = vmSymbols::object_signature(); --- 561,572 ---- if (sig == NULL) { return sig; } else if (is_basic_type_signature(sig)) { sig->increment_refcount(); return sig; // that was easy ! } else if (sig->char_at(0) != '(') { ! BasicType bt = char2type(sig->char_at(0)); if (is_subword_type(bt)) { bsig = vmSymbols::int_signature(); } else { assert(bt == T_OBJECT || bt == T_ARRAY, "is_basic_type_signature was false"); bsig = vmSymbols::object_signature();
*** 613,623 **** st = st ? st : tty; int len = sig->utf8_length(); int array = 0; bool prev_type = false; for (int i = 0; i < len; i++) { ! char ch = sig->byte_at(i); switch (ch) { case '(': case ')': prev_type = false; st->put(ch); continue; --- 613,623 ---- st = st ? st : tty; int len = sig->utf8_length(); int array = 0; bool prev_type = false; for (int i = 0; i < len; i++) { ! char ch = sig->char_at(i); switch (ch) { case '(': case ')': prev_type = false; st->put(ch); continue;
*** 628,646 **** continue; case 'L': { if (prev_type) st->put(','); int start = i+1, slash = start; ! while (++i < len && (ch = sig->byte_at(i)) != ';') { if (ch == '/' || ch == '.' || ch == '$') slash = i+1; } if (slash < i) start = slash; if (!keep_basic_names) { st->put('L'); } else { for (int j = start; j < i; j++) ! st->put(sig->byte_at(j)); prev_type = true; } break; } default: --- 628,646 ---- continue; case 'L': { if (prev_type) st->put(','); int start = i+1, slash = start; ! while (++i < len && (ch = sig->char_at(i)) != ';') { if (ch == '/' || ch == '.' || ch == '$') slash = i+1; } if (slash < i) start = slash; if (!keep_basic_names) { st->put('L'); } else { for (int j = start; j < i; j++) ! st->put(sig->char_at(j)); prev_type = true; } break; } default:
*** 973,983 **** if (name != NULL) { if (name->utf8_length() == 0) return 0; // a match is not possible } if (sig != NULL) { if (sig->utf8_length() == 0) return 0; // a match is not possible ! if (sig->byte_at(0) == '(') match_flags &= ~(IS_FIELD | IS_TYPE); else match_flags &= ~(IS_CONSTRUCTOR | IS_METHOD); } --- 973,983 ---- if (name != NULL) { if (name->utf8_length() == 0) return 0; // a match is not possible } if (sig != NULL) { if (sig->utf8_length() == 0) return 0; // a match is not possible ! if (sig->char_at(0) == '(') match_flags &= ~(IS_FIELD | IS_TYPE); else match_flags &= ~(IS_CONSTRUCTOR | IS_METHOD); }
*** 1454,1464 **** } case -2: // type { Symbol* type = caller->constants()->signature_ref_at(bss_index_in_pool); Handle th; ! if (type->byte_at(0) == '(') { th = SystemDictionary::find_method_handle_type(type, caller, CHECK); } else { th = SystemDictionary::find_java_mirror_for_type(type, caller, SignatureStream::NCDFError, CHECK); } pseudo_arg = th(); --- 1454,1464 ---- } case -2: // type { Symbol* type = caller->constants()->signature_ref_at(bss_index_in_pool); Handle th; ! if (type->char_at(0) == '(') { th = SystemDictionary::find_method_handle_type(type, caller, CHECK); } else { th = SystemDictionary::find_java_mirror_for_type(type, caller, SignatureStream::NCDFError, CHECK); } pseudo_arg = th();
< prev index next >