use indexmap::IndexMap;
use crate::iir::{
description::{IFnId, IStruct, IStructId},
func::IFn,
path::IIdent,
};
#[derive(Clone, Debug)]
pub struct IFnContext<'a> {
pub func: &'a IFn,
pub context: &'a IContext<'a>,
}
#[derive(Clone, Debug)]
pub struct IContext<'a> {
pub structs: Option<&'a IndexMap<IIdent, IStruct>>,
}
impl IContext<'_> {
pub fn empty() -> IContext<'static> {
IContext { structs: None }
}
pub fn struct_with_id(&self, id: IStructId) -> &IStruct {
let Some(structs) = self.structs else {
panic!("Should have structs when looking up one");
};
structs
.get_index(id.0)
.expect("Struct with given id should exist")
.1
}
pub fn fn_with_id(&self, id: IFnId) -> &IFn {
self.struct_with_id(id.struct_id)
.fns
.get_index(id.fn_index)
.expect("Call with given id should exist")
.1
}
}