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
|