equal
deleted
inserted
replaced
76 set_super(Universe::is_bootstrapping() ? (Klass*)NULL : SystemDictionary::Object_klass()); |
76 set_super(Universe::is_bootstrapping() ? (Klass*)NULL : SystemDictionary::Object_klass()); |
77 set_layout_helper(Klass::_lh_neutral_value); |
77 set_layout_helper(Klass::_lh_neutral_value); |
78 set_dimension(1); |
78 set_dimension(1); |
79 set_higher_dimension(NULL); |
79 set_higher_dimension(NULL); |
80 set_lower_dimension(NULL); |
80 set_lower_dimension(NULL); |
81 set_component_mirror(NULL); |
|
82 // Arrays don't add any new methods, so their vtable is the same size as |
81 // Arrays don't add any new methods, so their vtable is the same size as |
83 // the vtable of klass Object. |
82 // the vtable of klass Object. |
84 int vtable_size = Universe::base_vtable_size(); |
83 int vtable_size = Universe::base_vtable_size(); |
85 set_vtable_length(vtable_size); |
84 set_vtable_length(vtable_size); |
86 set_is_cloneable(); // All arrays are considered to be cloneable (See JLS 20.1.5) |
85 set_is_cloneable(); // All arrays are considered to be cloneable (See JLS 20.1.5) |
158 f(k); |
157 f(k); |
159 k = ArrayKlass::cast(k)->higher_dimension(); |
158 k = ArrayKlass::cast(k)->higher_dimension(); |
160 } |
159 } |
161 } |
160 } |
162 |
161 |
163 // GC support |
|
164 |
|
165 void ArrayKlass::oops_do(OopClosure* cl) { |
|
166 Klass::oops_do(cl); |
|
167 |
|
168 cl->do_oop(adr_component_mirror()); |
|
169 } |
|
170 |
|
171 // JVM support |
162 // JVM support |
172 |
163 |
173 jint ArrayKlass::compute_modifier_flags(TRAPS) const { |
164 jint ArrayKlass::compute_modifier_flags(TRAPS) const { |
174 return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; |
165 return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; |
175 } |
166 } |
180 return JVMTI_CLASS_STATUS_ARRAY; |
171 return JVMTI_CLASS_STATUS_ARRAY; |
181 } |
172 } |
182 |
173 |
183 void ArrayKlass::remove_unshareable_info() { |
174 void ArrayKlass::remove_unshareable_info() { |
184 Klass::remove_unshareable_info(); |
175 Klass::remove_unshareable_info(); |
185 // Clear the java mirror |
|
186 set_component_mirror(NULL); |
|
187 } |
176 } |
188 |
177 |
189 void ArrayKlass::restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS) { |
178 void ArrayKlass::restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS) { |
190 assert(loader_data == ClassLoaderData::the_null_class_loader_data(), "array classes belong to null loader"); |
179 assert(loader_data == ClassLoaderData::the_null_class_loader_data(), "array classes belong to null loader"); |
191 Klass::restore_unshareable_info(loader_data, protection_domain, CHECK); |
180 Klass::restore_unshareable_info(loader_data, protection_domain, CHECK); |
215 |
204 |
216 // Verification |
205 // Verification |
217 |
206 |
218 void ArrayKlass::verify_on(outputStream* st) { |
207 void ArrayKlass::verify_on(outputStream* st) { |
219 Klass::verify_on(st); |
208 Klass::verify_on(st); |
220 |
|
221 if (component_mirror() != NULL) { |
|
222 guarantee(component_mirror()->klass() != NULL, "should have a class"); |
|
223 } |
|
224 } |
209 } |
225 |
210 |
226 void ArrayKlass::oop_verify_on(oop obj, outputStream* st) { |
211 void ArrayKlass::oop_verify_on(oop obj, outputStream* st) { |
227 guarantee(obj->is_array(), "must be array"); |
212 guarantee(obj->is_array(), "must be array"); |
228 arrayOop a = arrayOop(obj); |
213 arrayOop a = arrayOop(obj); |