Better error messages, remove debug AST printing
This commit is contained in:
parent
2e5799d9e6
commit
098137082e
42
src/main.rs
42
src/main.rs
|
@ -10,6 +10,8 @@ mod parser;
|
||||||
mod repl;
|
mod repl;
|
||||||
mod variables;
|
mod variables;
|
||||||
|
|
||||||
|
use std::process::exit;
|
||||||
|
|
||||||
use clap::{App, Arg};
|
use clap::{App, Arg};
|
||||||
use interpret::ExecEnv;
|
use interpret::ExecEnv;
|
||||||
use logos::Source;
|
use logos::Source;
|
||||||
|
@ -34,32 +36,30 @@ fn main() {
|
||||||
match matches.value_of("file") {
|
match matches.value_of("file") {
|
||||||
Some(file_path) => {
|
Some(file_path) => {
|
||||||
// Read file
|
// Read file
|
||||||
let source = std::fs::read_to_string(file_path).unwrap();
|
let source = match std::fs::read_to_string(file_path) {
|
||||||
|
Ok(s) => s,
|
||||||
// Parse
|
|
||||||
let mut parser = Parser::new(&source);
|
|
||||||
let ast = parser.init();
|
|
||||||
match ast {
|
|
||||||
Ok(ast) => {
|
|
||||||
println!("{:#?}", ast);
|
|
||||||
let mut env = ExecEnv::new();
|
|
||||||
println!("{:?}", env.eval_stmts(&ast));
|
|
||||||
}
|
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
println!(
|
println!("Failed to read file \"{}\": {}", file_path, e);
|
||||||
"Error `{:?}` occurred at span: {:?} = `{:?}`",
|
exit(1)
|
||||||
e.kind,
|
|
||||||
e.span.clone(),
|
|
||||||
source.slice(e.span)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Parse & evaluate
|
||||||
|
let mut parser = Parser::new(&source);
|
||||||
|
if let Err(e) = parser
|
||||||
|
.init()
|
||||||
|
.and_then(|ast| ExecEnv::new().eval_stmts(&ast))
|
||||||
|
{
|
||||||
|
println!(
|
||||||
|
"Error `{:?}` occurred at span: {:?} = `{:?}`",
|
||||||
|
e.kind,
|
||||||
|
e.span.clone(),
|
||||||
|
source.slice(e.span)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
println!(
|
println!("Hi [AbleScript {}]", env!("CARGO_PKG_VERSION"));
|
||||||
"Hi [AbleScript {}] - AST Printer & Interpreter",
|
|
||||||
env!("CARGO_PKG_VERSION")
|
|
||||||
);
|
|
||||||
repl::repl();
|
repl::repl();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ pub fn repl() {
|
||||||
}
|
}
|
||||||
let mut parser = Parser::new(&line);
|
let mut parser = Parser::new(&line);
|
||||||
let value = parser.init().and_then(|ast| {
|
let value = parser.init().and_then(|ast| {
|
||||||
println!("{:?}", &ast);
|
// println!("{:?}", &ast);
|
||||||
env.eval_stmts(&ast)
|
env.eval_stmts(&ast)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue