use regast_syntax::{AnchorKind, NodeId};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct IrId(pub(crate) u32);
impl IrId {
#[must_use]
pub const fn index(self) -> u32 {
self.0
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct ClassSetId(pub(crate) u32);
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum Prov {
Ast(NodeId),
Synth(NodeId),
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub enum IrKind {
Zero,
One,
Anchor(AnchorKind, Prov),
Class(ClassSetId, Prov),
Alt(IrId, IrId, Prov, bool),
Seq(IrId, IrId, Prov),
Star(IrId, Prov, bool),
}
impl IrKind {
#[must_use]
pub const fn provenance(&self) -> Option<Prov> {
match self {
Self::Zero | Self::One => None,
Self::Anchor(_, prov)
| Self::Class(_, prov)
| Self::Alt(_, _, prov, _)
| Self::Seq(_, _, prov)
| Self::Star(_, prov, _) => Some(*prov),
}
}
}