538 |
538 |
539 // It might also have a component mirror. This mirror must already exist. |
539 // It might also have a component mirror. This mirror must already exist. |
540 if (k->oop_is_array()) { |
540 if (k->oop_is_array()) { |
541 Handle comp_mirror; |
541 Handle comp_mirror; |
542 if (k->oop_is_typeArray()) { |
542 if (k->oop_is_typeArray()) { |
543 BasicType type = typeArrayKlass::cast(k())->element_type(); |
543 BasicType type = TypeArrayKlass::cast(k())->element_type(); |
544 comp_mirror = Universe::java_mirror(type); |
544 comp_mirror = Universe::java_mirror(type); |
545 } else { |
545 } else { |
546 assert(k->oop_is_objArray(), "Must be"); |
546 assert(k->oop_is_objArray(), "Must be"); |
547 Klass* element_klass = objArrayKlass::cast(k())->element_klass(); |
547 Klass* element_klass = ObjArrayKlass::cast(k())->element_klass(); |
548 assert(element_klass != NULL, "Must have an element klass"); |
548 assert(element_klass != NULL, "Must have an element klass"); |
549 comp_mirror = Klass::cast(element_klass)->java_mirror(); |
549 comp_mirror = Klass::cast(element_klass)->java_mirror(); |
550 } |
550 } |
551 assert(comp_mirror.not_null(), "must have a mirror"); |
551 assert(comp_mirror.not_null(), "must have a mirror"); |
552 |
552 |
553 // Two-way link between the array klass and its component mirror: |
553 // Two-way link between the array klass and its component mirror: |
554 arrayKlass::cast(k())->set_component_mirror(comp_mirror()); |
554 ArrayKlass::cast(k())->set_component_mirror(comp_mirror()); |
555 set_array_klass(comp_mirror(), k()); |
555 set_array_klass(comp_mirror(), k()); |
556 } else { |
556 } else { |
557 assert(k->oop_is_instance(), "Must be"); |
557 assert(k->oop_is_instance(), "Must be"); |
558 // Initialize static fields |
558 // Initialize static fields |
559 InstanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, CHECK_NULL); |
559 InstanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, CHECK_NULL); |
702 bool is_primitive = (java_class->metadata_field(_klass_offset) == NULL); |
702 bool is_primitive = (java_class->metadata_field(_klass_offset) == NULL); |
703 |
703 |
704 #ifdef ASSERT |
704 #ifdef ASSERT |
705 if (is_primitive) { |
705 if (is_primitive) { |
706 Klass* k = ((Klass*)java_class->metadata_field(_array_klass_offset)); |
706 Klass* k = ((Klass*)java_class->metadata_field(_array_klass_offset)); |
707 assert(k == NULL || is_java_primitive(arrayKlass::cast(k)->element_type()), |
707 assert(k == NULL || is_java_primitive(ArrayKlass::cast(k)->element_type()), |
708 "Should be either the T_VOID primitive or a java primitive"); |
708 "Should be either the T_VOID primitive or a java primitive"); |
709 } |
709 } |
710 #endif |
710 #endif |
711 |
711 |
712 return is_primitive; |
712 return is_primitive; |
717 assert(java_lang_Class::is_primitive(java_class), "just checking"); |
717 assert(java_lang_Class::is_primitive(java_class), "just checking"); |
718 Klass* ak = ((Klass*)java_class->metadata_field(_array_klass_offset)); |
718 Klass* ak = ((Klass*)java_class->metadata_field(_array_klass_offset)); |
719 BasicType type = T_VOID; |
719 BasicType type = T_VOID; |
720 if (ak != NULL) { |
720 if (ak != NULL) { |
721 // Note: create_basic_type_mirror above initializes ak to a non-null value. |
721 // Note: create_basic_type_mirror above initializes ak to a non-null value. |
722 type = arrayKlass::cast(ak)->element_type(); |
722 type = ArrayKlass::cast(ak)->element_type(); |
723 } else { |
723 } else { |
724 assert(java_class == Universe::void_mirror(), "only valid non-array primitive"); |
724 assert(java_class == Universe::void_mirror(), "only valid non-array primitive"); |
725 } |
725 } |
726 assert(Universe::java_mirror(type) == java_class, "must be consistent"); |
726 assert(Universe::java_mirror(type) == java_class, "must be consistent"); |
727 return type; |
727 return type; |
844 } |
844 } |
845 |
845 |
846 |
846 |
847 typeArrayOop java_lang_Thread::name(oop java_thread) { |
847 typeArrayOop java_lang_Thread::name(oop java_thread) { |
848 oop name = java_thread->obj_field(_name_offset); |
848 oop name = java_thread->obj_field(_name_offset); |
849 assert(name == NULL || (name->is_typeArray() && typeArrayKlass::cast(name->klass())->element_type() == T_CHAR), "just checking"); |
849 assert(name == NULL || (name->is_typeArray() && TypeArrayKlass::cast(name->klass())->element_type() == T_CHAR), "just checking"); |
850 return typeArrayOop(name); |
850 return typeArrayOop(name); |
851 } |
851 } |
852 |
852 |
853 |
853 |
854 void java_lang_Thread::set_name(oop java_thread, typeArrayOop name) { |
854 void java_lang_Thread::set_name(oop java_thread, typeArrayOop name) { |