fe_mir/ir/
mod.rs

1use fe_common::Span;
2use fe_parser::node::{Node, NodeId};
3
4pub mod basic_block;
5pub mod body_builder;
6pub mod body_cursor;
7pub mod body_order;
8pub mod constant;
9pub mod function;
10pub mod inst;
11pub mod types;
12pub mod value;
13
14pub use basic_block::{BasicBlock, BasicBlockId};
15pub use constant::{Constant, ConstantId};
16pub use function::{FunctionBody, FunctionId, FunctionParam, FunctionSignature};
17pub use inst::{Inst, InstId};
18pub use types::{Type, TypeId, TypeKind};
19pub use value::{Value, ValueId};
20
21/// An original source information that indicates where `mir` entities derive
22/// from. `SourceInfo` is mainly used for diagnostics.
23#[derive(Debug, Clone, PartialEq, Eq, Hash)]
24pub struct SourceInfo {
25    pub span: Span,
26    pub id: NodeId,
27}
28
29impl SourceInfo {
30    pub fn dummy() -> Self {
31        Self {
32            span: Span::dummy(),
33            id: NodeId::dummy(),
34        }
35    }
36
37    pub fn is_dummy(&self) -> bool {
38        self == &Self::dummy()
39    }
40}
41
42impl<T> From<&Node<T>> for SourceInfo {
43    fn from(node: &Node<T>) -> Self {
44        Self {
45            span: node.span,
46            id: node.id,
47        }
48    }
49}