< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page
rev 58870 : 8242452: During module definition, move conversion of packages from native to VM
8242290: Pointless verification in get_package_entry_by_name
Reviewed-by: lfoltan, alanb, iklam

*** 647,668 **** typeArrayOop value = java_lang_String::value(java_string); return utf8_length(java_string, value); } char* java_lang_String::as_utf8_string(oop java_string) { typeArrayOop value = java_lang_String::value(java_string); ! int length = java_lang_String::length(java_string, value); bool is_latin1 = java_lang_String::is_latin1(java_string); if (!is_latin1) { jchar* position = (length == 0) ? NULL : value->char_at_addr(0); return UNICODE::as_utf8(position, length); } else { jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0); return UNICODE::as_utf8(position, length); } } char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) { assert(value_equals(value, java_lang_String::value(java_string)), "value must be same as java_lang_String::value(java_string)"); int length = java_lang_String::length(java_string, value); bool is_latin1 = java_lang_String::is_latin1(java_string); --- 647,696 ---- typeArrayOop value = java_lang_String::value(java_string); return utf8_length(java_string, value); } char* java_lang_String::as_utf8_string(oop java_string) { + int length = 0; + return as_utf8_string(java_string, length); + } + + char* java_lang_String::as_utf8_string(oop java_string, int& length) { typeArrayOop value = java_lang_String::value(java_string); ! length = java_lang_String::length(java_string, value); bool is_latin1 = java_lang_String::is_latin1(java_string); if (!is_latin1) { jchar* position = (length == 0) ? NULL : value->char_at_addr(0); return UNICODE::as_utf8(position, length); } else { jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0); return UNICODE::as_utf8(position, length); } } + // Uses a provided buffer if it's sufficiently large, otherwise allocates + // a resource array to fit + char* java_lang_String::as_utf8_string_full(oop java_string, char* buf, int buflen, int& utf8_len) { + typeArrayOop value = java_lang_String::value(java_string); + int len = java_lang_String::length(java_string, value); + bool is_latin1 = java_lang_String::is_latin1(java_string); + if (!is_latin1) { + jchar *position = (len == 0) ? NULL : value->char_at_addr(0); + utf8_len = UNICODE::utf8_length(position, len); + if (utf8_len >= buflen) { + buf = NEW_RESOURCE_ARRAY(char, utf8_len + 1); + } + return UNICODE::as_utf8(position, len, buf, utf8_len + 1); + } else { + jbyte *position = (len == 0) ? NULL : value->byte_at_addr(0); + utf8_len = UNICODE::utf8_length(position, len); + if (utf8_len >= buflen) { + buf = NEW_RESOURCE_ARRAY(char, utf8_len + 1); + } + return UNICODE::as_utf8(position, len, buf, utf8_len + 1); + } + } + char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) { assert(value_equals(value, java_lang_String::value(java_string)), "value must be same as java_lang_String::value(java_string)"); int length = java_lang_String::length(java_string, value); bool is_latin1 = java_lang_String::is_latin1(java_string);
< prev index next >