Refactor to make interpreter and codegen backend neutral to vtable internal representation.
This commit is contained in:
parent
14831568d5
commit
a86d3a7e45
10 changed files with 246 additions and 177 deletions
|
@ -959,9 +959,9 @@ rustc_queries! {
|
|||
desc { |tcx| "checking if item has mir available: `{}`", tcx.def_path_str(key) }
|
||||
}
|
||||
|
||||
query vtable_methods(key: ty::PolyTraitRef<'tcx>)
|
||||
-> &'tcx [Option<(DefId, SubstsRef<'tcx>)>] {
|
||||
desc { |tcx| "finding all methods for trait {}", tcx.def_path_str(key.def_id()) }
|
||||
query vtable_entries(key: ty::PolyTraitRef<'tcx>)
|
||||
-> &'tcx [ty::VtblEntry<'tcx>] {
|
||||
desc { |tcx| "finding all vtable entries for trait {}", tcx.def_path_str(key.def_id()) }
|
||||
}
|
||||
|
||||
query codegen_fulfill_obligation(
|
||||
|
|
|
@ -2009,3 +2009,19 @@ impl<'tcx> fmt::Debug for SymbolName<'tcx> {
|
|||
fmt::Display::fmt(&self.name, fmt)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, HashStable)]
|
||||
pub enum VtblEntry<'tcx> {
|
||||
MetadataDropInPlace,
|
||||
MetadataSize,
|
||||
MetadataAlign,
|
||||
Vacant,
|
||||
Method(DefId, SubstsRef<'tcx>),
|
||||
}
|
||||
|
||||
pub const COMMON_VTABLE_ENTRIES: &[VtblEntry<'_>] =
|
||||
&[VtblEntry::MetadataDropInPlace, VtblEntry::MetadataSize, VtblEntry::MetadataAlign];
|
||||
|
||||
pub const COMMON_VTABLE_ENTRIES_DROPINPLACE: usize = 0;
|
||||
pub const COMMON_VTABLE_ENTRIES_SIZE: usize = 1;
|
||||
pub const COMMON_VTABLE_ENTRIES_ALIGN: usize = 2;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue