1809 void ConstantPool::patch_resolved_references(GrowableArray<Handle>* cp_patches) {
1810 for (int index = 1; index < cp_patches->length(); index++) { // Index 0 is unused
1811 Handle patch = cp_patches->at(index);
1812 if (patch.not_null()) {
1813 assert (tag_at(index).is_string(), "should only be string left");
1814 // Patching a string means pre-resolving it.
1815 // The spelling in the constant pool is ignored.
1816 // The constant reference may be any object whatever.
1817 // If it is not a real interned string, the constant is referred
1818 // to as a "pseudo-string", and must be presented to the CP
1819 // explicitly, because it may require scavenging.
1820 int obj_index = cp_to_object_index(index);
1821 pseudo_string_at_put(index, obj_index, patch());
1822 DEBUG_ONLY(cp_patches->at_put(index, Handle());)
1823 }
1824 }
1825 #ifdef ASSERT
1826 // Ensure that all the patches have been used.
1827 for (int index = 0; index < cp_patches->length(); index++) {
1828 assert(cp_patches->at(index).is_null(),
1829 err_msg("Unused constant pool patch at %d in class file %s",
1830 index,
1831 pool_holder()->external_name()));
1832 }
1833 #endif // ASSERT
1834 }
1835
1836 #ifndef PRODUCT
1837
1838 // CompileTheWorld support. Preload all classes loaded references in the passed in constantpool
1839 void ConstantPool::preload_and_initialize_all_classes(ConstantPool* obj, TRAPS) {
1840 guarantee(obj->is_constantPool(), "object must be constant pool");
1841 constantPoolHandle cp(THREAD, (ConstantPool*)obj);
1842 guarantee(cp->pool_holder() != NULL, "must be fully loaded");
1843
1844 for (int i = 0; i< cp->length(); i++) {
1845 if (cp->tag_at(i).is_unresolved_klass()) {
1846 // This will force loading of the class
1847 Klass* klass = cp->klass_at(i, CHECK);
1848 if (klass->oop_is_instance()) {
1849 // Force initialization of class
1850 InstanceKlass::cast(klass)->initialize(CHECK);
1851 }
|
1809 void ConstantPool::patch_resolved_references(GrowableArray<Handle>* cp_patches) {
1810 for (int index = 1; index < cp_patches->length(); index++) { // Index 0 is unused
1811 Handle patch = cp_patches->at(index);
1812 if (patch.not_null()) {
1813 assert (tag_at(index).is_string(), "should only be string left");
1814 // Patching a string means pre-resolving it.
1815 // The spelling in the constant pool is ignored.
1816 // The constant reference may be any object whatever.
1817 // If it is not a real interned string, the constant is referred
1818 // to as a "pseudo-string", and must be presented to the CP
1819 // explicitly, because it may require scavenging.
1820 int obj_index = cp_to_object_index(index);
1821 pseudo_string_at_put(index, obj_index, patch());
1822 DEBUG_ONLY(cp_patches->at_put(index, Handle());)
1823 }
1824 }
1825 #ifdef ASSERT
1826 // Ensure that all the patches have been used.
1827 for (int index = 0; index < cp_patches->length(); index++) {
1828 assert(cp_patches->at(index).is_null(),
1829 "Unused constant pool patch at %d in class file %s",
1830 index,
1831 pool_holder()->external_name());
1832 }
1833 #endif // ASSERT
1834 }
1835
1836 #ifndef PRODUCT
1837
1838 // CompileTheWorld support. Preload all classes loaded references in the passed in constantpool
1839 void ConstantPool::preload_and_initialize_all_classes(ConstantPool* obj, TRAPS) {
1840 guarantee(obj->is_constantPool(), "object must be constant pool");
1841 constantPoolHandle cp(THREAD, (ConstantPool*)obj);
1842 guarantee(cp->pool_holder() != NULL, "must be fully loaded");
1843
1844 for (int i = 0; i< cp->length(); i++) {
1845 if (cp->tag_at(i).is_unresolved_klass()) {
1846 // This will force loading of the class
1847 Klass* klass = cp->klass_at(i, CHECK);
1848 if (klass->oop_is_instance()) {
1849 // Force initialization of class
1850 InstanceKlass::cast(klass)->initialize(CHECK);
1851 }
|