aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs18
-rw-r--r--src/run/mod.rs15
2 files changed, 17 insertions, 16 deletions
diff --git a/src/main.rs b/src/main.rs
index bcad011..92ce812 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -341,15 +341,29 @@ fn event_loop() {
// Enter
b'\r' => {
- let line = se.line.dump();
+ let line = se.line.into_bytes();
+
if !line.is_empty() {
+ let parsed = match parse::do_parse(&line) {
+ Ok(p) => p,
+ Err((crate::parse::ParseError::Eof, _)) => {
+ se.line.add(b'\n');
+ print!("\r\n> ");
+ continue
+ },
+ Err(e) => {
+ println!("{e:?}\n{}", se.prompt());
+ continue;
+ }
+ };
print!("\r\n");
let entry = HistoryEntry::new(line.clone());
history::persist(&entry);
se.history.push(entry);
se.history_visit = 0;
+ se.line.dump();
drop(se);
- run::run(session.clone(), line);
+ run::run(session.clone(), parsed);
}
}
diff --git a/src/run/mod.rs b/src/run/mod.rs
index 2224eac..091c662 100644
--- a/src/run/mod.rs
+++ b/src/run/mod.rs
@@ -419,20 +419,7 @@ fn exec(se: Arc<Mutex<Session>>, ast: Ast<PreExpansion>) -> Result<(), ExecError
exec.exec_loop(cmd, &mut [c1, c2])
}
-pub fn run(se: Arc<Mutex<Session>>, cmd: Vec<u8>) {
- let parsed = parse::do_parse(&cmd);
- let parsed = match parsed {
- Ok(p) => p,
- Err(err) => {
- se.lock().unwrap().raw.disable();
- println!("{:?}: {}", err.0, String::from_utf8_lossy(err.1));
- print!("{}", se.lock().unwrap().prompt());
- std::io::stdout().lock().flush().unwrap();
- se.lock().unwrap().raw.enable();
- return;
- }
- };
-
+pub fn run(se: Arc<Mutex<Session>>, parsed: Ast<PreExpansion>) {
se.lock().unwrap().raw.disable();
let result = exec(se.clone(), parsed);
se.lock().unwrap().raw.enable();