blob: 379a8da5df9d284f4071a497556a64f29b1f3633 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
//! 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::SmirCtxt;
use super::{Bridge, Tables};
pub trait SmirError {
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: &SmirCtxt<'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);
|