feat(phase-21.8): wire imports through extern_provider (Step 7 part 1)

**Step 7 進行中**: extern_provider 側の実装完了

Changes:
- Modified extern_provider.rs to read HAKO_MIRBUILDER_IMPORTS env var
- Both routes now call program_json_to_mir_json_with_imports():
  - Direct extern call (env.mirbuilder.emit)
  - hostbridge.extern_invoke route
- Deserializes JSON imports map and passes to MirBuilder
- Build succeeds 

Next: Wire collection side - set HAKO_MIRBUILDER_IMPORTS from runner

Related: #phase-21.8 MatI64/IntArrayCore integration
This commit is contained in:
nyash-codex
2025-11-14 16:34:41 +09:00
parent 1f961b3e75
commit 29dae149ea
2 changed files with 138 additions and 2 deletions

View File

@ -141,7 +141,21 @@ impl MirInterpreter {
}
if args.is_empty() { return Some(Err(ErrorBuilder::arg_count_mismatch("env.mirbuilder.emit", 1, args.len()))); }
let program_json = match self.reg_load(args[0]) { Ok(v) => v.to_string(), Err(e) => return Some(Err(e)) };
let res = match crate::host_providers::mir_builder::program_json_to_mir_json(&program_json) {
// Phase 21.8: Read imports from environment variable if present
let imports = if let Ok(imports_json) = std::env::var("HAKO_MIRBUILDER_IMPORTS") {
match serde_json::from_str::<std::collections::HashMap<String, String>>(&imports_json) {
Ok(map) => map,
Err(e) => {
eprintln!("[mirbuilder/imports] Failed to parse HAKO_MIRBUILDER_IMPORTS: {}", e);
std::collections::HashMap::new()
}
}
} else {
std::collections::HashMap::new()
};
let res = match crate::host_providers::mir_builder::program_json_to_mir_json_with_imports(&program_json, imports) {
Ok(s) => Ok(VMValue::String(Self::patch_mir_json_version(&s))),
Err(e) => Err(ErrorBuilder::with_context("env.mirbuilder.emit", &e.to_string())),
};
@ -290,7 +304,20 @@ impl MirInterpreter {
}
("env.mirbuilder", "emit") => {
if let Some(s) = first_arg_str {
match crate::host_providers::mir_builder::program_json_to_mir_json(&s) {
// Phase 21.8: Read imports from environment variable if present
let imports = if let Ok(imports_json) = std::env::var("HAKO_MIRBUILDER_IMPORTS") {
match serde_json::from_str::<std::collections::HashMap<String, String>>(&imports_json) {
Ok(map) => map,
Err(e) => {
eprintln!("[mirbuilder/imports] Failed to parse HAKO_MIRBUILDER_IMPORTS: {}", e);
std::collections::HashMap::new()
}
}
} else {
std::collections::HashMap::new()
};
match crate::host_providers::mir_builder::program_json_to_mir_json_with_imports(&s, imports) {
Ok(out) => Ok(VMValue::String(Self::patch_mir_json_version(&out))),
Err(e) => Err(self.err_with_context("env.mirbuilder.emit", &e.to_string())),
}