use derive_more::Deref;
use microcad_lang_base::SrcRef;
use microcad_lang_proc_macros::SrcReferrer;
use crate::lower::ir;
#[derive(Clone, Debug, Default, Deref, PartialEq, SrcReferrer)]
pub struct RangeFirst(pub Box<ir::Expression>);
impl std::fmt::Display for RangeFirst {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Clone, Debug, Default, Deref, PartialEq, SrcReferrer)]
pub struct RangeLast(pub Box<ir::Expression>);
impl std::fmt::Display for RangeLast {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Clone, Debug, Default, PartialEq, SrcReferrer)]
pub struct RangeExpression {
pub first: RangeFirst,
pub last: RangeLast,
pub src_ref: SrcRef,
}
impl std::fmt::Display for RangeExpression {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}..{}", self.first, self.last)
}
}