diff options
Diffstat (limited to 'src/run/builtin.rs')
| -rw-r--r-- | src/run/builtin.rs | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs index c71f10f..0b2b3bc 100644 --- a/src/run/builtin.rs +++ b/src/run/builtin.rs @@ -3,7 +3,8 @@ use std::sync::{Arc, Mutex}; use std::{env::*, fs::OpenOptions, path::PathBuf}; -use super::{Builtin, BuiltinResult as Result}; +use super::{Builtin, BuiltinError as Error, BuiltinResult as Result}; +use crate::parse::CmdDisplay; use crate::*; pub struct cd; @@ -242,3 +243,34 @@ impl Builtin for escape { Ok(()) } } + +pub struct parse; +impl Builtin for parse { + fn name(&self) -> &str { + "parse" + } + + fn io( + &self, + _session: Arc<Mutex<Session>>, + args: &[BString], + _stdin: &mut dyn Read, + stdout: &mut dyn Write, + ) -> Result { + let mut is_ok = true; + for arg in args { + match crate::parse::do_parse(arg) { + Ok(parsed) => { + write!(stdout, "ok ")?; + parsed.cdisplay(stdout)?; + writeln!(stdout)?; + }, + Err(err) => { + is_ok = false; + writeln!(stdout, "err {err:?}")?; + } + } + } + if is_ok { Ok(()) } else { Err(Error::Exit(-1)) } + } +} |
