]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_transmute/src/layout/mod.rs
New upstream version 1.64.0+dfsg1
[rustc.git] / compiler / rustc_transmute / src / layout / mod.rs
CommitLineData
064997fb
FG
1use std::fmt::{self, Debug};
2use std::hash::Hash;
3
4pub(crate) mod tree;
5pub(crate) use tree::Tree;
6
7pub(crate) mod nfa;
8pub(crate) use nfa::Nfa;
9
10pub(crate) mod dfa;
11pub(crate) use dfa::Dfa;
12
13#[derive(Debug)]
14pub(crate) struct Uninhabited;
15
16/// An instance of a byte is either initialized to a particular value, or uninitialized.
17#[derive(Hash, Eq, PartialEq, Clone, Copy)]
18pub(crate) enum Byte {
19 Uninit,
20 Init(u8),
21}
22
23impl fmt::Debug for Byte {
24 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25 match &self {
26 Self::Uninit => f.write_str("??u8"),
27 Self::Init(b) => write!(f, "{:#04x}u8", b),
28 }
29 }
30}
31
32pub(crate) trait Def: Debug + Hash + Eq + PartialEq + Copy + Clone {}
33pub trait Ref: Debug + Hash + Eq + PartialEq + Copy + Clone {}
34
35impl Def for ! {}
36impl Ref for ! {}
37
38#[cfg(feature = "rustc")]
39pub(crate) mod rustc {
40 use rustc_middle::mir::Mutability;
41 use rustc_middle::ty;
42 use rustc_middle::ty::Region;
43 use rustc_middle::ty::Ty;
44
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>,
49 ty: Ty<'tcx>,
50 mutability: Mutability,
51 }
52
53 impl<'tcx> super::Ref for Ref<'tcx> {}
54
55 impl<'tcx> Ref<'tcx> {
56 pub fn min_align(&self) -> usize {
57 todo!()
58 }
59 }
60
61 /// A visibility node in the layout.
62 #[derive(Debug, Hash, Eq, PartialEq, Clone, Copy)]
63 pub enum Def<'tcx> {
64 Adt(ty::AdtDef<'tcx>),
65 Variant(&'tcx ty::VariantDef),
66 Field(&'tcx ty::FieldDef),
67 Primitive,
68 }
69
70 impl<'tcx> super::Def for Def<'tcx> {}
71}