src/share/vm/oops/constantPoolOop.cpp

Print this page
rev 3 : [mq]: anonk.patch

*** 331,342 **** char* constantPoolOopDesc::string_at_noresolve(int which) { // Test entry type in case string is resolved while in here. oop entry = *(obj_at_addr(which)); if (entry->is_symbol()) { return ((symbolOop)entry)->as_C_string(); ! } else { return java_lang_String::as_utf8_string(entry); } } symbolOop constantPoolOopDesc::name_ref_at(int which) { --- 331,345 ---- char* constantPoolOopDesc::string_at_noresolve(int which) { // Test entry type in case string is resolved while in here. oop entry = *(obj_at_addr(which)); if (entry->is_symbol()) { return ((symbolOop)entry)->as_C_string(); ! } else if (java_lang_String::is_instance(entry)) { return java_lang_String::as_utf8_string(entry); + } else { + assert(false, "pseudo-string"); + return (char*)"<pseudo-string>"; } } symbolOop constantPoolOopDesc::name_ref_at(int which) {
*** 364,374 **** this_oop->string_at(index, CHECK); } } } ! oop constantPoolOopDesc::string_at_impl(constantPoolHandle this_oop, int which, TRAPS) { oop entry = *(this_oop->obj_at_addr(which)); if (entry->is_symbol()) { ObjectLocker ol(this_oop, THREAD); if (this_oop->tag_at(which).is_unresolved_string()) { // Intern string --- 367,377 ---- this_oop->string_at(index, CHECK); } } } ! oop constantPoolOopDesc::string_at_impl(constantPoolHandle this_oop, int which, bool pseudo_ok, TRAPS) { oop entry = *(this_oop->obj_at_addr(which)); if (entry->is_symbol()) { ObjectLocker ol(this_oop, THREAD); if (this_oop->tag_at(which).is_unresolved_string()) { // Intern string
*** 378,391 **** --- 381,408 ---- } else { // Another thread beat us and interned string, read string from constant pool entry = this_oop->resolved_string_at(which); } } + if (!pseudo_ok) assert(java_lang_String::is_instance(entry), "must be string"); return entry; } + + bool constantPoolOopDesc::is_pseudo_string_at(int which) { + oop entry = *(obj_at_addr(which)); + if (entry->is_symbol()) + // Not yet resolved, but it will resolve to a string. + return false; + else if (java_lang_String::is_instance(entry)) + return false; + else + // truly pseudo + return true; + } + bool constantPoolOopDesc::klass_name_at_matches(instanceKlassHandle k, int which) { // Names are interned, so we can compare symbolOops directly symbolOop cp_name = klass_name_at(which);