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 |