Mercurial > hg > truffle
comparison src/share/vm/oops/typeArrayKlass.cpp @ 6831:d8ce2825b193
8000213: NPG: Should have renamed arrayKlass and typeArrayKlass
Summary: Capitalize these metadata types (and objArrayKlass)
Reviewed-by: stefank, twisti, kvn
author | coleenp |
---|---|
date | Sat, 29 Sep 2012 06:40:00 -0400 |
parents | da91efe96a93 |
children | 6e5a59a8e4a7 |
comparison
equal
deleted
inserted
replaced
6811:1b582b1bf7cb | 6831:d8ce2825b193 |
---|---|
38 #include "oops/oop.inline.hpp" | 38 #include "oops/oop.inline.hpp" |
39 #include "oops/typeArrayKlass.hpp" | 39 #include "oops/typeArrayKlass.hpp" |
40 #include "oops/typeArrayOop.hpp" | 40 #include "oops/typeArrayOop.hpp" |
41 #include "runtime/handles.inline.hpp" | 41 #include "runtime/handles.inline.hpp" |
42 | 42 |
43 bool typeArrayKlass::compute_is_subtype_of(Klass* k) { | 43 bool TypeArrayKlass::compute_is_subtype_of(Klass* k) { |
44 if (!k->oop_is_typeArray()) { | 44 if (!k->oop_is_typeArray()) { |
45 return arrayKlass::compute_is_subtype_of(k); | 45 return ArrayKlass::compute_is_subtype_of(k); |
46 } | 46 } |
47 | 47 |
48 typeArrayKlass* tak = typeArrayKlass::cast(k); | 48 TypeArrayKlass* tak = TypeArrayKlass::cast(k); |
49 if (dimension() != tak->dimension()) return false; | 49 if (dimension() != tak->dimension()) return false; |
50 | 50 |
51 return element_type() == tak->element_type(); | 51 return element_type() == tak->element_type(); |
52 } | 52 } |
53 | 53 |
54 typeArrayKlass* typeArrayKlass::create_klass(BasicType type, | 54 TypeArrayKlass* TypeArrayKlass::create_klass(BasicType type, |
55 const char* name_str, TRAPS) { | 55 const char* name_str, TRAPS) { |
56 Symbol* sym = NULL; | 56 Symbol* sym = NULL; |
57 if (name_str != NULL) { | 57 if (name_str != NULL) { |
58 sym = SymbolTable::new_permanent_symbol(name_str, CHECK_NULL); | 58 sym = SymbolTable::new_permanent_symbol(name_str, CHECK_NULL); |
59 } | 59 } |
60 | 60 |
61 ClassLoaderData* null_loader_data = ClassLoaderData::the_null_class_loader_data(); | 61 ClassLoaderData* null_loader_data = ClassLoaderData::the_null_class_loader_data(); |
62 | 62 |
63 typeArrayKlass* ak = typeArrayKlass::allocate(null_loader_data, type, sym, CHECK_NULL); | 63 TypeArrayKlass* ak = TypeArrayKlass::allocate(null_loader_data, type, sym, CHECK_NULL); |
64 | 64 |
65 // Add all classes to our internal class loader list here, | 65 // Add all classes to our internal class loader list here, |
66 // including classes in the bootstrap (NULL) class loader. | 66 // including classes in the bootstrap (NULL) class loader. |
67 // GC walks these as strong roots. | 67 // GC walks these as strong roots. |
68 null_loader_data->add_class(ak); | 68 null_loader_data->add_class(ak); |
71 complete_create_array_klass(ak, ak->super(), CHECK_NULL); | 71 complete_create_array_klass(ak, ak->super(), CHECK_NULL); |
72 | 72 |
73 return ak; | 73 return ak; |
74 } | 74 } |
75 | 75 |
76 typeArrayKlass* typeArrayKlass::allocate(ClassLoaderData* loader_data, BasicType type, Symbol* name, TRAPS) { | 76 TypeArrayKlass* TypeArrayKlass::allocate(ClassLoaderData* loader_data, BasicType type, Symbol* name, TRAPS) { |
77 assert(typeArrayKlass::header_size() <= InstanceKlass::header_size(), | 77 assert(TypeArrayKlass::header_size() <= InstanceKlass::header_size(), |
78 "array klasses must be same size as InstanceKlass"); | 78 "array klasses must be same size as InstanceKlass"); |
79 | 79 |
80 int size = arrayKlass::static_size(typeArrayKlass::header_size()); | 80 int size = ArrayKlass::static_size(TypeArrayKlass::header_size()); |
81 | 81 |
82 return new (loader_data, size, THREAD) typeArrayKlass(type, name); | 82 return new (loader_data, size, THREAD) TypeArrayKlass(type, name); |
83 } | 83 } |
84 | 84 |
85 typeArrayKlass::typeArrayKlass(BasicType type, Symbol* name) : arrayKlass(name) { | 85 TypeArrayKlass::TypeArrayKlass(BasicType type, Symbol* name) : ArrayKlass(name) { |
86 set_layout_helper(array_layout_helper(type)); | 86 set_layout_helper(array_layout_helper(type)); |
87 assert(oop_is_array(), "sanity"); | 87 assert(oop_is_array(), "sanity"); |
88 assert(oop_is_typeArray(), "sanity"); | 88 assert(oop_is_typeArray(), "sanity"); |
89 | 89 |
90 set_max_length(arrayOopDesc::max_array_length(type)); | 90 set_max_length(arrayOopDesc::max_array_length(type)); |
91 assert(size() >= typeArrayKlass::header_size(), "bad size"); | 91 assert(size() >= TypeArrayKlass::header_size(), "bad size"); |
92 | 92 |
93 set_class_loader_data(ClassLoaderData::the_null_class_loader_data()); | 93 set_class_loader_data(ClassLoaderData::the_null_class_loader_data()); |
94 } | 94 } |
95 | 95 |
96 typeArrayOop typeArrayKlass::allocate_common(int length, bool do_zero, TRAPS) { | 96 typeArrayOop TypeArrayKlass::allocate_common(int length, bool do_zero, TRAPS) { |
97 assert(log2_element_size() >= 0, "bad scale"); | 97 assert(log2_element_size() >= 0, "bad scale"); |
98 if (length >= 0) { | 98 if (length >= 0) { |
99 if (length <= max_length()) { | 99 if (length <= max_length()) { |
100 size_t size = typeArrayOopDesc::object_size(layout_helper(), length); | 100 size_t size = typeArrayOopDesc::object_size(layout_helper(), length); |
101 KlassHandle h_k(THREAD, this); | 101 KlassHandle h_k(THREAD, this); |
115 } else { | 115 } else { |
116 THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); | 116 THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); |
117 } | 117 } |
118 } | 118 } |
119 | 119 |
120 oop typeArrayKlass::multi_allocate(int rank, jint* last_size, TRAPS) { | 120 oop TypeArrayKlass::multi_allocate(int rank, jint* last_size, TRAPS) { |
121 // For typeArrays this is only called for the last dimension | 121 // For typeArrays this is only called for the last dimension |
122 assert(rank == 1, "just checking"); | 122 assert(rank == 1, "just checking"); |
123 int length = *last_size; | 123 int length = *last_size; |
124 return allocate(length, THREAD); | 124 return allocate(length, THREAD); |
125 } | 125 } |
126 | 126 |
127 | 127 |
128 void typeArrayKlass::copy_array(arrayOop s, int src_pos, arrayOop d, int dst_pos, int length, TRAPS) { | 128 void TypeArrayKlass::copy_array(arrayOop s, int src_pos, arrayOop d, int dst_pos, int length, TRAPS) { |
129 assert(s->is_typeArray(), "must be type array"); | 129 assert(s->is_typeArray(), "must be type array"); |
130 | 130 |
131 // Check destination | 131 // Check destination |
132 if (!d->is_typeArray() || element_type() != typeArrayKlass::cast(d->klass())->element_type()) { | 132 if (!d->is_typeArray() || element_type() != TypeArrayKlass::cast(d->klass())->element_type()) { |
133 THROW(vmSymbols::java_lang_ArrayStoreException()); | 133 THROW(vmSymbols::java_lang_ArrayStoreException()); |
134 } | 134 } |
135 | 135 |
136 // Check is all offsets and lengths are non negative | 136 // Check is all offsets and lengths are non negative |
137 if (src_pos < 0 || dst_pos < 0 || length < 0) { | 137 if (src_pos < 0 || dst_pos < 0 || length < 0) { |
154 Copy::conjoint_memory_atomic(src, dst, (size_t)length << l2es); | 154 Copy::conjoint_memory_atomic(src, dst, (size_t)length << l2es); |
155 } | 155 } |
156 | 156 |
157 | 157 |
158 // create a klass of array holding typeArrays | 158 // create a klass of array holding typeArrays |
159 Klass* typeArrayKlass::array_klass_impl(bool or_null, int n, TRAPS) { | 159 Klass* TypeArrayKlass::array_klass_impl(bool or_null, int n, TRAPS) { |
160 int dim = dimension(); | 160 int dim = dimension(); |
161 assert(dim <= n, "check order of chain"); | 161 assert(dim <= n, "check order of chain"); |
162 if (dim == n) | 162 if (dim == n) |
163 return this; | 163 return this; |
164 | 164 |
171 MutexLocker mc(Compile_lock, THREAD); // for vtables | 171 MutexLocker mc(Compile_lock, THREAD); // for vtables |
172 // Atomic create higher dimension and link into list | 172 // Atomic create higher dimension and link into list |
173 MutexLocker mu(MultiArray_lock, THREAD); | 173 MutexLocker mu(MultiArray_lock, THREAD); |
174 | 174 |
175 if (higher_dimension() == NULL) { | 175 if (higher_dimension() == NULL) { |
176 Klass* oak = objArrayKlass::allocate_objArray_klass( | 176 Klass* oak = ObjArrayKlass::allocate_objArray_klass( |
177 class_loader_data(), dim + 1, this, CHECK_NULL); | 177 class_loader_data(), dim + 1, this, CHECK_NULL); |
178 objArrayKlass* h_ak = objArrayKlass::cast(oak); | 178 ObjArrayKlass* h_ak = ObjArrayKlass::cast(oak); |
179 h_ak->set_lower_dimension(this); | 179 h_ak->set_lower_dimension(this); |
180 OrderAccess::storestore(); | 180 OrderAccess::storestore(); |
181 set_higher_dimension(h_ak); | 181 set_higher_dimension(h_ak); |
182 assert(h_ak->oop_is_objArray(), "incorrect initialization of objArrayKlass"); | 182 assert(h_ak->oop_is_objArray(), "incorrect initialization of ObjArrayKlass"); |
183 } | 183 } |
184 } | 184 } |
185 } else { | 185 } else { |
186 CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops()); | 186 CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops()); |
187 } | 187 } |
188 objArrayKlass* h_ak = objArrayKlass::cast(higher_dimension()); | 188 ObjArrayKlass* h_ak = ObjArrayKlass::cast(higher_dimension()); |
189 if (or_null) { | 189 if (or_null) { |
190 return h_ak->array_klass_or_null(n); | 190 return h_ak->array_klass_or_null(n); |
191 } | 191 } |
192 return h_ak->array_klass(n, CHECK_NULL); | 192 return h_ak->array_klass(n, CHECK_NULL); |
193 } | 193 } |
194 | 194 |
195 Klass* typeArrayKlass::array_klass_impl(bool or_null, TRAPS) { | 195 Klass* TypeArrayKlass::array_klass_impl(bool or_null, TRAPS) { |
196 return array_klass_impl(or_null, dimension() + 1, THREAD); | 196 return array_klass_impl(or_null, dimension() + 1, THREAD); |
197 } | 197 } |
198 | 198 |
199 int typeArrayKlass::oop_size(oop obj) const { | 199 int TypeArrayKlass::oop_size(oop obj) const { |
200 assert(obj->is_typeArray(),"must be a type array"); | 200 assert(obj->is_typeArray(),"must be a type array"); |
201 typeArrayOop t = typeArrayOop(obj); | 201 typeArrayOop t = typeArrayOop(obj); |
202 return t->object_size(); | 202 return t->object_size(); |
203 } | 203 } |
204 | 204 |
205 void typeArrayKlass::oop_follow_contents(oop obj) { | 205 void TypeArrayKlass::oop_follow_contents(oop obj) { |
206 assert(obj->is_typeArray(),"must be a type array"); | 206 assert(obj->is_typeArray(),"must be a type array"); |
207 // Performance tweak: We skip iterating over the klass pointer since we | 207 // Performance tweak: We skip iterating over the klass pointer since we |
208 // know that Universe::typeArrayKlass never moves. | 208 // know that Universe::TypeArrayKlass never moves. |
209 } | 209 } |
210 | 210 |
211 #ifndef SERIALGC | 211 #ifndef SERIALGC |
212 void typeArrayKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) { | 212 void TypeArrayKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) { |
213 assert(obj->is_typeArray(),"must be a type array"); | 213 assert(obj->is_typeArray(),"must be a type array"); |
214 // Performance tweak: We skip iterating over the klass pointer since we | 214 // Performance tweak: We skip iterating over the klass pointer since we |
215 // know that Universe::typeArrayKlass never moves. | 215 // know that Universe::TypeArrayKlass never moves. |
216 } | 216 } |
217 #endif // SERIALGC | 217 #endif // SERIALGC |
218 | 218 |
219 int typeArrayKlass::oop_adjust_pointers(oop obj) { | 219 int TypeArrayKlass::oop_adjust_pointers(oop obj) { |
220 assert(obj->is_typeArray(),"must be a type array"); | 220 assert(obj->is_typeArray(),"must be a type array"); |
221 typeArrayOop t = typeArrayOop(obj); | 221 typeArrayOop t = typeArrayOop(obj); |
222 // Performance tweak: We skip iterating over the klass pointer since we | 222 // Performance tweak: We skip iterating over the klass pointer since we |
223 // know that Universe::typeArrayKlass never moves. | 223 // know that Universe::TypeArrayKlass never moves. |
224 return t->object_size(); | 224 return t->object_size(); |
225 } | 225 } |
226 | 226 |
227 int typeArrayKlass::oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { | 227 int TypeArrayKlass::oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { |
228 assert(obj->is_typeArray(),"must be a type array"); | 228 assert(obj->is_typeArray(),"must be a type array"); |
229 typeArrayOop t = typeArrayOop(obj); | 229 typeArrayOop t = typeArrayOop(obj); |
230 // Performance tweak: We skip iterating over the klass pointer since we | 230 // Performance tweak: We skip iterating over the klass pointer since we |
231 // know that Universe::typeArrayKlass never moves. | 231 // know that Universe::TypeArrayKlass never moves. |
232 return t->object_size(); | 232 return t->object_size(); |
233 } | 233 } |
234 | 234 |
235 int typeArrayKlass::oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { | 235 int TypeArrayKlass::oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { |
236 assert(obj->is_typeArray(),"must be a type array"); | 236 assert(obj->is_typeArray(),"must be a type array"); |
237 typeArrayOop t = typeArrayOop(obj); | 237 typeArrayOop t = typeArrayOop(obj); |
238 // Performance tweak: We skip iterating over the klass pointer since we | 238 // Performance tweak: We skip iterating over the klass pointer since we |
239 // know that Universe::typeArrayKlass never moves. | 239 // know that Universe::TypeArrayKlass never moves. |
240 return t->object_size(); | 240 return t->object_size(); |
241 } | 241 } |
242 | 242 |
243 #ifndef SERIALGC | 243 #ifndef SERIALGC |
244 void typeArrayKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { | 244 void TypeArrayKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
245 ShouldNotReachHere(); | 245 ShouldNotReachHere(); |
246 assert(obj->is_typeArray(),"must be a type array"); | 246 assert(obj->is_typeArray(),"must be a type array"); |
247 } | 247 } |
248 | 248 |
249 int | 249 int |
250 typeArrayKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { | 250 TypeArrayKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { |
251 assert(obj->is_typeArray(),"must be a type array"); | 251 assert(obj->is_typeArray(),"must be a type array"); |
252 return typeArrayOop(obj)->object_size(); | 252 return typeArrayOop(obj)->object_size(); |
253 } | 253 } |
254 #endif // SERIALGC | 254 #endif // SERIALGC |
255 | 255 |
256 void typeArrayKlass::initialize(TRAPS) { | 256 void TypeArrayKlass::initialize(TRAPS) { |
257 // Nothing to do. Having this function is handy since objArrayKlasses can be | 257 // Nothing to do. Having this function is handy since objArrayKlasses can be |
258 // initialized by calling initialize on their bottom_klass, see objArrayKlass::initialize | 258 // initialized by calling initialize on their bottom_klass, see ObjArrayKlass::initialize |
259 } | 259 } |
260 | 260 |
261 const char* typeArrayKlass::external_name(BasicType type) { | 261 const char* TypeArrayKlass::external_name(BasicType type) { |
262 switch (type) { | 262 switch (type) { |
263 case T_BOOLEAN: return "[Z"; | 263 case T_BOOLEAN: return "[Z"; |
264 case T_CHAR: return "[C"; | 264 case T_CHAR: return "[C"; |
265 case T_FLOAT: return "[F"; | 265 case T_FLOAT: return "[F"; |
266 case T_DOUBLE: return "[D"; | 266 case T_DOUBLE: return "[D"; |
274 } | 274 } |
275 | 275 |
276 | 276 |
277 // Printing | 277 // Printing |
278 | 278 |
279 void typeArrayKlass::print_on(outputStream* st) const { | 279 void TypeArrayKlass::print_on(outputStream* st) const { |
280 #ifndef PRODUCT | 280 #ifndef PRODUCT |
281 assert(is_klass(), "must be klass"); | 281 assert(is_klass(), "must be klass"); |
282 print_value_on(st); | 282 print_value_on(st); |
283 Klass::print_on(st); | 283 Klass::print_on(st); |
284 #endif //PRODUCT | 284 #endif //PRODUCT |
285 } | 285 } |
286 | 286 |
287 void typeArrayKlass::print_value_on(outputStream* st) const { | 287 void TypeArrayKlass::print_value_on(outputStream* st) const { |
288 assert(is_klass(), "must be klass"); | 288 assert(is_klass(), "must be klass"); |
289 st->print("{type array "); | 289 st->print("{type array "); |
290 switch (element_type()) { | 290 switch (element_type()) { |
291 case T_BOOLEAN: st->print("bool"); break; | 291 case T_BOOLEAN: st->print("bool"); break; |
292 case T_CHAR: st->print("char"); break; | 292 case T_CHAR: st->print("char"); break; |
362 st->print_cr(" - %3d: 0x%x 0x%x", index, high(v), low(v)); | 362 st->print_cr(" - %3d: 0x%x 0x%x", index, high(v), low(v)); |
363 } | 363 } |
364 } | 364 } |
365 | 365 |
366 | 366 |
367 void typeArrayKlass::oop_print_on(oop obj, outputStream* st) { | 367 void TypeArrayKlass::oop_print_on(oop obj, outputStream* st) { |
368 arrayKlass::oop_print_on(obj, st); | 368 ArrayKlass::oop_print_on(obj, st); |
369 typeArrayOop ta = typeArrayOop(obj); | 369 typeArrayOop ta = typeArrayOop(obj); |
370 int print_len = MIN2((intx) ta->length(), MaxElementPrintSize); | 370 int print_len = MIN2((intx) ta->length(), MaxElementPrintSize); |
371 switch (element_type()) { | 371 switch (element_type()) { |
372 case T_BOOLEAN: print_boolean_array(ta, print_len, st); break; | 372 case T_BOOLEAN: print_boolean_array(ta, print_len, st); break; |
373 case T_CHAR: print_char_array(ta, print_len, st); break; | 373 case T_CHAR: print_char_array(ta, print_len, st); break; |
385 } | 385 } |
386 } | 386 } |
387 | 387 |
388 #endif // PRODUCT | 388 #endif // PRODUCT |
389 | 389 |
390 const char* typeArrayKlass::internal_name() const { | 390 const char* TypeArrayKlass::internal_name() const { |
391 return Klass::external_name(); | 391 return Klass::external_name(); |
392 } | 392 } |