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#[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}