46 lines
1.8 KiB
Rust
46 lines
1.8 KiB
Rust
use super::super::NyashRunner;
|
||
use nyash_rust::{parser::NyashParser, mir::MirCompiler};
|
||
use std::{fs, process};
|
||
|
||
impl NyashRunner {
|
||
/// Execute Cranelift JIT mode (skeleton)
|
||
pub(crate) fn execute_cranelift_mode(&self, filename: &str) {
|
||
// Read source
|
||
let code = match fs::read_to_string(filename) {
|
||
Ok(c) => c,
|
||
Err(e) => { eprintln!("❌ Error reading file {}: {}", filename, e); process::exit(1); }
|
||
};
|
||
// Parse → AST
|
||
let ast = match NyashParser::parse_from_string(&code) {
|
||
Ok(ast) => ast,
|
||
Err(e) => { eprintln!("❌ Parse error: {}", e); process::exit(1); }
|
||
};
|
||
let ast = crate::r#macro::maybe_expand_and_dump(&ast, false);
|
||
// AST → MIR
|
||
let mut mir_compiler = MirCompiler::new();
|
||
let compile_result = match mir_compiler.compile(ast) {
|
||
Ok(r) => r,
|
||
Err(e) => { eprintln!("❌ MIR compilation error: {}", e); process::exit(1); }
|
||
};
|
||
println!("📊 MIR Module compiled (Cranelift JIT skeleton)");
|
||
|
||
// Execute via Cranelift JIT (feature‑gated)
|
||
#[cfg(feature = "cranelift-jit")]
|
||
{
|
||
use nyash_rust::backend::cranelift_compile_and_execute;
|
||
match cranelift_compile_and_execute(&compile_result.module, "nyash_cljit_temp") {
|
||
Ok(result) => {
|
||
println!("✅ Cranelift JIT execution completed (skeleton)!");
|
||
println!("📊 Result: {}", result.to_string_box().value);
|
||
}
|
||
Err(e) => { eprintln!("❌ Cranelift JIT error: {}", e); process::exit(1); }
|
||
}
|
||
}
|
||
#[cfg(not(feature = "cranelift-jit"))]
|
||
{
|
||
eprintln!("❌ Cranelift JIT not available. Rebuild with --features cranelift-jit");
|
||
process::exit(1);
|
||
}
|
||
}
|
||
}
|