501 int computed_modifiers = k->compute_modifier_flags(CHECK_0); |
501 int computed_modifiers = k->compute_modifier_flags(CHECK_0); |
502 k->set_modifier_flags(computed_modifiers); |
502 k->set_modifier_flags(computed_modifiers); |
503 if (SystemDictionary::Class_klass_loaded() && (k->oop_is_instance() || k->oop_is_javaArray())) { |
503 if (SystemDictionary::Class_klass_loaded() && (k->oop_is_instance() || k->oop_is_javaArray())) { |
504 // Allocate mirror (java.lang.Class instance) |
504 // Allocate mirror (java.lang.Class instance) |
505 Handle mirror = instanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance(k, CHECK_0); |
505 Handle mirror = instanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance(k, CHECK_0); |
506 // Setup indirections |
|
507 mirror->obj_field_put(_klass_offset, k()); |
|
508 k->set_java_mirror(mirror()); |
|
509 |
506 |
510 instanceMirrorKlass* mk = instanceMirrorKlass::cast(mirror->klass()); |
507 instanceMirrorKlass* mk = instanceMirrorKlass::cast(mirror->klass()); |
511 java_lang_Class::set_oop_size(mirror(), mk->instance_size(k)); |
|
512 java_lang_Class::set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror())); |
508 java_lang_Class::set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror())); |
513 |
509 |
514 // It might also have a component mirror. This mirror must already exist. |
510 // It might also have a component mirror. This mirror must already exist. |
515 if (k->oop_is_javaArray()) { |
511 if (k->oop_is_javaArray()) { |
516 Handle comp_mirror; |
512 Handle comp_mirror; |
569 if (type != T_VOID) { |
565 if (type != T_VOID) { |
570 klassOop aklass = Universe::typeArrayKlassObj(type); |
566 klassOop aklass = Universe::typeArrayKlassObj(type); |
571 assert(aklass != NULL, "correct bootstrap"); |
567 assert(aklass != NULL, "correct bootstrap"); |
572 set_array_klass(java_class, aklass); |
568 set_array_klass(java_class, aklass); |
573 } |
569 } |
|
570 #ifdef ASSERT |
574 instanceMirrorKlass* mk = instanceMirrorKlass::cast(SystemDictionary::Class_klass()); |
571 instanceMirrorKlass* mk = instanceMirrorKlass::cast(SystemDictionary::Class_klass()); |
575 java_lang_Class::set_oop_size(java_class, mk->instance_size(oop(NULL))); |
572 assert(java_lang_Class::static_oop_field_count(java_class) == 0, "should have been zeroed by allocation"); |
576 java_lang_Class::set_static_oop_field_count(java_class, 0); |
573 #endif |
577 return java_class; |
574 return java_class; |
578 } |
575 } |
579 |
576 |
580 |
577 |
581 klassOop java_lang_Class::as_klassOop(oop java_class) { |
578 klassOop java_lang_Class::as_klassOop(oop java_class) { |
582 //%note memory_2 |
579 //%note memory_2 |
583 assert(java_lang_Class::is_instance(java_class), "must be a Class object"); |
580 assert(java_lang_Class::is_instance(java_class), "must be a Class object"); |
584 klassOop k = klassOop(java_class->obj_field(_klass_offset)); |
581 klassOop k = klassOop(java_class->obj_field(_klass_offset)); |
585 assert(k == NULL || k->is_klass(), "type check"); |
582 assert(k == NULL || k->is_klass(), "type check"); |
586 return k; |
583 return k; |
|
584 } |
|
585 |
|
586 |
|
587 void java_lang_Class::set_klass(oop java_class, klassOop klass) { |
|
588 assert(java_lang_Class::is_instance(java_class), "must be a Class object"); |
|
589 java_class->obj_field_put(_klass_offset, klass); |
587 } |
590 } |
588 |
591 |
589 |
592 |
590 void java_lang_Class::print_signature(oop java_class, outputStream* st) { |
593 void java_lang_Class::print_signature(oop java_class, outputStream* st) { |
591 assert(java_lang_Class::is_instance(java_class), "must be a Class object"); |
594 assert(java_lang_Class::is_instance(java_class), "must be a Class object"); |