mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8264732: Clean up LinkResolver::vtable_index_of_interface_method()
Reviewed-by: lfoltan, coleenp, dholmes
This commit is contained in:
parent
b3782ead36
commit
33fa855d5a
3 changed files with 32 additions and 26 deletions
|
@ -3192,6 +3192,34 @@ Method* InstanceKlass::method_at_itable_or_null(InstanceKlass* holder, int index
|
|||
return NULL; // offset entry not found
|
||||
}
|
||||
|
||||
int InstanceKlass::vtable_index_of_interface_method(Method* intf_method) {
|
||||
assert(is_linked(), "required");
|
||||
assert(intf_method->method_holder()->is_interface(), "not an interface method");
|
||||
assert(is_subtype_of(intf_method->method_holder()), "interface not implemented");
|
||||
|
||||
int vtable_index = Method::invalid_vtable_index;
|
||||
Symbol* name = intf_method->name();
|
||||
Symbol* signature = intf_method->signature();
|
||||
|
||||
// First check in default method array
|
||||
if (!intf_method->is_abstract() && default_methods() != NULL) {
|
||||
int index = find_method_index(default_methods(),
|
||||
name, signature,
|
||||
Klass::OverpassLookupMode::find,
|
||||
Klass::StaticLookupMode::find,
|
||||
Klass::PrivateLookupMode::find);
|
||||
if (index >= 0) {
|
||||
vtable_index = default_vtable_indices()->at(index);
|
||||
}
|
||||
}
|
||||
if (vtable_index == Method::invalid_vtable_index) {
|
||||
// get vtable_index for miranda methods
|
||||
klassVtable vt = vtable();
|
||||
vtable_index = vt.index_of_miranda(name, signature);
|
||||
}
|
||||
return vtable_index;
|
||||
}
|
||||
|
||||
#if INCLUDE_JVMTI
|
||||
// update default_methods for redefineclasses for methods that are
|
||||
// not yet in the vtable due to concurrent subclass define and superinterface
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue