From fa8aa1cd290c37917113bc87934b1e916eef97f4 Mon Sep 17 00:00:00 2001 From: zxq5 Date: Wed, 4 Feb 2026 01:58:55 +0000 Subject: [PATCH] integrated compiler in DSA editor --- emulator/Cargo.toml | 1 + emulator/src/emulator/ui/editor.rs | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/emulator/Cargo.toml b/emulator/Cargo.toml index 23f7142..95df15a 100644 --- a/emulator/Cargo.toml +++ b/emulator/Cargo.toml @@ -16,6 +16,7 @@ required-features = ["config"] [dependencies] common = { path = "../common" } assembler = { path = "../assembler" } +compiler = { path = "../compiler" } dsa_editor = { path = "../dsa_editor" } egui = "0.31.1" dirs = "6.0.0" diff --git a/emulator/src/emulator/ui/editor.rs b/emulator/src/emulator/ui/editor.rs index e49ad85..e1d4b4b 100644 --- a/emulator/src/emulator/ui/editor.rs +++ b/emulator/src/emulator/ui/editor.rs @@ -451,6 +451,29 @@ impl Editor { .flat_map(|i| i.encode().to_be_bytes().to_vec()) .collect(); } + Some("dsc") => { + let output_path = Path::new(path).with_extension("dsa"); + if let Err(e) = compiler::compile_file(path, &output_path) { + self.error = Some(format!("Compiler error: {}", e)); + } + + let mut compiler = CompilerEngine::new(); + compiler.start_compilation(&output_path); + + // Or block until done + let instructions = match compiler.wait_for_result() { + Ok(instructions) => instructions, + Err(e) => { + self.error = Some(format!("Assembler error: {}", e)); + return; + } + }; + + self.output = instructions + .iter() + .flat_map(|i| i.encode().to_be_bytes().to_vec()) + .collect(); + } Some("dsb") => { if let Ok(bytes) = fs::read(path) { self.output = bytes;