blob: d4f4847c8d3bd2375872567464042ef913cd3869 [file] [log] [blame]
//! 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);