< prev index next >

src/share/vm/classfile/javaClasses.cpp

Print this page
rev 8961 : [mq]: diff-shenandoah.patch

*** 210,220 **** return Handle(); } int length = UTF8::unicode_length(utf8_str); Handle h_obj = basic_create(length, CHECK_NH); if (length > 0) { ! UTF8::convert_to_unicode(utf8_str, value(h_obj())->char_at_addr(0), length); } return h_obj; } oop java_lang_String::create_oop_from_str(const char* utf8_str, TRAPS) { --- 210,222 ---- return Handle(); } int length = UTF8::unicode_length(utf8_str); Handle h_obj = basic_create(length, CHECK_NH); if (length > 0) { ! typeArrayOop buffer = value(h_obj()); ! buffer = typeArrayOop(oopDesc::bs()->resolve_and_maybe_copy_oop(buffer)); ! UTF8::convert_to_unicode(utf8_str, buffer->char_at_addr(0), length); } return h_obj; } oop java_lang_String::create_oop_from_str(const char* utf8_str, TRAPS) {
*** 224,234 **** Handle java_lang_String::create_from_symbol(Symbol* symbol, TRAPS) { int length = UTF8::unicode_length((char*)symbol->bytes(), symbol->utf8_length()); Handle h_obj = basic_create(length, CHECK_NH); if (length > 0) { ! UTF8::convert_to_unicode((char*)symbol->bytes(), value(h_obj())->char_at_addr(0), length); } return h_obj; } // Converts a C string to a Java String based on current encoding --- 226,238 ---- Handle java_lang_String::create_from_symbol(Symbol* symbol, TRAPS) { int length = UTF8::unicode_length((char*)symbol->bytes(), symbol->utf8_length()); Handle h_obj = basic_create(length, CHECK_NH); if (length > 0) { ! typeArrayOop buffer = value(h_obj()); ! buffer = typeArrayOop(oopDesc::bs()->resolve_and_maybe_copy_oop(buffer)); ! UTF8::convert_to_unicode((char*)symbol->bytes(), buffer->char_at_addr(0), length); } return h_obj; } // Converts a C string to a Java String based on current encoding
*** 345,362 **** --- 349,368 ---- // Zero length string will hash to zero with String.hashCode() function. if (length == 0) return 0; typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); return java_lang_String::hash_code(value->char_at_addr(offset), length); } char* java_lang_String::as_quoted_ascii(oop java_string) { typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); int length = java_lang_String::length(java_string); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); jchar* base = (length == 0) ? NULL : value->char_at_addr(offset); if (base == NULL) return NULL; int result_length = UNICODE::quoted_ascii_length(base, length) + 1; char* result = NEW_RESOURCE_ARRAY(char, result_length);
*** 373,450 **** --- 379,467 ---- return StringTable::hash_string(NULL, 0); } typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); return StringTable::hash_string(value->char_at_addr(offset), length); } Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) { oop obj = java_string(); typeArrayOop value = java_lang_String::value(obj); int offset = java_lang_String::offset(obj); int length = java_lang_String::length(obj); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); jchar* base = (length == 0) ? NULL : value->char_at_addr(offset); Symbol* sym = SymbolTable::lookup_unicode(base, length, THREAD); return sym; } Symbol* java_lang_String::as_symbol_or_null(oop java_string) { typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); int length = java_lang_String::length(java_string); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); jchar* base = (length == 0) ? NULL : value->char_at_addr(offset); return SymbolTable::probe_unicode(base, length); } int java_lang_String::utf8_length(oop java_string) { typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); int length = java_lang_String::length(java_string); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); jchar* position = (length == 0) ? NULL : value->char_at_addr(offset); return UNICODE::utf8_length(position, length); } char* java_lang_String::as_utf8_string(oop java_string) { typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); int length = java_lang_String::length(java_string); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); jchar* position = (length == 0) ? NULL : value->char_at_addr(offset); return UNICODE::as_utf8(position, length); } char* java_lang_String::as_utf8_string(oop java_string, char* buf, int buflen) { typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); int length = java_lang_String::length(java_string); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); jchar* position = (length == 0) ? NULL : value->char_at_addr(offset); return UNICODE::as_utf8(position, length, buf, buflen); } char* java_lang_String::as_utf8_string(oop java_string, int start, int len) { typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); int length = java_lang_String::length(java_string); assert(start + len <= length, "just checking"); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); jchar* position = value->char_at_addr(offset + start); return UNICODE::as_utf8(position, len); } char* java_lang_String::as_utf8_string(oop java_string, int start, int len, char* buf, int buflen) { typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); int length = java_lang_String::length(java_string); assert(start + len <= length, "just checking"); + value = typeArrayOop(oopDesc::bs()->resolve_oop(value)); jchar* position = value->char_at_addr(offset + start); return UNICODE::as_utf8(position, len, buf, buflen); } bool java_lang_String::equals(oop java_string, jchar* chars, int len) { assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string"); typeArrayOop value = java_lang_String::value(java_string); + if (ShenandoahVerifyReadsToFromSpace) { + value = (typeArrayOop) oopDesc::bs()->resolve_oop(value); + } int offset = java_lang_String::offset(java_string); int length = java_lang_String::length(java_string); if (length != len) { return false; }
*** 861,873 **** BasicType type = T_VOID; if (ak != NULL) { // Note: create_basic_type_mirror above initializes ak to a non-null value. type = ArrayKlass::cast(ak)->element_type(); } else { ! assert(java_class == Universe::void_mirror(), "only valid non-array primitive"); } ! assert(Universe::java_mirror(type) == java_class, "must be consistent"); return type; } BasicType java_lang_Class::as_BasicType(oop java_class, Klass** reference_klass) { assert(java_lang_Class::is_instance(java_class), "must be a Class object"); --- 878,890 ---- BasicType type = T_VOID; if (ak != NULL) { // Note: create_basic_type_mirror above initializes ak to a non-null value. type = ArrayKlass::cast(ak)->element_type(); } else { ! assert(oopDesc::bs()->resolve_and_maybe_copy_oop(java_class) == oopDesc::bs()->resolve_and_maybe_copy_oop(Universe::void_mirror()), "only valid non-array primitive"); } ! assert(oopDesc::bs()->resolve_and_maybe_copy_oop(Universe::java_mirror(type)) == oopDesc::bs()->resolve_and_maybe_copy_oop(java_class), "must be consistent"); return type; } BasicType java_lang_Class::as_BasicType(oop java_class, Klass** reference_klass) { assert(java_lang_Class::is_instance(java_class), "must be a Class object");
*** 3085,3094 **** --- 3102,3112 ---- int java_lang_ClassLoader::_loader_data_offset = -1; int java_lang_ClassLoader::parallelCapable_offset = -1; ClassLoaderData** java_lang_ClassLoader::loader_data_addr(oop loader) { assert(loader != NULL && loader->is_oop(), "loader must be oop"); + loader = oopDesc::bs()->resolve_and_maybe_copy_oop(loader); return (ClassLoaderData**) loader->address_field_addr(_loader_data_offset); } ClassLoaderData* java_lang_ClassLoader::loader_data(oop loader) { return *java_lang_ClassLoader::loader_data_addr(loader);
*** 3105,3114 **** --- 3123,3135 ---- CLASSLOADER_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); } oop java_lang_ClassLoader::parent(oop loader) { + if (ShenandoahVerifyReadsToFromSpace) { + loader = oopDesc::bs()->resolve_oop(loader); + } assert(is_instance(loader), "loader must be oop"); return loader->obj_field(parent_offset); } bool java_lang_ClassLoader::isAncestor(oop loader, oop cl) {
< prev index next >