hotspot/src/share/vm/oops/cpCache.cpp
changeset 38033 996ce936543f
parent 37248 11a660dbbb8e
parent 38031 e0b822facc03
child 38259 b495d1cfe673
equal deleted inserted replaced
37298:8df0cc9da41e 38033:996ce936543f
   567 void ConstantPoolCache::initialize(const intArray& inverse_index_map,
   567 void ConstantPoolCache::initialize(const intArray& inverse_index_map,
   568                                    const intArray& invokedynamic_inverse_index_map,
   568                                    const intArray& invokedynamic_inverse_index_map,
   569                                    const intArray& invokedynamic_references_map) {
   569                                    const intArray& invokedynamic_references_map) {
   570   for (int i = 0; i < inverse_index_map.length(); i++) {
   570   for (int i = 0; i < inverse_index_map.length(); i++) {
   571     ConstantPoolCacheEntry* e = entry_at(i);
   571     ConstantPoolCacheEntry* e = entry_at(i);
   572     int original_index = inverse_index_map[i];
   572     int original_index = inverse_index_map.at(i);
   573     e->initialize_entry(original_index);
   573     e->initialize_entry(original_index);
   574     assert(entry_at(i) == e, "sanity");
   574     assert(entry_at(i) == e, "sanity");
   575   }
   575   }
   576 
   576 
   577   // Append invokedynamic entries at the end
   577   // Append invokedynamic entries at the end
   578   int invokedynamic_offset = inverse_index_map.length();
   578   int invokedynamic_offset = inverse_index_map.length();
   579   for (int i = 0; i < invokedynamic_inverse_index_map.length(); i++) {
   579   for (int i = 0; i < invokedynamic_inverse_index_map.length(); i++) {
   580     int offset = i + invokedynamic_offset;
   580     int offset = i + invokedynamic_offset;
   581     ConstantPoolCacheEntry* e = entry_at(offset);
   581     ConstantPoolCacheEntry* e = entry_at(offset);
   582     int original_index = invokedynamic_inverse_index_map[i];
   582     int original_index = invokedynamic_inverse_index_map.at(i);
   583     e->initialize_entry(original_index);
   583     e->initialize_entry(original_index);
   584     assert(entry_at(offset) == e, "sanity");
   584     assert(entry_at(offset) == e, "sanity");
   585   }
   585   }
   586 
   586 
   587   for (int ref = 0; ref < invokedynamic_references_map.length(); ref++) {
   587   for (int ref = 0; ref < invokedynamic_references_map.length(); ref++) {
   588     const int cpci = invokedynamic_references_map[ref];
   588     const int cpci = invokedynamic_references_map.at(ref);
   589     if (cpci >= 0) {
   589     if (cpci >= 0) {
   590 #ifdef ASSERT
   590 #ifdef ASSERT
   591       // invokedynamic and invokehandle have more entries; check if they
   591       // invokedynamic and invokehandle have more entries; check if they
   592       // all point to the same constant pool cache entry.
   592       // all point to the same constant pool cache entry.
   593       for (int entry = 1; entry < ConstantPoolCacheEntry::_indy_resolved_references_entries; entry++) {
   593       for (int entry = 1; entry < ConstantPoolCacheEntry::_indy_resolved_references_entries; entry++) {
   594         const int cpci_next = invokedynamic_references_map[ref + entry];
   594         const int cpci_next = invokedynamic_references_map.at(ref + entry);
   595         assert(cpci == cpci_next, "%d == %d", cpci, cpci_next);
   595         assert(cpci == cpci_next, "%d == %d", cpci, cpci_next);
   596       }
   596       }
   597 #endif
   597 #endif
   598       entry_at(cpci)->initialize_resolved_reference_index(ref);
   598       entry_at(cpci)->initialize_resolved_reference_index(ref);
   599       ref += ConstantPoolCacheEntry::_indy_resolved_references_entries - 1;  // skip extra entries
   599       ref += ConstantPoolCacheEntry::_indy_resolved_references_entries - 1;  // skip extra entries