equal
deleted
inserted
replaced
99 |
99 |
100 if (m == NULL) { |
100 if (m == NULL) { |
101 // NULL indicates the package is being unqualifiedly exported. Clean up |
101 // NULL indicates the package is being unqualifiedly exported. Clean up |
102 // the qualified list at the next safepoint. |
102 // the qualified list at the next safepoint. |
103 set_unqual_exported(); |
103 set_unqual_exported(); |
104 |
|
105 } else { |
104 } else { |
106 // Add the exported module |
105 // Add the exported module |
107 add_qexport(m); |
106 add_qexport(m); |
108 } |
107 } |
109 } |
108 } |
110 |
109 |
111 // Set the package as exported to all unnamed modules unless the package is |
110 // Set the package as exported to all unnamed modules unless the package is |
112 // already unqualifiedly exported. |
111 // already unqualifiedly exported. |
113 void PackageEntry::set_is_exported_allUnnamed() { |
112 void PackageEntry::set_is_exported_allUnnamed() { |
|
113 if (module()->is_open()) { |
|
114 // No-op for open modules since all packages are unqualifiedly exported |
|
115 return; |
|
116 } |
|
117 |
114 MutexLocker m1(Module_lock); |
118 MutexLocker m1(Module_lock); |
115 if (!is_unqual_exported()) { |
119 if (!is_unqual_exported()) { |
116 _export_flags = PKG_EXP_ALLUNNAMED; |
120 _export_flags = PKG_EXP_ALLUNNAMED; |
117 } |
121 } |
118 } |
122 } |
168 : Hashtable<Symbol*, mtModule>(table_size, sizeof(PackageEntry)) |
172 : Hashtable<Symbol*, mtModule>(table_size, sizeof(PackageEntry)) |
169 { |
173 { |
170 } |
174 } |
171 |
175 |
172 PackageEntryTable::~PackageEntryTable() { |
176 PackageEntryTable::~PackageEntryTable() { |
173 assert_locked_or_safepoint(Module_lock); |
|
174 |
|
175 // Walk through all buckets and all entries in each bucket, |
177 // Walk through all buckets and all entries in each bucket, |
176 // freeing each entry. |
178 // freeing each entry. |
177 for (int i = 0; i < table_size(); ++i) { |
179 for (int i = 0; i < table_size(); ++i) { |
178 for (PackageEntry* p = bucket(i); p != NULL;) { |
180 for (PackageEntry* p = bucket(i); p != NULL;) { |
179 PackageEntry* to_remove = p; |
181 PackageEntry* to_remove = p; |
206 TRACE_INIT_ID(entry); |
208 TRACE_INIT_ID(entry); |
207 |
209 |
208 // Initialize fields specific to a PackageEntry |
210 // Initialize fields specific to a PackageEntry |
209 entry->init(); |
211 entry->init(); |
210 entry->name()->increment_refcount(); |
212 entry->name()->increment_refcount(); |
211 if (!module->is_named()) { |
|
212 // Set the exported state to true because all packages |
|
213 // within the unnamed module are unqualifiedly exported |
|
214 entry->set_unqual_exported(); |
|
215 } |
|
216 entry->set_module(module); |
213 entry->set_module(module); |
217 return entry; |
214 return entry; |
218 } |
215 } |
219 |
216 |
220 void PackageEntryTable::add_entry(int index, PackageEntry* new_entry) { |
217 void PackageEntryTable::add_entry(int index, PackageEntry* new_entry) { |
270 } |
267 } |
271 |
268 |
272 // Called when a define module for java.base is being processed. |
269 // Called when a define module for java.base is being processed. |
273 // Verify the packages loaded thus far are in java.base's package list. |
270 // Verify the packages loaded thus far are in java.base's package list. |
274 void PackageEntryTable::verify_javabase_packages(GrowableArray<Symbol*> *pkg_list) { |
271 void PackageEntryTable::verify_javabase_packages(GrowableArray<Symbol*> *pkg_list) { |
|
272 assert_lock_strong(Module_lock); |
275 for (int i = 0; i < table_size(); i++) { |
273 for (int i = 0; i < table_size(); i++) { |
276 for (PackageEntry* entry = bucket(i); |
274 for (PackageEntry* entry = bucket(i); |
277 entry != NULL; |
275 entry != NULL; |
278 entry = entry->next()) { |
276 entry = entry->next()) { |
279 ModuleEntry* m = entry->module(); |
277 ModuleEntry* m = entry->module(); |
350 _classpath_index, _export_flags == PKG_EXP_UNQUALIFIED, |
348 _classpath_index, _export_flags == PKG_EXP_UNQUALIFIED, |
351 _export_flags == PKG_EXP_ALLUNNAMED, p2i(next())); |
349 _export_flags == PKG_EXP_ALLUNNAMED, p2i(next())); |
352 } |
350 } |
353 |
351 |
354 void PackageEntryTable::verify() { |
352 void PackageEntryTable::verify() { |
355 int element_count = 0; |
353 verify_table<PackageEntry>("Package Entry Table"); |
356 for (int index = 0; index < table_size(); index++) { |
|
357 for (PackageEntry* probe = bucket(index); |
|
358 probe != NULL; |
|
359 probe = probe->next()) { |
|
360 probe->verify(); |
|
361 element_count++; |
|
362 } |
|
363 } |
|
364 guarantee(number_of_entries() == element_count, |
|
365 "Verify of Package Entry Table failed"); |
|
366 DEBUG_ONLY(verify_lookup_length((double)number_of_entries() / table_size(), "Package Entry Table")); |
|
367 } |
354 } |
368 |
355 |
369 void PackageEntry::verify() { |
356 void PackageEntry::verify() { |
370 guarantee(name() != NULL, "A package entry must have a corresponding symbol name."); |
357 guarantee(name() != NULL, "A package entry must have a corresponding symbol name."); |
371 } |
358 } |