hotspot/src/share/vm/oops/typeArrayKlass.cpp

Print this page
rev 611 : Merge


  22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  23  * CA 95054 USA or visit www.sun.com if you need additional information or
  24  * have any questions.
  25  *  
  26  */
  27 
  28 # include "incls/_precompiled.incl"
  29 # include "incls/_typeArrayKlass.cpp.incl"
  30 
  31 bool typeArrayKlass::compute_is_subtype_of(klassOop k) {
  32   if (!k->klass_part()->oop_is_typeArray()) {
  33     return arrayKlass::compute_is_subtype_of(k);
  34   }
  35 
  36   typeArrayKlass* tak = typeArrayKlass::cast(k);
  37   if (dimension() != tak->dimension()) return false;
  38 
  39   return element_type() == tak->element_type();
  40 }
  41 
  42 klassOop typeArrayKlass::create_klass(BasicType type, int scale, TRAPS) {

  43   typeArrayKlass o;
  44 
  45   symbolHandle sym(symbolOop(NULL));
  46   // bootstrapping: don't create sym if symbolKlass not created yet
  47   if (Universe::symbolKlassObj() != NULL) {
  48     sym = oopFactory::new_symbol_handle(external_name(type), CHECK_NULL);
  49   }   
  50   KlassHandle klassklass (THREAD, Universe::typeArrayKlassKlassObj());
  51 
  52   arrayKlassHandle k = base_create_array_klass(o.vtbl_value(), header_size(), klassklass, CHECK_NULL);
  53   typeArrayKlass* ak = typeArrayKlass::cast(k());
  54   ak->set_name(sym());
  55   ak->set_layout_helper(array_layout_helper(type));
  56   assert(scale == (1 << ak->log2_element_size()), "scale must check out");
  57   assert(ak->oop_is_javaArray(), "sanity");
  58   assert(ak->oop_is_typeArray(), "sanity");
  59   ak->set_max_length(arrayOopDesc::max_array_length(type));
  60   assert(k()->size() > header_size(), "bad size");
  61 
  62   // Call complete_create_array_klass after all instance variables have been initialized.
  63   KlassHandle super (THREAD, k->super());
  64   complete_create_array_klass(k, super, CHECK_NULL);
  65 
  66   return k();
  67 }
  68 




  22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  23  * CA 95054 USA or visit www.sun.com if you need additional information or
  24  * have any questions.
  25  *  
  26  */
  27 
  28 # include "incls/_precompiled.incl"
  29 # include "incls/_typeArrayKlass.cpp.incl"
  30 
  31 bool typeArrayKlass::compute_is_subtype_of(klassOop k) {
  32   if (!k->klass_part()->oop_is_typeArray()) {
  33     return arrayKlass::compute_is_subtype_of(k);
  34   }
  35 
  36   typeArrayKlass* tak = typeArrayKlass::cast(k);
  37   if (dimension() != tak->dimension()) return false;
  38 
  39   return element_type() == tak->element_type();
  40 }
  41 
  42 klassOop typeArrayKlass::create_klass(BasicType type, int scale,
  43                                       const char* name_str, TRAPS) {
  44   typeArrayKlass o;
  45 
  46   symbolHandle sym(symbolOop(NULL));
  47   // bootstrapping: don't create sym if symbolKlass not created yet
  48   if (Universe::symbolKlassObj() != NULL && name_str != NULL) {
  49     sym = oopFactory::new_symbol_handle(name_str, CHECK_NULL);
  50   }
  51   KlassHandle klassklass (THREAD, Universe::typeArrayKlassKlassObj());
  52 
  53   arrayKlassHandle k = base_create_array_klass(o.vtbl_value(), header_size(), klassklass, CHECK_NULL);
  54   typeArrayKlass* ak = typeArrayKlass::cast(k());
  55   ak->set_name(sym());
  56   ak->set_layout_helper(array_layout_helper(type));
  57   assert(scale == (1 << ak->log2_element_size()), "scale must check out");
  58   assert(ak->oop_is_javaArray(), "sanity");
  59   assert(ak->oop_is_typeArray(), "sanity");
  60   ak->set_max_length(arrayOopDesc::max_array_length(type));
  61   assert(k()->size() > header_size(), "bad size");
  62 
  63   // Call complete_create_array_klass after all instance variables have been initialized.
  64   KlassHandle super (THREAD, k->super());
  65   complete_create_array_klass(k, super, CHECK_NULL);
  66 
  67   return k();
  68 }
  69