C: fix virtual tables

This commit is contained in:
Alexey Andreev 2019-05-16 18:58:36 +03:00
parent f5c2cf0fa3
commit 816434500c

View File

@ -107,11 +107,14 @@ public class VirtualTableProvider {
private void copyEntriesFromSupertype(VirtualTable table, VirtualTable supertypeTable) { private void copyEntriesFromSupertype(VirtualTable table, VirtualTable supertypeTable) {
for (VirtualTableEntry parentEntry : supertypeTable.entries.values()) { for (VirtualTableEntry parentEntry : supertypeTable.entries.values()) {
VirtualTableEntry existingEntry = table.entries.get(parentEntry.getMethod());
if (existingEntry == null || existingEntry.getImplementor() == null) {
VirtualTableEntry entry = new VirtualTableEntry(table, parentEntry.getMethod(), VirtualTableEntry entry = new VirtualTableEntry(table, parentEntry.getMethod(),
parentEntry.getImplementor(), parentEntry.getIndex()); parentEntry.getImplementor(), parentEntry.getIndex());
table.entries.put(entry.getMethod(), entry); table.entries.put(entry.getMethod(), entry);
} }
} }
}
public VirtualTableEntry lookup(MethodReference method) { public VirtualTableEntry lookup(MethodReference method) {
VirtualTable vtable = virtualTables.get(interfaceMapping.mapClass(method.getClassName())); VirtualTable vtable = virtualTables.get(interfaceMapping.mapClass(method.getClassName()));