diff --git a/src/parse/execute.rs b/src/parse/execute.rs index 63ff588..9e20acb 100644 --- a/src/parse/execute.rs +++ b/src/parse/execute.rs @@ -681,7 +681,7 @@ impl Dispatcher { } fn exec_builtin(&mut self, cmd: Node) -> ShResult<()> { let fork_builtins = cmd.flags.contains(NdFlags::FORK_BUILTINS); - let cmd_raw = cmd.get_command().unwrap().to_string(); + let cmd_raw = cmd.get_command().unwrap_or_else(|| panic!("expected command NdRule, got {:?}", &cmd.class)).to_string(); if fork_builtins { log::trace!("Forking builtin: {}", cmd_raw); diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 0431411..e43b5e1 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -114,15 +114,14 @@ pub struct Node { impl Node { pub fn get_command(&self) -> Option<&Tk> { - let NdRule::Command { + if let NdRule::Command { assignments: _, argv, - } = &self.class - else { - return None; - }; - let command = argv.iter().find(|tk| tk.flags.contains(TkFlags::IS_CMD))?; - Some(command) + } = &self.class { + argv.iter().next() + } else { + None + } } pub fn get_span(&self) -> Span { let Some(first_tk) = self.tokens.first() else {