51 |
51 |
52 klassOop typeArrayKlass::create_klass(BasicType type, int scale, |
52 klassOop typeArrayKlass::create_klass(BasicType type, int scale, |
53 const char* name_str, TRAPS) { |
53 const char* name_str, TRAPS) { |
54 typeArrayKlass o; |
54 typeArrayKlass o; |
55 |
55 |
56 symbolHandle sym(symbolOop(NULL)); |
56 Symbol* sym = NULL; |
57 // bootstrapping: don't create sym if symbolKlass not created yet |
57 if (name_str != NULL) { |
58 if (Universe::symbolKlassObj() != NULL && name_str != NULL) { |
58 sym = SymbolTable::new_symbol(name_str, CHECK_NULL); |
59 sym = oopFactory::new_symbol_handle(name_str, CHECK_NULL); |
|
60 } |
59 } |
61 KlassHandle klassklass (THREAD, Universe::typeArrayKlassKlassObj()); |
60 KlassHandle klassklass (THREAD, Universe::typeArrayKlassKlassObj()); |
62 |
61 |
63 arrayKlassHandle k = base_create_array_klass(o.vtbl_value(), header_size(), klassklass, CHECK_NULL); |
62 arrayKlassHandle k = base_create_array_klass(o.vtbl_value(), header_size(), klassklass, CHECK_NULL); |
64 typeArrayKlass* ak = typeArrayKlass::cast(k()); |
63 typeArrayKlass* ak = typeArrayKlass::cast(k()); |
65 ak->set_name(sym()); |
64 ak->set_name(sym); |
66 ak->set_layout_helper(array_layout_helper(type)); |
65 ak->set_layout_helper(array_layout_helper(type)); |
67 assert(scale == (1 << ak->log2_element_size()), "scale must check out"); |
66 assert(scale == (1 << ak->log2_element_size()), "scale must check out"); |
68 assert(ak->oop_is_javaArray(), "sanity"); |
67 assert(ak->oop_is_javaArray(), "sanity"); |
69 assert(ak->oop_is_typeArray(), "sanity"); |
68 assert(ak->oop_is_typeArray(), "sanity"); |
70 ak->set_max_length(arrayOopDesc::max_array_length(type)); |
69 ak->set_max_length(arrayOopDesc::max_array_length(type)); |