src/share/vm/oops/constantPoolOop.cpp

changeset 2614
fbbeec6dad2d
parent 2497
3582bf76420e
child 2658
c7f3d0b4570f
     1.1 --- a/src/share/vm/oops/constantPoolOop.cpp	Thu Mar 03 19:51:36 2011 -0500
     1.2 +++ b/src/share/vm/oops/constantPoolOop.cpp	Thu Mar 03 19:52:23 2011 -0500
     1.3 @@ -1175,8 +1175,15 @@
     1.4  
     1.5    case JVM_CONSTANT_UnresolvedClass:
     1.6    {
     1.7 -    Symbol* k = from_cp->unresolved_klass_at(from_i);
     1.8 -    to_cp->unresolved_klass_at_put(to_i, k);
     1.9 +    // Can be resolved after checking tag, so check the slot first.
    1.10 +    CPSlot entry = from_cp->slot_at(from_i);
    1.11 +    if (entry.is_oop()) {
    1.12 +      assert(entry.get_oop()->is_klass(), "must be");
    1.13 +      // Already resolved
    1.14 +      to_cp->klass_at_put(to_i, (klassOop)entry.get_oop());
    1.15 +    } else {
    1.16 +      to_cp->unresolved_klass_at_put(to_i, entry.get_symbol());
    1.17 +    }
    1.18    } break;
    1.19  
    1.20    case JVM_CONSTANT_UnresolvedClassInError:
    1.21 @@ -1189,8 +1196,14 @@
    1.22  
    1.23    case JVM_CONSTANT_UnresolvedString:
    1.24    {
    1.25 -    Symbol* s = from_cp->unresolved_string_at(from_i);
    1.26 -    to_cp->unresolved_string_at_put(to_i, s);
    1.27 +    // Can be resolved after checking tag, so check the slot first.
    1.28 +    CPSlot entry = from_cp->slot_at(from_i);
    1.29 +    if (entry.is_oop()) {
    1.30 +      // Already resolved (either string or pseudo-string)
    1.31 +      to_cp->string_at_put(to_i, entry.get_oop());
    1.32 +    } else {
    1.33 +      to_cp->unresolved_string_at_put(to_i, entry.get_symbol());
    1.34 +    }
    1.35    } break;
    1.36  
    1.37    case JVM_CONSTANT_Utf8:

mercurial