luaur_analysis/functions/
dump_refinement.rs1extern 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}