equal
deleted
inserted
replaced
28 #include "memory/universe.hpp" |
28 #include "memory/universe.hpp" |
29 #include "oops/klass.hpp" |
29 #include "oops/klass.hpp" |
30 |
30 |
31 class klassVtable; |
31 class klassVtable; |
32 |
32 |
33 // arrayKlass is the abstract baseclass for all array classes |
33 // ArrayKlass is the abstract baseclass for all array classes |
34 |
34 |
35 class arrayKlass: public Klass { |
35 class ArrayKlass: public Klass { |
36 friend class VMStructs; |
36 friend class VMStructs; |
37 private: |
37 private: |
38 int _dimension; // This is n'th-dimensional array. |
38 int _dimension; // This is n'th-dimensional array. |
39 Klass* volatile _higher_dimension; // Refers the (n+1)'th-dimensional array (if present). |
39 Klass* volatile _higher_dimension; // Refers the (n+1)'th-dimensional array (if present). |
40 Klass* volatile _lower_dimension; // Refers the (n-1)'th-dimensional array (if present). |
40 Klass* volatile _lower_dimension; // Refers the (n-1)'th-dimensional array (if present). |
44 |
44 |
45 protected: |
45 protected: |
46 // Constructors |
46 // Constructors |
47 // The constructor with the Symbol argument does the real array |
47 // The constructor with the Symbol argument does the real array |
48 // initialization, the other is a dummy |
48 // initialization, the other is a dummy |
49 arrayKlass(Symbol* name); |
49 ArrayKlass(Symbol* name); |
50 arrayKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for cds"); } |
50 ArrayKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for cds"); } |
51 |
51 |
52 public: |
52 public: |
53 // Testing operation |
53 // Testing operation |
54 bool oop_is_array_slow() const { return true; } |
54 bool oop_is_array_slow() const { return true; } |
55 |
55 |
78 oop component_mirror() const { return _component_mirror; } |
78 oop component_mirror() const { return _component_mirror; } |
79 void set_component_mirror(oop m) { klass_oop_store(&_component_mirror, m); } |
79 void set_component_mirror(oop m) { klass_oop_store(&_component_mirror, m); } |
80 oop* adr_component_mirror() { return (oop*)&this->_component_mirror;} |
80 oop* adr_component_mirror() { return (oop*)&this->_component_mirror;} |
81 |
81 |
82 // Compiler/Interpreter offset |
82 // Compiler/Interpreter offset |
83 static ByteSize component_mirror_offset() { return in_ByteSize(offset_of(arrayKlass, _component_mirror)); } |
83 static ByteSize component_mirror_offset() { return in_ByteSize(offset_of(ArrayKlass, _component_mirror)); } |
84 |
84 |
85 virtual Klass* java_super() const;//{ return SystemDictionary::Object_klass(); } |
85 virtual Klass* java_super() const;//{ return SystemDictionary::Object_klass(); } |
86 |
86 |
87 // Allocation |
87 // Allocation |
88 // Sizes points to the first dimension of the array, subsequent dimensions |
88 // Sizes points to the first dimension of the array, subsequent dimensions |
92 |
92 |
93 // Lookup operations |
93 // Lookup operations |
94 Method* uncached_lookup_method(Symbol* name, Symbol* signature) const; |
94 Method* uncached_lookup_method(Symbol* name, Symbol* signature) const; |
95 |
95 |
96 // Casting from Klass* |
96 // Casting from Klass* |
97 static arrayKlass* cast(Klass* k) { |
97 static ArrayKlass* cast(Klass* k) { |
98 assert(k->oop_is_array(), "cast to arrayKlass"); |
98 assert(k->oop_is_array(), "cast to ArrayKlass"); |
99 return (arrayKlass*) k; |
99 return (ArrayKlass*) k; |
100 } |
100 } |
101 |
101 |
102 GrowableArray<Klass*>* compute_secondary_supers(int num_extra_slots); |
102 GrowableArray<Klass*>* compute_secondary_supers(int num_extra_slots); |
103 bool compute_is_subtype_of(Klass* k); |
103 bool compute_is_subtype_of(Klass* k); |
104 |
104 |
105 // Sizing |
105 // Sizing |
106 static int header_size() { return sizeof(arrayKlass)/HeapWordSize; } |
106 static int header_size() { return sizeof(ArrayKlass)/HeapWordSize; } |
107 static int static_size(int header_size); |
107 static int static_size(int header_size); |
108 |
108 |
109 // Java vtable |
109 // Java vtable |
110 klassVtable* vtable() const; // return new klassVtable |
110 klassVtable* vtable() const; // return new klassVtable |
111 int vtable_length() const { return _vtable_len; } |
111 int vtable_length() const { return _vtable_len; } |
122 |
122 |
123 // GC support |
123 // GC support |
124 virtual void oops_do(OopClosure* cl); |
124 virtual void oops_do(OopClosure* cl); |
125 |
125 |
126 // Return a handle. |
126 // Return a handle. |
127 static void complete_create_array_klass(arrayKlass* k, KlassHandle super_klass, TRAPS); |
127 static void complete_create_array_klass(ArrayKlass* k, KlassHandle super_klass, TRAPS); |
128 |
128 |
129 |
129 |
130 // jvm support |
130 // jvm support |
131 jint compute_modifier_flags(TRAPS) const; |
131 jint compute_modifier_flags(TRAPS) const; |
132 |
132 |