37 lines
883 B
Rust
37 lines
883 B
Rust
mod flatten;
|
|
mod infer;
|
|
mod libqjs;
|
|
mod regify;
|
|
mod transform;
|
|
|
|
use std::fs::File;
|
|
use std::io::Read;
|
|
|
|
use flatten::flatten;
|
|
use infer::infer_types;
|
|
use libqjs::compile;
|
|
use regify::regify;
|
|
use transform::transform;
|
|
|
|
fn main() {
|
|
// Load source file
|
|
let args = std::env::args().collect::<Vec<String>>();
|
|
let filename = args.get(1).unwrap();
|
|
|
|
let mut file = File::open(filename).unwrap();
|
|
let metadata = std::fs::metadata(filename).unwrap();
|
|
assert!(metadata.is_file());
|
|
|
|
let mut src = Vec::with_capacity(metadata.len() as usize);
|
|
file.read_to_end(&mut src).unwrap();
|
|
|
|
// Compile to bytecode
|
|
let binary = compile(&src, filename);
|
|
|
|
// Process it
|
|
let (flat_fns, captures, atoms) = flatten(binary);
|
|
let flat_fns = transform(flat_fns, &captures);
|
|
let reg_fns = regify(flat_fns);
|
|
let type_cache = infer_types(®_fns, &atoms);
|
|
}
|