nodes + dyn stuff which is dumb and I'ma replace
This commit is contained in:
+19
-4
@@ -2,12 +2,27 @@ use std::io::{stdout, BufRead, BufReader};
|
||||
|
||||
mod parser;
|
||||
|
||||
use parser::{Module, Statement, TokenCursor};
|
||||
use parser::{Module, Node, NodeContainer, Statement, TokenCursor};
|
||||
|
||||
pub fn parse_file(file: &str) {
|
||||
match Module::parse(&mut TokenCursor::from(file)) {
|
||||
let node = Node::<Module>::parse(&mut TokenCursor::from(file));
|
||||
match node.inner {
|
||||
Err(err) => err.write_for(&mut stdout(), file).unwrap(),
|
||||
Ok(module) => println!("{module:#?}"),
|
||||
Ok(module) => {
|
||||
println!("{module:#?}");
|
||||
print_errors(module.children(), file)
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
pub fn print_errors(nodes: Vec<Node<Box<dyn NodeContainer>>>, file: &str) {
|
||||
for node in &nodes {
|
||||
if let Err(err) = &node.inner {
|
||||
err.write_for(&mut stdout(), file).unwrap();
|
||||
}
|
||||
}
|
||||
for node in nodes {
|
||||
print_errors(node.children(), file)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +31,7 @@ pub fn run_stdin() {
|
||||
let str = &line.expect("failed to read line");
|
||||
let mut cursor = TokenCursor::from(&str[..]);
|
||||
let out = &mut stdout();
|
||||
match Statement::parse(&mut cursor) {
|
||||
match Node::<Statement>::parse(&mut cursor).inner {
|
||||
Ok(expr) => println!("{:?}", expr),
|
||||
Err(err) => err.write_for(out, str).unwrap(),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user