Wed, 01 May 2013 08:07:59 -0700
8013418: assert(i == total_args_passed) in AdapterHandlerLibrary::get_adapter since 8-b87
Summary: Do not treat static methods as miranda methods.
Reviewed-by: dholmes, acorn
1 /*
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
25 #ifndef SHARE_VM_OOPS_ARRAYKLASS_HPP
26 #define SHARE_VM_OOPS_ARRAYKLASS_HPP
28 #include "memory/universe.hpp"
29 #include "oops/klass.hpp"
31 class klassVtable;
33 // ArrayKlass is the abstract baseclass for all array classes
35 class ArrayKlass: public Klass {
36 friend class VMStructs;
37 private:
38 int _dimension; // This is n'th-dimensional array.
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).
41 int _vtable_len; // size of vtable for this klass
42 juint _alloc_size; // allocation profiling support
43 oop _component_mirror; // component type, as a java/lang/Class
45 protected:
46 // Constructors
47 // The constructor with the Symbol argument does the real array
48 // initialization, the other is a dummy
49 ArrayKlass(Symbol* name);
50 ArrayKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for cds"); }
52 public:
53 // Testing operation
54 bool oop_is_array_slow() const { return true; }
56 // Instance variables
57 int dimension() const { return _dimension; }
58 void set_dimension(int dimension) { _dimension = dimension; }
60 Klass* higher_dimension() const { return _higher_dimension; }
61 void set_higher_dimension(Klass* k) { _higher_dimension = k; }
62 Klass** adr_higher_dimension() { return (Klass**)&this->_higher_dimension;}
64 Klass* lower_dimension() const { return _lower_dimension; }
65 void set_lower_dimension(Klass* k) { _lower_dimension = k; }
66 Klass** adr_lower_dimension() { return (Klass**)&this->_lower_dimension;}
68 // Allocation profiling support
69 juint alloc_size() const { return _alloc_size; }
70 void set_alloc_size(juint n) { _alloc_size = n; }
72 // offset of first element, including any padding for the sake of alignment
73 int array_header_in_bytes() const { return layout_helper_header_size(layout_helper()); }
74 int log2_element_size() const { return layout_helper_log2_element_size(layout_helper()); }
75 // type of elements (T_OBJECT for both oop arrays and array-arrays)
76 BasicType element_type() const { return layout_helper_element_type(layout_helper()); }
78 oop component_mirror() const { return _component_mirror; }
79 void set_component_mirror(oop m) { klass_oop_store(&_component_mirror, m); }
80 oop* adr_component_mirror() { return (oop*)&this->_component_mirror;}
82 // Compiler/Interpreter offset
83 static ByteSize component_mirror_offset() { return in_ByteSize(offset_of(ArrayKlass, _component_mirror)); }
85 virtual Klass* java_super() const;//{ return SystemDictionary::Object_klass(); }
87 // Allocation
88 // Sizes points to the first dimension of the array, subsequent dimensions
89 // are always in higher memory. The callers of these set that up.
90 virtual oop multi_allocate(int rank, jint* sizes, TRAPS);
91 objArrayOop allocate_arrayArray(int n, int length, TRAPS);
93 // Lookup operations
94 Method* uncached_lookup_method(Symbol* name, Symbol* signature) const;
96 // Casting from Klass*
97 static ArrayKlass* cast(Klass* k) {
98 assert(k->oop_is_array(), "cast to ArrayKlass");
99 return (ArrayKlass*) k;
100 }
102 GrowableArray<Klass*>* compute_secondary_supers(int num_extra_slots);
103 bool compute_is_subtype_of(Klass* k);
105 // Sizing
106 static int header_size() { return sizeof(ArrayKlass)/HeapWordSize; }
107 static int static_size(int header_size);
109 #if INCLUDE_SERVICES
110 virtual void collect_statistics(KlassSizeStats *sz) const {
111 Klass::collect_statistics(sz);
112 // Do nothing for now, but remember to modify if you add new
113 // stuff to ArrayKlass.
114 }
115 #endif
117 // Java vtable
118 klassVtable* vtable() const; // return new klassVtable
119 int vtable_length() const { return _vtable_len; }
120 static int base_vtable_length() { return Universe::base_vtable_size(); }
121 void set_vtable_length(int len) { assert(len == base_vtable_length(), "bad length"); _vtable_len = len; }
122 protected:
123 inline intptr_t* start_of_vtable() const;
125 public:
126 // Iterators
127 void array_klasses_do(void f(Klass* k));
128 void array_klasses_do(void f(Klass* k, TRAPS), TRAPS);
129 void with_array_klasses_do(void f(Klass* k));
131 // GC support
132 virtual void oops_do(OopClosure* cl);
134 // Return a handle.
135 static void complete_create_array_klass(ArrayKlass* k, KlassHandle super_klass, TRAPS);
138 // jvm support
139 jint compute_modifier_flags(TRAPS) const;
141 // JVMTI support
142 jint jvmti_class_status() const;
144 // CDS support - remove and restore oops from metadata. Oops are not shared.
145 virtual void remove_unshareable_info();
146 virtual void restore_unshareable_info(TRAPS);
148 // Printing
149 void print_on(outputStream* st) const;
150 void print_value_on(outputStream* st) const;
152 void oop_print_on(oop obj, outputStream* st);
154 // Verification
155 void verify_on(outputStream* st);
157 void oop_verify_on(oop obj, outputStream* st);
158 };
160 #endif // SHARE_VM_OOPS_ARRAYKLASS_HPP