mirsa-domains 0.2.0

Abstract interpretation domains for mirsa
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum NullPtr {
    Bot,
    Null,
    NonNull,
    MaybeNull,
}

impl std::fmt::Display for NullPtr {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            NullPtr::Bot => write!(f, "Bot"),
            NullPtr::Null => write!(f, "Null"),
            NullPtr::NonNull => write!(f, "NonNull"),
            NullPtr::MaybeNull => write!(f, "MaybeNull"),
        }
    }
}

pub fn join(a: NullPtr, b: NullPtr) -> NullPtr {
    use NullPtr::*;
    match (a, b) {
        (Bot, x) | (x, Bot) => x,
        (x, y) if x == y => x,
        _ => MaybeNull,
    }
}