comparison src/share/vm/oops/klassVtable.hpp @ 6934:4735d2c84362

7200776: Implement default methods in interfaces Summary: Add generic type analysis and default method selection algorithms Reviewed-by: coleenp, acorn
author kamg
date Thu, 11 Oct 2012 12:25:42 -0400
parents d8ce2825b193
children 8d9fc28831cc
comparison
equal deleted inserted replaced
6921:a1b8cf9cf970 6934:4735d2c84362
82 // is necessary. 82 // is necessary.
83 void clear_vtable(); 83 void clear_vtable();
84 bool is_initialized(); 84 bool is_initialized();
85 85
86 // computes vtable length (in words) and the number of miranda methods 86 // computes vtable length (in words) and the number of miranda methods
87 static void compute_vtable_size_and_num_mirandas(int &vtable_length, int &num_miranda_methods, 87 static void compute_vtable_size_and_num_mirandas(
88 Klass* super, Array<Method*>* methods, 88 int* vtable_length, int* num_new_mirandas,
89 AccessFlags class_flags, Handle classloader, 89 GrowableArray<Method*>* all_mirandas, Klass* super,
90 Symbol* classname, Array<Klass*>* local_interfaces, 90 Array<Method*>* methods, AccessFlags class_flags, Handle classloader,
91 TRAPS); 91 Symbol* classname, Array<Klass*>* local_interfaces, TRAPS);
92 92
93 // RedefineClasses() API support: 93 // RedefineClasses() API support:
94 // If any entry of this vtable points to any of old_methods, 94 // If any entry of this vtable points to any of old_methods,
95 // replace it with the corresponding new_method. 95 // replace it with the corresponding new_method.
96 // trace_name_printed is set to true if the current call has 96 // trace_name_printed is set to true if the current call has
123 InstanceKlass* find_transitive_override(InstanceKlass* initialsuper, methodHandle target_method, int vtable_index, 123 InstanceKlass* find_transitive_override(InstanceKlass* initialsuper, methodHandle target_method, int vtable_index,
124 Handle target_loader, Symbol* target_classname, Thread* THREAD); 124 Handle target_loader, Symbol* target_classname, Thread* THREAD);
125 125
126 // support for miranda methods 126 // support for miranda methods
127 bool is_miranda_entry_at(int i); 127 bool is_miranda_entry_at(int i);
128 void fill_in_mirandas(int& initialized); 128 void fill_in_mirandas(int* initialized);
129 static bool is_miranda(Method* m, Array<Method*>* class_methods, Klass* super); 129 static bool is_miranda(Method* m, Array<Method*>* class_methods, Klass* super);
130 static void add_new_mirandas_to_list(GrowableArray<Method*>* list_of_current_mirandas, Array<Method*>* current_interface_methods, Array<Method*>* class_methods, Klass* super); 130 static void add_new_mirandas_to_lists(
131 static void get_mirandas(GrowableArray<Method*>* mirandas, Klass* super, Array<Method*>* class_methods, Array<Klass*>* local_interfaces); 131 GrowableArray<Method*>* new_mirandas,
132 static int get_num_mirandas(Klass* super, Array<Method*>* class_methods, Array<Klass*>* local_interfaces); 132 GrowableArray<Method*>* all_mirandas,
133 133 Array<Method*>* current_interface_methods, Array<Method*>* class_methods,
134 Klass* super);
135 static void get_mirandas(
136 GrowableArray<Method*>* new_mirandas,
137 GrowableArray<Method*>* all_mirandas, Klass* super,
138 Array<Method*>* class_methods, Array<Klass*>* local_interfaces);
134 139
135 void verify_against(outputStream* st, klassVtable* vt, int index); 140 void verify_against(outputStream* st, klassVtable* vt, int index);
136 inline InstanceKlass* ik() const; 141 inline InstanceKlass* ik() const;
137 }; 142 };
138 143