litex-lang 0.9.88-beta

The Formal Way to Write Math as It Looks
Documentation
use crate::prelude::*;

#[derive(Clone, Default)]
pub struct KnownFnInfo {
    pub fn_set: Option<(FnSetBody, LineFile)>,
    /// Defining expression: `have fn … = rhs` or `name = '…{…}` anonymous body.
    pub equal_to: Option<(Obj, LineFile)>,
    /// Narrower `$restrict_fn_in` target signatures.
    pub restrict_to: Option<Vec<(FnSetBody, LineFile)>>,
}

impl KnownFnInfo {
    /// Build from optional pieces; fields can be filled later via `update_*`.
    pub fn merge_fn_set_equal_to(
        fn_set: Option<(FnSetBody, LineFile)>,
        equal_to: Option<(Obj, LineFile)>,
    ) -> Self {
        KnownFnInfo {
            fn_set,
            equal_to,
            restrict_to: None,
        }
    }

    pub fn update_restrict_to(&mut self, restrict_to: FnSetBody, line_file: LineFile) {
        match self.restrict_to.as_mut() {
            Some(v) => v.push((restrict_to, line_file)),
            None => self.restrict_to = Some(vec![(restrict_to, line_file)]),
        }
    }

    pub fn update_equal_to(&mut self, equal_to: Obj, line_file: LineFile) {
        self.equal_to = Some((equal_to, line_file));
    }

    pub fn update_fn_set(&mut self, fn_set: FnSetBody, line_file: LineFile) {
        self.fn_set = Some((fn_set, line_file));
    }
}