hotspot/src/share/vm/oops/klassVtable.hpp
changeset 2264 55d0115a54fe
parent 189 4248c8e21063
child 2343 6113864ecd70
equal deleted inserted replaced
2263:f73ef83db2ab 2264:55d0115a54fe
    68   void initialize_vtable(bool checkconstraints, TRAPS);   // initialize vtable of a new klass
    68   void initialize_vtable(bool checkconstraints, TRAPS);   // initialize vtable of a new klass
    69 
    69 
    70   // conputes vtable length (in words) and the number of miranda methods
    70   // conputes vtable length (in words) and the number of miranda methods
    71   static void compute_vtable_size_and_num_mirandas(int &vtable_length, int &num_miranda_methods,
    71   static void compute_vtable_size_and_num_mirandas(int &vtable_length, int &num_miranda_methods,
    72                                                    klassOop super, objArrayOop methods,
    72                                                    klassOop super, objArrayOop methods,
    73                                                    AccessFlags class_flags, oop classloader,
    73                                                    AccessFlags class_flags, Handle classloader,
    74                                                    symbolOop classname, objArrayOop local_interfaces);
    74                                                    symbolHandle classname, objArrayOop local_interfaces,
       
    75                                                    TRAPS);
    75 
    76 
    76   // RedefineClasses() API support:
    77   // RedefineClasses() API support:
    77   // If any entry of this vtable points to any of old_methods,
    78   // If any entry of this vtable points to any of old_methods,
    78   // replace it with the corresponding new_method.
    79   // replace it with the corresponding new_method.
    79   // trace_name_printed is set to true if the current call has
    80   // trace_name_printed is set to true if the current call has
   109 #endif
   110 #endif
   110 
   111 
   111  protected:
   112  protected:
   112   friend class vtableEntry;
   113   friend class vtableEntry;
   113  private:
   114  private:
       
   115   enum { VTABLE_TRANSITIVE_OVERRIDE_VERSION = 51 } ;
   114   void copy_vtable_to(vtableEntry* start);
   116   void copy_vtable_to(vtableEntry* start);
   115   int  initialize_from_super(KlassHandle super);
   117   int  initialize_from_super(KlassHandle super);
   116   int  index_of(methodOop m, int len) const; // same as index_of, but search only up to len
   118   int  index_of(methodOop m, int len) const; // same as index_of, but search only up to len
   117   void put_method_at(methodOop m, int index);
   119   void put_method_at(methodOop m, int index);
   118   static bool needs_new_vtable_entry(methodOop m, klassOop super, oop classloader, symbolOop classname, AccessFlags access_flags);
   120   static bool needs_new_vtable_entry(methodHandle m, klassOop super, Handle classloader, symbolHandle classname, AccessFlags access_flags, TRAPS);
   119   AccessType vtable_accessibility_at(int i);
   121 
   120 
   122   bool update_inherited_vtable(instanceKlass* klass, methodHandle target_method, int super_vtable_len, bool checkconstraints, TRAPS);
   121   bool update_super_vtable(instanceKlass* klass, methodHandle target_method, int super_vtable_len, bool checkconstraints, TRAPS);
   123  instanceKlass* find_transitive_override(instanceKlass* initialsuper, methodHandle target_method, int vtable_index,
       
   124                                          Handle target_loader, symbolHandle target_classname, Thread* THREAD);
   122 
   125 
   123   // support for miranda methods
   126   // support for miranda methods
   124   bool is_miranda_entry_at(int i);
   127   bool is_miranda_entry_at(int i);
   125   void fill_in_mirandas(int& initialized);
   128   void fill_in_mirandas(int& initialized);
   126   static bool is_miranda(methodOop m, objArrayOop class_methods, klassOop super);
   129   static bool is_miranda(methodOop m, objArrayOop class_methods, klassOop super);