49 lines
923 B
Rust
49 lines
923 B
Rust
#![allow(unused_unsafe)]
|
|
|
|
pub mod libsh;
|
|
pub mod shellenv;
|
|
pub mod parse;
|
|
pub mod prelude;
|
|
pub mod execute;
|
|
pub mod signal;
|
|
pub mod prompt;
|
|
pub mod builtin;
|
|
pub mod expand;
|
|
|
|
use libc::PIPE_BUF;
|
|
use nix::unistd::setpgid;
|
|
use signal::sig_setup;
|
|
|
|
use crate::prelude::*;
|
|
|
|
pub fn main() {
|
|
sig_setup();
|
|
let mut shenv = ShEnv::new();
|
|
|
|
loop {
|
|
log!(TRACE, "Entered loop");
|
|
let line = match prompt::read_line(&mut shenv) {
|
|
Ok(line) => line,
|
|
Err(e) => {
|
|
eprintln!("{}",e);
|
|
continue;
|
|
}
|
|
};
|
|
let input = Rc::new(line);
|
|
log!(INFO, "New input: {:?}", input);
|
|
let token_stream = Lexer::new(input).lex();
|
|
log!(TRACE, "Token stream: {:?}", token_stream);
|
|
match Parser::new(token_stream).parse() {
|
|
Err(e) => {
|
|
eprintln!("{}",e);
|
|
}
|
|
Ok(syn_tree) => {
|
|
if let Err(e) = Executor::new(syn_tree, &mut shenv).walk() {
|
|
eprintln!("{}",e);
|
|
}
|
|
}
|
|
}
|
|
log!(TRACE, "Finished iteration");
|
|
}
|
|
}
|