use rucc_base::Symbol;
use rucc_diag::Span;
use crate::ast::{DesignatorList, InitItemList};
use crate::expr::ExprId;
pub type InitId = rucc_base::Idx<Init>;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Init {
Expr(ExprId),
List(InitItemList),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct InitItem {
pub designators: DesignatorList,
pub init: InitId,
pub span: Span,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Designator {
Field(Symbol),
Index(ExprId),
Range {
lo: ExprId,
hi: ExprId,
},
ObsoleteField(Symbol),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn an_initializer_is_twelve_bytes() {
assert_eq!(size_of::<Init>(), 12);
}
#[test]
fn a_designator_is_twelve_bytes() {
assert_eq!(size_of::<Designator>(), 12);
}
}