use std::rc::Rc;
use microcad_lang_base::{Identifier, SrcRef, SrcReferrer};
use microcad_lang_proc_macros::Identifiable;
use crate::lower::ir;
#[derive(Clone, Debug, Default, Identifiable)]
pub struct ModuleDefinition {
pub keyword_ref: SrcRef,
pub doc: ir::DocBlock,
pub visibility: ir::Visibility,
pub(crate) id: ir::Identifier,
pub body: Option<ir::Body>,
}
impl ModuleDefinition {
pub fn new(visibility: ir::Visibility, id: Identifier) -> Rc<Self> {
Rc::new(Self {
visibility,
id,
..Default::default()
})
}
}
impl SrcReferrer for ModuleDefinition {
fn src_ref(&self) -> SrcRef {
self.id.src_ref()
}
}
impl std::fmt::Display for ModuleDefinition {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{visibility}mod {id}",
id = self.id,
visibility = self.visibility,
)
}
}