1#![cfg_attr(test, feature(test))]
2extern crate piston_meta;
3
4pub mod ast;
5pub mod runtime;
6pub mod lifetime;
7
8pub fn run(syntax: &str, source: &str) {
10 use std::thread;
11 use piston_meta::{json, load_syntax_data};
12
13 let data = load_syntax_data(syntax, source);
14 let check_data = data.clone();
15
16 let handle = thread::spawn(move || {
18 let check_data = check_data;
19 lifetime::check(&check_data)
20 });
21
22 let mut ignored = vec![];
24 let ast = ast::convert(&data, &mut ignored).unwrap();
25
26 match handle.join().unwrap() {
28 Ok(()) => {}
29 Err(msg) => panic!(msg)
30 }
31
32 let mut runtime = runtime::Runtime::new();
33 if ignored.len() > 0 {
34 println!("START IGNORED");
35 if ignored.len() > 0 {
36 for r in &ignored {
37 json::print(&data[r.iter()]);
38 }
39 }
40 println!("END IGNORED");
41 panic!("Some meta data was ignored in the syntax");
42 }
43 runtime.run(&ast);
44}
45
46#[cfg(test)]
47mod tests {
48 extern crate test;
49
50 use super::run;
51 use self::test::Bencher;
52
53 #[bench]
54 fn bench_add_two(b: &mut Bencher) {
55 b.iter(||
56 run("assets/syntax.txt", "source/bench/add.rs")
57 );
58 }
59
60}