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); |