1 use std::fmt::{self, Debug};
5 pub(crate) use tree::Tree;
8 pub(crate) use nfa::Nfa;
11 pub(crate) use dfa::Dfa;
14 pub(crate) struct Uninhabited;
16 /// An instance of a byte is either initialized to a particular value, or uninitialized.
17 #[derive(Hash, Eq, PartialEq, Clone, Copy)]
18 pub(crate) enum Byte {
23 impl fmt::Debug for Byte {
24 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26 Self::Uninit => f.write_str("??u8"),
27 Self::Init(b) => write!(f, "{:#04x}u8", b),
32 pub(crate) trait Def: Debug + Hash + Eq + PartialEq + Copy + Clone {}
33 pub trait Ref: Debug + Hash + Eq + PartialEq + Copy + Clone {}
38 #[cfg(feature = "rustc")]
39 pub(crate) mod rustc {
40 use rustc_middle::mir::Mutability;
42 use rustc_middle::ty::Region;
43 use rustc_middle::ty::Ty;
45 /// A reference in the layout.
46 #[derive(Debug, Hash, Eq, PartialEq, PartialOrd, Ord, Clone, Copy)]
47 pub struct Ref<'tcx> {
48 lifetime: Region<'tcx>,
50 mutability: Mutability,
53 impl<'tcx> super::Ref for Ref<'tcx> {}
55 impl<'tcx> Ref<'tcx> {
56 pub fn min_align(&self) -> usize {
61 /// A visibility node in the layout.
62 #[derive(Debug, Hash, Eq, PartialEq, Clone, Copy)]
64 Adt(ty::AdtDef<'tcx>),
65 Variant(&'tcx ty::VariantDef),
66 Field(&'tcx ty::FieldDef),
70 impl<'tcx> super::Def for Def<'tcx> {}