Skip to main content

luaur_analysis/functions/
dump_refinement.rs

1extern crate alloc;
2
3use crate::functions::dump_def::dump_def;
4use crate::type_aliases::refinement_control_flow_graph::Refinement;
5use alloc::string::String;
6
7pub fn dump_refinement(r: &Refinement) -> String {
8    match r {
9        Refinement::Proposition(p) => {
10            let lhs = dump_def(p.ptr);
11            if let Some(ty) = &p.r#type {
12                let guard = if p.is_typeof { "typeof" } else { "type" };
13                let cmp = if p.sense { "==" } else { "~=" };
14                format!("{} {} {} \"{}\"", lhs, guard, cmp, ty)
15            } else {
16                format!("{}{}", lhs, if p.sense { " truthy" } else { " falsy" })
17            }
18        }
19        Refinement::Conjunction(c) => unsafe {
20            format!(
21                "({} && {})",
22                dump_refinement(&*c.lhs),
23                dump_refinement(&*c.rhs)
24            )
25        },
26        Refinement::Disjunction(d) => unsafe {
27            format!(
28                "({} || {})",
29                dump_refinement(&*d.lhs),
30                dump_refinement(&*d.rhs)
31            )
32        },
33        Refinement::Negation(n) => unsafe { format!("!({})", dump_refinement(&*n.refinement)) },
34    }
35}