hotspot/src/share/vm/classfile/javaClasses.cpp
changeset 10742 a64c942e4e6b
parent 10565 dc90c239f4ec
child 11564 72cf4575309b
equal deleted inserted replaced
10741:e205f37f249e 10742:a64c942e4e6b
   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");