| //! Defines a set of traits that is used for abstracting |
| //! rustc_public's components that are needed in rustc_public_bridge. |
| //! |
| //! These traits are really useful when programming |
| //! in rustc_public-agnostic settings. |
| |
| use std::fmt::Debug; |
| |
| use super::context::CompilerCtxt; |
| use super::{Bridge, Tables}; |
| |
| pub trait Error { |
| fn new(msg: String) -> Self; |
| fn from_internal<T: Debug>(err: T) -> Self; |
| } |
| |
| pub trait Prov<B: Bridge> { |
| fn new(aid: B::AllocId) -> Self; |
| } |
| |
| pub trait Allocation<B: Bridge> { |
| fn new<'tcx>( |
| bytes: Vec<Option<u8>>, |
| ptrs: Vec<(usize, rustc_middle::mir::interpret::AllocId)>, |
| align: u64, |
| mutability: rustc_middle::mir::Mutability, |
| tables: &mut Tables<'tcx, B>, |
| cx: &CompilerCtxt<'tcx, B>, |
| ) -> Self; |
| } |
| |
| macro_rules! make_bridge_trait { |
| ($name:ident) => { |
| pub trait $name<B: Bridge> { |
| fn new(did: B::DefId) -> Self; |
| } |
| }; |
| } |
| |
| make_bridge_trait!(CrateItem); |
| make_bridge_trait!(AdtDef); |
| make_bridge_trait!(ForeignModuleDef); |
| make_bridge_trait!(ForeignDef); |
| make_bridge_trait!(FnDef); |
| make_bridge_trait!(ClosureDef); |
| make_bridge_trait!(CoroutineDef); |
| make_bridge_trait!(CoroutineClosureDef); |
| make_bridge_trait!(AliasDef); |
| make_bridge_trait!(ParamDef); |
| make_bridge_trait!(BrNamedDef); |
| make_bridge_trait!(TraitDef); |
| make_bridge_trait!(GenericDef); |
| make_bridge_trait!(ConstDef); |
| make_bridge_trait!(ImplDef); |
| make_bridge_trait!(RegionDef); |
| make_bridge_trait!(CoroutineWitnessDef); |
| make_bridge_trait!(AssocDef); |
| make_bridge_trait!(OpaqueDef); |
| make_bridge_trait!(StaticDef); |