From 0d707ed9f4597fdfd6ec033a8f97490501f27adb Mon Sep 17 00:00:00 2001 From: Jaemin Hong Date: Thu, 25 Jul 2024 07:24:25 +0000 Subject: [PATCH] print unions --- src/bin/urcrat.rs | 4 ++++ src/tag_analysis.rs | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/bin/urcrat.rs b/src/bin/urcrat.rs index a9cd4df..f9da6ea 100644 --- a/src/bin/urcrat.rs +++ b/src/bin/urcrat.rs @@ -17,6 +17,8 @@ enum Command { dump: Option, }, Must { + #[arg(long)] + print_unions: bool, #[arg(short, long)] may: Option, #[arg(short, long)] @@ -69,6 +71,7 @@ fn main() { } } Command::Must { + print_unions, may, r#union, output, @@ -92,6 +95,7 @@ fn main() { may_analysis::deserialize_solutions(&arr) }); let conf = tag_analysis::Config { + print_unions, solutions, unions: r#union.into_iter().collect(), transform, diff --git a/src/tag_analysis.rs b/src/tag_analysis.rs index 4b712b6..f463a98 100644 --- a/src/tag_analysis.rs +++ b/src/tag_analysis.rs @@ -41,6 +41,7 @@ use crate::*; #[derive(Debug, Clone)] pub struct Config { + pub print_unions: bool, pub solutions: Option, pub unions: HashSet, pub transform: bool, @@ -578,6 +579,19 @@ pub fn analyze(tcx: TyCtxt<'_>, conf: &Config) -> Statistics { stat.tagged_unions = tagged_unions.len(); stat.must_analysis = start.elapsed().as_millis() as usize; + if conf.print_unions { + println!("Tagged unions"); + for u in tagged_unions.keys() { + println!("{}", tcx.def_path_str(*u)); + } + println!("Others"); + for u in &unions { + if !tagged_unions.contains_key(u) { + println!("{}", tcx.def_path_str(*u)); + } + } + } + if tagged_unions.is_empty() { if conf.verbose { println!("No tagged union identified");