--- a/src/hotspot/share/classfile/javaClasses.inline.hpp Tue Jan 22 10:12:05 2019 +0100
+++ b/src/hotspot/share/classfile/javaClasses.inline.hpp Tue Jan 22 11:22:44 2019 +0100
@@ -71,10 +71,11 @@
assert(CompactStrings || coder == CODER_UTF16, "Must be UTF16 without CompactStrings");
return coder == CODER_LATIN1;
}
-int java_lang_String::length(oop java_string) {
+int java_lang_String::length(oop java_string, typeArrayOop value) {
assert(initialized, "Must be initialized");
assert(is_instance(java_string), "must be java_string");
- typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
+ assert(oopDesc::equals_raw(value, java_lang_String::value(java_string)),
+ "value must be same as java_lang_String::value(java_string)");
if (value == NULL) {
return 0;
}
@@ -85,6 +86,12 @@
}
return arr_length;
}
+int java_lang_String::length(oop java_string) {
+ assert(initialized, "Must be initialized");
+ assert(is_instance(java_string), "must be java_string");
+ typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
+ return length(java_string, value);
+}
bool java_lang_String::is_instance_inlined(oop obj) {
return obj != NULL && obj->klass() == SystemDictionary::String_klass();