diff --git a/src/bin/fish.rs b/src/bin/fish.rs index e919f3ed6..228d6f72e 100644 --- a/src/bin/fish.rs +++ b/src/bin/fish.rs @@ -69,7 +69,6 @@ use std::fs::File; use std::os::unix::prelude::*; use std::path::Path; -use std::rc::Rc; use std::sync::atomic::Ordering; use std::sync::Arc; use std::{env, ops::ControlFlow}; @@ -520,7 +519,7 @@ fn throwing_main() -> i32 { reader_init(true); // Construct the root parser! - let env = Rc::new(EnvStack::globals().create_child(true /* dispatches_var_changes */)); + let env = EnvStack::globals().create_child(true /* dispatches_var_changes */); let parser = &Parser::new(env, CancelBehavior::Clear); parser.set_syncs_uvars(!opts.no_config); diff --git a/src/input.rs b/src/input.rs index acdcd1716..bf87aa6f7 100644 --- a/src/input.rs +++ b/src/input.rs @@ -829,11 +829,11 @@ pub fn read_char(&mut self) -> CharEvent { } fn mapping_execute_matching_or_generic(&mut self) { - let vars = self.parser.vars_ref(); + let vars = self.parser.vars(); let mut peeker = EventQueuePeeker::new(self); // Check for ordinary mappings. let ip = input_mappings(); - if let Some(mapping) = peeker.find_mapping(&*vars, &ip) { + if let Some(mapping) = peeker.find_mapping(vars, &ip) { FLOG!( reader, format!("Found mapping {:?} from {:?}", &mapping, &peeker.peeked) diff --git a/src/operation_context.rs b/src/operation_context.rs index f1b7ffb1d..e7b3bf0e1 100644 --- a/src/operation_context.rs +++ b/src/operation_context.rs @@ -49,7 +49,7 @@ pub struct OperationContext<'a> { impl<'a> OperationContext<'a> { pub fn vars(&self) -> &dyn Environment { match &self.vars { - Vars::Parser(parser) => &*parser.variables, + Vars::Parser(parser) => &parser.variables, Vars::Vars(vars) => *vars, Vars::TestOnly(_, vars) => *vars, } diff --git a/src/parser.rs b/src/parser.rs index a58cefb46..27d9cfeae 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -422,7 +422,7 @@ pub struct Parser { block_list: RefCell>, /// Set of variables for the parser. - pub variables: Rc, + pub variables: EnvStack, /// Data managed in a scoped fashion. scoped_data: ScopedCell, @@ -448,7 +448,7 @@ pub struct Parser { impl Parser { /// Create a parser. - pub fn new(variables: Rc, cancel_behavior: CancelBehavior) -> Parser { + pub fn new(variables: EnvStack, cancel_behavior: CancelBehavior) -> Parser { let result = Self { line_counter: ScopedRefCell::new(LineCounter::empty()), job_list: RefCell::default(), @@ -886,11 +886,6 @@ pub fn vars(&self) -> &EnvStack { &self.variables } - /// Get the variables as an Rc. - pub fn vars_ref(&self) -> Rc { - Rc::clone(&self.variables) - } - /// Get a copy of the scoped data. #[inline(always)] pub fn scope(&self) -> ScopedData { diff --git a/src/reader.rs b/src/reader.rs index 2b062fae0..0ee538aa3 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -5902,7 +5902,7 @@ fn try_expand_wildcard( const TAB_COMPLETE_WILDCARD_MAX_EXPANSION: usize = 256; let ctx = OperationContext::background_with_cancel_checker( - &*parser.variables, + &parser.variables, Box::new(|| signal_check_cancel() != 0), TAB_COMPLETE_WILDCARD_MAX_EXPANSION, ); diff --git a/src/tests/input.rs b/src/tests/input.rs index 89b55cd6b..952a3e087 100644 --- a/src/tests/input.rs +++ b/src/tests/input.rs @@ -4,7 +4,6 @@ use crate::key::Key; use crate::wchar::prelude::*; use std::cell::{RefCell, RefMut}; -use std::rc::Rc; struct TestInputEventQueuer { input_data: InputData, @@ -25,7 +24,7 @@ fn blocking_query(&self) -> RefMut<'_, Option> { #[test] fn test_input() { - let vars = Rc::new(EnvStack::new()); + let vars = EnvStack::new(); let mut input = TestInputEventQueuer { input_data: InputData::new(i32::MAX), // value doesn't matter since we don't read from it blocking_query: RefCell::new(None), @@ -65,7 +64,7 @@ fn test_input() { } let mut peeker = EventQueuePeeker::new(&mut input); - let mapping = peeker.find_mapping(&*vars, &input_mappings); + let mapping = peeker.find_mapping(&vars, &input_mappings); assert!(mapping.is_some()); assert!(mapping.unwrap().commands == ["down-line"]); peeker.restart(); diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 61bd1945f..2df7fc245 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -42,7 +42,6 @@ pub mod prelude { use std::cell::RefCell; use std::env::set_current_dir; use std::ffi::CString; - use std::rc::Rc; /// A wrapper around a Parser with some test helpers. pub struct TestParser { @@ -53,7 +52,7 @@ pub struct TestParser { impl TestParser { pub fn new() -> TestParser { TestParser { - parser: Parser::new(Rc::new(EnvStack::new()), CancelBehavior::default()), + parser: Parser::new(EnvStack::new(), CancelBehavior::default()), pushed_dirs: RefCell::new(Vec::new()), } } diff --git a/src/tests/parser.rs b/src/tests/parser.rs index 1f45653ca..468f1496f 100644 --- a/src/tests/parser.rs +++ b/src/tests/parser.rs @@ -16,7 +16,6 @@ use crate::wchar::prelude::*; use crate::wcstringutil::join_strings; use libc::SIGINT; -use std::rc::Rc; use std::time::Duration; #[test] @@ -729,7 +728,7 @@ fn test_1_cancellation(parser: &Parser, src: &wstr) { #[serial] fn test_cancellation() { let _cleanup = test_init(); - let parser = Parser::new(Rc::new(EnvStack::new()), CancelBehavior::Clear); + let parser = Parser::new(EnvStack::new(), CancelBehavior::Clear); reader_push(&parser, L!(""), ReaderConfig::default()); let _pop = ScopeGuard::new((), |()| reader_pop());