Do not have global mutable engine state

This commit is contained in:
kubouch 2024-06-10 21:08:48 +03:00
parent addfb88dd6
commit 78089b96dc
2 changed files with 10 additions and 10 deletions

View File

@ -76,7 +76,7 @@ const DEFAULT_HELP_MENU: &str = r#"
// Adds all menus to line editor // Adds all menus to line editor
pub(crate) fn add_menus( pub(crate) fn add_menus(
mut line_editor: Reedline, mut line_editor: Reedline,
engine_state: &mut Arc<EngineState>, engine_state_ref: Arc<EngineState>,
stack: &Stack, stack: &Stack,
config: &Config, config: &Config,
) -> Result<Reedline, ShellError> { ) -> Result<Reedline, ShellError> {
@ -84,7 +84,7 @@ pub(crate) fn add_menus(
line_editor = line_editor.clear_menus(); line_editor = line_editor.clear_menus();
for menu in &config.menus { for menu in &config.menus {
line_editor = add_menu(line_editor, menu, engine_state.clone(), stack, config)? line_editor = add_menu(line_editor, menu, engine_state_ref.clone(), stack, config)?
} }
// Checking if the default menus have been added from the config file // Checking if the default menus have been added from the config file
@ -94,6 +94,8 @@ pub(crate) fn add_menus(
("help_menu", DEFAULT_HELP_MENU), ("help_menu", DEFAULT_HELP_MENU),
]; ];
let mut engine_state = (*engine_state_ref).clone();
for (name, definition) in default_menus { for (name, definition) in default_menus {
if !config if !config
.menus .menus
@ -101,7 +103,7 @@ pub(crate) fn add_menus(
.any(|menu| menu.name.to_expanded_string("", config) == name) .any(|menu| menu.name.to_expanded_string("", config) == name)
{ {
let (block, delta) = { let (block, delta) = {
let mut working_set = StateWorkingSet::new(engine_state); let mut working_set = StateWorkingSet::new(&engine_state);
let output = parse( let output = parse(
&mut working_set, &mut working_set,
Some(name), // format!("entry #{}", entry_num) Some(name), // format!("entry #{}", entry_num)
@ -112,18 +114,16 @@ pub(crate) fn add_menus(
(output, working_set.render()) (output, working_set.render())
}; };
let _ = Arc::get_mut(engine_state) engine_state.merge_delta(delta)?;
.expect("no engine state")
.merge_delta(delta);
let mut temp_stack = Stack::new().capture(); let mut temp_stack = Stack::new().capture();
let input = PipelineData::Empty; let input = PipelineData::Empty;
let res = eval_block::<WithoutDebug>(engine_state, &mut temp_stack, &block, input)?; let res = eval_block::<WithoutDebug>(&engine_state, &mut temp_stack, &block, input)?;
if let PipelineData::Value(value, None) = res { if let PipelineData::Value(value, None) = res {
for menu in create_menus(&value)? { for menu in create_menus(&value)? {
line_editor = line_editor =
add_menu(line_editor, &menu, engine_state.clone(), stack, config)?; add_menu(line_editor, &menu, engine_state_ref.clone(), stack, config)?;
} }
} }
} }

View File

@ -345,7 +345,7 @@ fn loop_iteration(ctx: LoopContext) -> (bool, Stack, Reedline) {
use_color, use_color,
); );
let mut engine_reference = Arc::new(engine_state.clone()); let engine_reference = Arc::new(engine_state.clone());
let config = engine_state.get_config(); let config = engine_state.get_config();
start_time = std::time::Instant::now(); start_time = std::time::Instant::now();
@ -428,7 +428,7 @@ fn loop_iteration(ctx: LoopContext) -> (bool, Stack, Reedline) {
start_time = std::time::Instant::now(); start_time = std::time::Instant::now();
trace!("adding menus"); trace!("adding menus");
line_editor = line_editor =
add_menus(line_editor, &mut engine_reference, &stack_arc, config).unwrap_or_else(|e| { add_menus(line_editor, engine_reference, &stack_arc, config).unwrap_or_else(|e| {
report_error_new(engine_state, &e); report_error_new(engine_state, &e);
Reedline::create() Reedline::create()
}); });