mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-27 11:05:06 +00:00
60 lines
1.6 KiB
Rust
60 lines
1.6 KiB
Rust
//! 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);
|