src/share/vm/oops/klassVtable.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/oops

src/share/vm/oops/klassVtable.cpp

Print this page




  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,


src/share/vm/oops/klassVtable.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File