diff --git a/src/runner.rs b/src/runner.rs index b2dae53e..4e7d0800 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -73,7 +73,8 @@ impl NyashRunner { } if let Some(ref filename) = self.config.file { - self.execute_file_mode(filename); + // Delegate file-mode execution to modes::common dispatcher + self.run_file(filename); } else { self.execute_demo_mode(); } @@ -82,81 +83,6 @@ impl NyashRunner { // init_bid_plugins moved to runner_plugin_init.rs /// Execute file-based mode with backend selection - fn execute_file_mode(&self, filename: &str) { - if self.config.dump_ast { - println!("🧠 Nyash AST Dump - Processing file: {}", filename); - let code = match fs::read_to_string(filename) { - Ok(content) => content, - Err(e) => { - eprintln!("❌ Error reading file {}: {}", filename, e); - process::exit(1); - } - }; - let ast = match NyashParser::parse_from_string(&code) { - Ok(ast) => ast, - Err(e) => { - eprintln!("❌ Parse error: {}", e); - process::exit(1); - } - }; - println!("{:#?}", ast); - return; - } - if self.config.dump_mir || self.config.verify_mir { - println!("🚀 Nyash MIR Compiler - Processing file: {} 🚀", filename); - self.execute_mir_mode(filename); - } else if self.config.compile_wasm { - #[cfg(feature = "wasm-backend")] - { - println!("🌐 Nyash WASM Compiler - Processing file: {} 🌐", filename); - self.execute_wasm_mode(filename); - } - #[cfg(not(feature = "wasm-backend"))] - { - eprintln!("❌ WASM backend not available. Please rebuild with: cargo build --features wasm-backend"); - process::exit(1); - } - } else if self.config.compile_native { - #[cfg(feature = "wasm-backend")] - { - println!("🚀 Nyash AOT Compiler - Processing file: {} 🚀", filename); - self.execute_aot_mode(filename); - } - #[cfg(not(feature = "wasm-backend"))] - { - eprintln!("❌ AOT backend not available. Please rebuild with: cargo build --features wasm-backend"); - process::exit(1); - } - } else if self.config.backend == "vm" { - if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { - println!("🚀 Nyash VM Backend - Executing file: {} 🚀", filename); - } - self.execute_vm_mode(filename); - } else if self.config.backend == "llvm" { - if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { - println!("⚡ Nyash LLVM Backend - Executing file: {} ⚡", filename); - } - self.execute_llvm_mode(filename); - } else { - if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { - println!("🦀 Nyash Rust Implementation - Executing file: {} 🦀", filename); - } - if let Some(fuel) = self.config.debug_fuel { - if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { - println!("🔥 Debug fuel limit: {} iterations", fuel); - } - } else { - if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { - println!("🔥 Debug fuel limit: unlimited"); - } - } - if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { - println!("===================================================="); - } - - self.execute_nyash_file(filename); - } - } /// Execute demo mode with all demonstrations fn execute_demo_mode(&self) { diff --git a/src/runner/modes/common.rs b/src/runner/modes/common.rs index 01069404..32e893bf 100644 --- a/src/runner/modes/common.rs +++ b/src/runner/modes/common.rs @@ -3,6 +3,75 @@ use nyash_rust::{parser::NyashParser, interpreter::NyashInterpreter, box_factory use std::{fs, process}; impl NyashRunner { + /// File-mode dispatcher (thin wrapper around backend/mode selection) + pub(crate) fn run_file(&self, filename: &str) { + // AST dump mode + if self.config.dump_ast { + println!("🧠 Nyash AST Dump - Processing file: {}", filename); + let code = match fs::read_to_string(filename) { + Ok(content) => content, + Err(e) => { eprintln!("❌ Error reading file {}: {}", filename, e); process::exit(1); } + }; + let ast = match NyashParser::parse_from_string(&code) { + Ok(ast) => ast, + Err(e) => { eprintln!("❌ Parse error: {}", e); process::exit(1); } + }; + println!("{:#?}", ast); + return; + } + + // MIR dump/verify + if self.config.dump_mir || self.config.verify_mir { + if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { + println!("🚀 Nyash MIR Compiler - Processing file: {} 🚀", filename); + } + self.execute_mir_mode(filename); + return; + } + + // WASM / AOT (feature-gated) + if self.config.compile_wasm { + #[cfg(feature = "wasm-backend")] + { self.execute_wasm_mode(filename); return; } + #[cfg(not(feature = "wasm-backend"))] + { eprintln!("❌ WASM backend not available. Please rebuild with: cargo build --features wasm-backend"); process::exit(1); } + } + if self.config.compile_native { + #[cfg(feature = "wasm-backend")] + { self.execute_aot_mode(filename); return; } + #[cfg(not(feature = "wasm-backend"))] + { eprintln!("❌ AOT backend not available. Please rebuild with: cargo build --features wasm-backend"); process::exit(1); } + } + + // Backend selection + match self.config.backend.as_str() { + "vm" => { + if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { + println!("🚀 Nyash VM Backend - Executing file: {} 🚀", filename); + } + self.execute_vm_mode(filename); + } + "llvm" => { + if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { + println!("⚡ Nyash LLVM Backend - Executing file: {} ⚡", filename); + } + self.execute_llvm_mode(filename); + } + _ => { + if std::env::var("NYASH_CLI_VERBOSE").ok().as_deref() == Some("1") { + println!("🦀 Nyash Rust Implementation - Executing file: {} 🦀", filename); + if let Some(fuel) = self.config.debug_fuel { + println!("🔥 Debug fuel limit: {} iterations", fuel); + } else { + println!("🔥 Debug fuel limit: unlimited"); + } + println!("===================================================="); + } + self.execute_nyash_file(filename); + } + } + } + /// Execute Nyash file with interpreter (common helper) pub(crate) fn execute_nyash_file(&self, filename: &str) { // Read the file @@ -38,4 +107,3 @@ impl NyashRunner { } } } -