From a876fff5baa2b8a095a1c9eacd50ed11b47b01e7 Mon Sep 17 00:00:00 2001 From: Will Lillis Date: Mon, 28 Apr 2025 03:30:05 -0400 Subject: [PATCH] fix(parse): explicitly move temporaries in the logger callback This fixes problems where these stack-local temporaries are used after their scope ends. (cherry picked from commit dcdd5bc372dae42a14deafedba826d91f02a1ab0) --- cli/src/parse.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cli/src/parse.rs b/cli/src/parse.rs index 3787b739..bc01a908 100644 --- a/cli/src/parse.rs +++ b/cli/src/parse.rs @@ -235,7 +235,7 @@ pub struct ParseStats { pub cumulative_stats: Stats, } -#[derive(Serialize, ValueEnum, Debug, Clone, Default, Eq, PartialEq)] +#[derive(Serialize, ValueEnum, Debug, Copy, Clone, Default, Eq, PartialEq)] pub enum ParseDebugType { #[default] Quiet, @@ -283,10 +283,11 @@ pub fn parse_file_at_path( } // Log to stderr if `--debug` was passed else if opts.debug != ParseDebugType::Quiet { - let mut curr_version: usize = 0usize; + let mut curr_version: usize = 0; let use_color = std::env::var("NO_COLOR").map_or(true, |v| v != "1"); - parser.set_logger(Some(Box::new(|log_type, message| { - if opts.debug == ParseDebugType::Normal { + let debug = opts.debug; + parser.set_logger(Some(Box::new(move |log_type, message| { + if debug == ParseDebugType::Normal { if log_type == LogType::Lex { write!(&mut io::stderr(), " ").unwrap(); }