#![cfg_attr(test, feature(test))]
extern crate piston_meta;
pub mod ast;
pub mod runtime;
pub mod lifetime;
pub fn run(syntax: &str, source: &str) {
use std::thread;
use piston_meta::{json, load_syntax_data};
let data = load_syntax_data(syntax, source);
let check_data = data.clone();
let handle = thread::spawn(move || {
let check_data = check_data;
lifetime::check(&check_data)
});
let mut ignored = vec![];
let ast = ast::convert(&data, &mut ignored).unwrap();
match handle.join().unwrap() {
Ok(()) => {}
Err(msg) => panic!(msg)
}
let mut runtime = runtime::Runtime::new();
if ignored.len() > 0 {
println!("START IGNORED");
if ignored.len() > 0 {
for r in &ignored {
json::print(&data[r.iter()]);
}
}
println!("END IGNORED");
panic!("Some meta data was ignored in the syntax");
}
runtime.run(&ast);
}
#[cfg(test)]
mod tests {
extern crate test;
use super::run;
use self::test::Bencher;
#[bench]
fn bench_add_two(b: &mut Bencher) {
b.iter(||
run("assets/syntax.txt", "source/bench/add.rs")
);
}
}