From 0113db3ff7bfe405a67b28cbeb038199176d3bc9 Mon Sep 17 00:00:00 2001 From: Peter Ammon Date: Sun, 2 Mar 2025 11:20:45 -0800 Subject: [PATCH] Make parser.libdata.is_event a bool instead of an int Contrary to the comment, this can and should be a bool. --- src/event.rs | 12 +++--------- src/parse_execution.rs | 6 +++--- src/parser.rs | 5 ++--- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/event.rs b/src/event.rs index 9d40e47f2..1fdc7651d 100644 --- a/src/event.rs +++ b/src/event.rs @@ -460,16 +460,10 @@ pub fn get_function_handlers(name: &wstr) -> EventHandlerList { /// event handler, we make sure to optimize the 'no matches' path. This means that nothing is /// allocated/initialized unless needed. fn fire_internal(parser: &Parser, event: &Event) { - assert!( - parser.libdata().is_event >= 0, - "is_event should not be negative" - ); - // Suppress fish_trace during events. - let is_event = parser.libdata().is_event; - let _inc_event = scoped_push_replacer( + let _set_event = scoped_push_replacer( |new_value| std::mem::replace(&mut parser.libdata_mut().is_event, new_value), - is_event + 1, + true, ); let _suppress_trace = scoped_push_replacer( |new_value| std::mem::replace(&mut parser.libdata_mut().suppress_fish_trace, new_value), @@ -539,7 +533,7 @@ pub fn fire_delayed(parser: &Parser) { let ld = &parser.libdata(); // Do not invoke new event handlers from within event handlers. - if ld.is_event != 0 { + if ld.is_event { return; }; } diff --git a/src/parse_execution.rs b/src/parse_execution.rs index 2792a361e..6add17d13 100644 --- a/src/parse_execution.rs +++ b/src/parse_execution.rs @@ -1625,8 +1625,8 @@ fn run_1_job( let parser = ctx.parser(); let ld = &parser.libdata(); props.skip_notification = - ld.is_subshell || parser.is_block() || ld.is_event != 0 || !parser.is_interactive(); - props.from_event_handler = ld.is_event != 0; + ld.is_subshell || parser.is_block() || ld.is_event || !parser.is_interactive(); + props.from_event_handler = ld.is_event; } let mut job = Job::new(props, self.node_source_owned(job_node)); @@ -1887,7 +1887,7 @@ fn setup_group(&self, ctx: &OperationContext<'_>, j: &mut Job) { } else { // This is a "real job" that gets its own pgroup. j.processes_mut()[0].leads_pgrp = true; - let wants_terminal = ctx.parser().libdata().is_event == 0; + let wants_terminal = !ctx.parser().libdata().is_event; j.group = Some(JobGroup::create_with_job_control( j.command().to_owned(), wants_terminal, diff --git a/src/parser.rs b/src/parser.rs index ce28229d5..79999f956 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -269,9 +269,8 @@ pub struct LibraryData { /// Whether we are running a subshell command. pub is_subshell: bool, - /// Whether we are running an event handler. This is not a bool because we keep count of the - /// event nesting level. - pub is_event: i32, + /// Whether we are running an event handler. + pub is_event: bool, /// Whether we are currently interactive. pub is_interactive: bool,