328 if (java_lang_Class::is_primitive(element_mirror)) { |
328 if (java_lang_Class::is_primitive(element_mirror)) { |
329 Klass* tak = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); |
329 Klass* tak = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); |
330 return TypeArrayKlass::cast(tak)->allocate(length, THREAD); |
330 return TypeArrayKlass::cast(tak)->allocate(length, THREAD); |
331 } else { |
331 } else { |
332 Klass* k = java_lang_Class::as_Klass(element_mirror); |
332 Klass* k = java_lang_Class::as_Klass(element_mirror); |
333 if (k->oop_is_array() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) { |
333 if (k->is_array_klass() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) { |
334 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); |
334 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); |
335 } |
335 } |
336 return oopFactory::new_objArray(k, length, THREAD); |
336 return oopFactory::new_objArray(k, length, THREAD); |
337 } |
337 } |
338 } |
338 } |
364 int dim = len; |
364 int dim = len; |
365 if (java_lang_Class::is_primitive(element_mirror)) { |
365 if (java_lang_Class::is_primitive(element_mirror)) { |
366 klass = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); |
366 klass = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); |
367 } else { |
367 } else { |
368 klass = java_lang_Class::as_Klass(element_mirror); |
368 klass = java_lang_Class::as_Klass(element_mirror); |
369 if (klass->oop_is_array()) { |
369 if (klass->is_array_klass()) { |
370 int k_dim = ArrayKlass::cast(klass)->dimension(); |
370 int k_dim = ArrayKlass::cast(klass)->dimension(); |
371 if (k_dim + len > MAX_DIM) { |
371 if (k_dim + len > MAX_DIM) { |
372 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); |
372 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); |
373 } |
373 } |
374 dim += k_dim; |
374 dim += k_dim; |
385 if (java_lang_Class::is_primitive(mirror)) { |
385 if (java_lang_Class::is_primitive(mirror)) { |
386 return NULL; |
386 return NULL; |
387 } |
387 } |
388 |
388 |
389 Klass* klass = java_lang_Class::as_Klass(mirror); |
389 Klass* klass = java_lang_Class::as_Klass(mirror); |
390 if (!klass->oop_is_array()) { |
390 if (!klass->is_array_klass()) { |
391 return NULL; |
391 return NULL; |
392 } |
392 } |
393 |
393 |
394 oop result = java_lang_Class::component_mirror(mirror); |
394 oop result = java_lang_Class::component_mirror(mirror); |
395 #ifdef ASSERT |
395 #ifdef ASSERT |
396 oop result2 = NULL; |
396 oop result2 = NULL; |
397 if (ArrayKlass::cast(klass)->dimension() == 1) { |
397 if (ArrayKlass::cast(klass)->dimension() == 1) { |
398 if (klass->oop_is_typeArray()) { |
398 if (klass->is_typeArray_klass()) { |
399 result2 = basic_type_arrayklass_to_mirror(klass, CHECK_NULL); |
399 result2 = basic_type_arrayklass_to_mirror(klass, CHECK_NULL); |
400 } else { |
400 } else { |
401 result2 = ObjArrayKlass::cast(klass)->element_klass()->java_mirror(); |
401 result2 = ObjArrayKlass::cast(klass)->element_klass()->java_mirror(); |
402 } |
402 } |
403 } else { |
403 } else { |
404 Klass* lower_dim = ArrayKlass::cast(klass)->lower_dimension(); |
404 Klass* lower_dim = ArrayKlass::cast(klass)->lower_dimension(); |
405 assert(lower_dim->oop_is_array(), "just checking"); |
405 assert(lower_dim->is_array_klass(), "just checking"); |
406 result2 = lower_dim->java_mirror(); |
406 result2 = lower_dim->java_mirror(); |
407 } |
407 } |
408 assert(result == result2, "results must be consistent"); |
408 assert(result == result2, "results must be consistent"); |
409 #endif //ASSERT |
409 #endif //ASSERT |
410 return result; |
410 return result; |
493 access.is_public()) { |
493 access.is_public()) { |
494 return true; |
494 return true; |
495 } |
495 } |
496 |
496 |
497 Klass* host_class = current_class; |
497 Klass* host_class = current_class; |
498 while (host_class->oop_is_instance() && |
498 while (host_class->is_instance_klass() && |
499 InstanceKlass::cast(host_class)->is_anonymous()) { |
499 InstanceKlass::cast(host_class)->is_anonymous()) { |
500 Klass* next_host_class = InstanceKlass::cast(host_class)->host_klass(); |
500 Klass* next_host_class = InstanceKlass::cast(host_class)->host_klass(); |
501 if (next_host_class == NULL) break; |
501 if (next_host_class == NULL) break; |
502 host_class = next_host_class; |
502 host_class = next_host_class; |
503 } |
503 } |