22 * 23 */ 24 25 #include "precompiled.hpp" 26 #include "classfile/systemDictionary.hpp" 27 #include "classfile/vmSymbols.hpp" 28 #include "gc_implementation/shared/markSweep.inline.hpp" 29 #include "memory/gcLocker.hpp" 30 #include "memory/resourceArea.hpp" 31 #include "memory/universe.inline.hpp" 32 #include "oops/instanceKlass.hpp" 33 #include "oops/klassVtable.hpp" 34 #include "oops/method.hpp" 35 #include "oops/objArrayOop.hpp" 36 #include "oops/oop.inline.hpp" 37 #include "prims/jvmtiRedefineClassesTrace.hpp" 38 #include "runtime/arguments.hpp" 39 #include "runtime/handles.inline.hpp" 40 #include "utilities/copy.hpp" 41 42 inline InstanceKlass* klassVtable::ik() const { 43 Klass* k = _klass(); 44 assert(k->oop_is_instance(), "not an InstanceKlass"); 45 return (InstanceKlass*)k; 46 } 47 48 49 // this function computes the vtable size (including the size needed for miranda 50 // methods) and the number of miranda methods in this class. 51 // Note on Miranda methods: Let's say there is a class C that implements 52 // interface I, and none of C's superclasses implements I. 53 // Let's say there is an abstract method m in I that neither C 54 // nor any of its super classes implement (i.e there is no method of any access, 55 // with the same name and signature as m), then m is a Miranda method which is 56 // entered as a public abstract method in C's vtable. From then on it should 57 // treated as any other public method in C for method over-ride purposes. 58 void klassVtable::compute_vtable_size_and_num_mirandas( 59 int* vtable_length_ret, int* num_new_mirandas, 60 GrowableArray<Method*>* all_mirandas, Klass* super, 61 Array<Method*>* methods, AccessFlags class_flags, | 22 * 23 */ 24 25 #include "precompiled.hpp" 26 #include "classfile/systemDictionary.hpp" 27 #include "classfile/vmSymbols.hpp" 28 #include "gc_implementation/shared/markSweep.inline.hpp" 29 #include "memory/gcLocker.hpp" 30 #include "memory/resourceArea.hpp" 31 #include "memory/universe.inline.hpp" 32 #include "oops/instanceKlass.hpp" 33 #include "oops/klassVtable.hpp" 34 #include "oops/method.hpp" 35 #include "oops/objArrayOop.hpp" 36 #include "oops/oop.inline.hpp" 37 #include "prims/jvmtiRedefineClassesTrace.hpp" 38 #include "runtime/arguments.hpp" 39 #include "runtime/handles.inline.hpp" 40 #include "utilities/copy.hpp" 41 42 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC 43 44 inline InstanceKlass* klassVtable::ik() const { 45 Klass* k = _klass(); 46 assert(k->oop_is_instance(), "not an InstanceKlass"); 47 return (InstanceKlass*)k; 48 } 49 50 51 // this function computes the vtable size (including the size needed for miranda 52 // methods) and the number of miranda methods in this class. 53 // Note on Miranda methods: Let's say there is a class C that implements 54 // interface I, and none of C's superclasses implements I. 55 // Let's say there is an abstract method m in I that neither C 56 // nor any of its super classes implement (i.e there is no method of any access, 57 // with the same name and signature as m), then m is a Miranda method which is 58 // entered as a public abstract method in C's vtable. From then on it should 59 // treated as any other public method in C for method over-ride purposes. 60 void klassVtable::compute_vtable_size_and_num_mirandas( 61 int* vtable_length_ret, int* num_new_mirandas, 62 GrowableArray<Method*>* all_mirandas, Klass* super, 63 Array<Method*>* methods, AccessFlags class_flags, |