Big Rewrite

This commit is contained in:
2026-09-11 13:36:57 +00:00
parent f8b1ef045e
commit 465d9095bb
16 changed files with 773 additions and 1902 deletions
+18 -39
View File
@@ -1,58 +1,37 @@
mod declass;
mod declosure;
mod demutate;
mod flatten;
mod infer;
mod libqjs;
mod parse;
mod regify;
use declass::declass;
use declosure::declosure;
use demutate::demutate;
use std::fs::File;
use std::io::Read;
use flatten::flatten;
use infer::infer;
use parse::QuickJSBinary;
use infer::infer_types;
use regify::regify;
fn main() {
// Load source file
let args = std::env::args().collect::<Vec<String>>();
let filename = args.get(1).unwrap();
// Compile source file
let source = std::fs::read_to_string(filename).unwrap();
let bin = libqjs::compile(&source, filename).unwrap();
let mut file = File::open(filename).unwrap();
let metadata = std::fs::metadata(filename).unwrap();
assert!(metadata.is_file());
// Parse, then flatten
let (_, parsed) = QuickJSBinary::parse(&bin).unwrap();
let (flat_fns, atoms) = flatten(parsed);
let mut src = Vec::with_capacity(metadata.len() as usize);
file.read_to_end(&mut src).unwrap();
println!("{flat_fns:#?}");
// Compile to bytecode
let binary = libqjs::compile(&src, filename);
println!("=== after regify ===");
// Process it
let (flat_fns, atoms) = flatten(binary);
let reg_fns = regify(flat_fns);
println!("{reg_fns:#?}");
println!("=== after declass ===");
let declassed = declass(reg_fns);
println!("{declassed:#?}");
println!("=== after declosure ===");
let declosured = declosure(declassed);
println!("{declosured:#?}");
println!("=== after demutate ===");
let mut infer_fns = demutate(declosured);
println!("{infer_fns:#?}");
println!("=== after infer ===");
if let Some(main_id) = infer_fns.iter().position(|f| f.name == "main") {
let ret = infer(main_id, &mut infer_fns);
println!("main returns {ret:?}");
println!("{infer_fns:#?}");
} else {
println!("no main");
}
println!("{atoms:#?}");
let type_cache = infer_types(&reg_fns, &atoms);
println!("{type_cache:#?}");
}