comparison src/share/vm/oops/constantPoolKlass.cpp @ 1573:beb77f0d41b3

6957004: MethodComparator uses the wrong CP index accessor Summary: Change two uses of get_index_u2 to get_index_u2_cpcache; also tweak some debugging print functions Reviewed-by: kvn
author jrose
date Fri, 28 May 2010 16:23:51 -0700
parents 4e6abf09f540
children e9ff18c4ace7
comparison
equal deleted inserted replaced
1572:87fc6aca31ab 1573:beb77f0d41b3
308 oop anObj; 308 oop anObj;
309 assert(obj->is_constantPool(), "must be constantPool"); 309 assert(obj->is_constantPool(), "must be constantPool");
310 Klass::oop_print_on(obj, st); 310 Klass::oop_print_on(obj, st);
311 constantPoolOop cp = constantPoolOop(obj); 311 constantPoolOop cp = constantPoolOop(obj);
312 if (cp->flags() != 0) { 312 if (cp->flags() != 0) {
313 st->print(" - flags : 0x%x", cp->flags()); 313 st->print(" - flags: 0x%x", cp->flags());
314 if (cp->has_pseudo_string()) st->print(" has_pseudo_string"); 314 if (cp->has_pseudo_string()) st->print(" has_pseudo_string");
315 if (cp->has_invokedynamic()) st->print(" has_invokedynamic"); 315 if (cp->has_invokedynamic()) st->print(" has_invokedynamic");
316 st->cr(); 316 st->cr();
317 } 317 }
318 318 st->print_cr(" - cache: " INTPTR_FORMAT, cp->cache());
319 // Temp. remove cache so we can do lookups with original indicies.
320 constantPoolCacheHandle cache (THREAD, cp->cache());
321 cp->set_cache(NULL);
322 319
323 for (int index = 1; index < cp->length(); index++) { // Index 0 is unused 320 for (int index = 1; index < cp->length(); index++) { // Index 0 is unused
324 st->print(" - %3d : ", index); 321 st->print(" - %3d : ", index);
325 cp->tag_at(index).print_on(st); 322 cp->tag_at(index).print_on(st);
326 st->print(" : "); 323 st->print(" : ");
332 } 329 }
333 break; 330 break;
334 case JVM_CONSTANT_Fieldref : 331 case JVM_CONSTANT_Fieldref :
335 case JVM_CONSTANT_Methodref : 332 case JVM_CONSTANT_Methodref :
336 case JVM_CONSTANT_InterfaceMethodref : 333 case JVM_CONSTANT_InterfaceMethodref :
337 st->print("klass_index=%d", cp->klass_ref_index_at(index)); 334 st->print("klass_index=%d", cp->uncached_klass_ref_index_at(index));
338 st->print(" name_and_type_index=%d", cp->name_and_type_ref_index_at(index)); 335 st->print(" name_and_type_index=%d", cp->uncached_name_and_type_ref_index_at(index));
339 break; 336 break;
340 case JVM_CONSTANT_UnresolvedString : 337 case JVM_CONSTANT_UnresolvedString :
341 case JVM_CONSTANT_String : 338 case JVM_CONSTANT_String :
342 if (cp->is_pseudo_string_at(index)) { 339 if (cp->is_pseudo_string_at(index)) {
343 anObj = cp->pseudo_string_at(index); 340 anObj = cp->pseudo_string_at(index);
380 break; 377 break;
381 } 378 }
382 st->cr(); 379 st->cr();
383 } 380 }
384 st->cr(); 381 st->cr();
385
386 // Restore cache
387 cp->set_cache(cache());
388 } 382 }
389 383
390 #endif 384 #endif
391 385
392 void constantPoolKlass::oop_print_value_on(oop obj, outputStream* st) { 386 void constantPoolKlass::oop_print_value_on(oop obj, outputStream* st) {
396 if (cp->has_pseudo_string()) st->print("/pseudo_string"); 390 if (cp->has_pseudo_string()) st->print("/pseudo_string");
397 if (cp->has_invokedynamic()) st->print("/invokedynamic"); 391 if (cp->has_invokedynamic()) st->print("/invokedynamic");
398 cp->print_address_on(st); 392 cp->print_address_on(st);
399 st->print(" for "); 393 st->print(" for ");
400 cp->pool_holder()->print_value_on(st); 394 cp->pool_holder()->print_value_on(st);
395 if (cp->cache() != NULL) {
396 st->print(" cache=" PTR_FORMAT, cp->cache());
397 }
401 } 398 }
402 399
403 const char* constantPoolKlass::internal_name() const { 400 const char* constantPoolKlass::internal_name() const {
404 return "{constant pool}"; 401 return "{constant pool}";
405 } 402 }