From cac22c1a878fb69bbba7360693ac1695bc8e0238 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Sat, 1 Nov 2025 05:19:10 +0900 Subject: [PATCH] Runner: canonicalize json-file input via core_bridge when HAKO_NYVM_CORE=1 --- .../roadmap/phases/phase-20.33/README.md | 1 + src/config/env.rs | 24 +++++++++++++++++++ src/runner/pipe_io.rs | 8 ++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/docs/private/roadmap/phases/phase-20.33/README.md b/docs/private/roadmap/phases/phase-20.33/README.md index b666f1e2..3a41fc44 100644 --- a/docs/private/roadmap/phases/phase-20.33/README.md +++ b/docs/private/roadmap/phases/phase-20.33/README.md @@ -34,6 +34,7 @@ - Stage‑A map parser を強化(空/空白/エスケープ対応)。対応済み canary: `index_operator_hako` - Stage‑B canary は `SMOKES_ENABLE_STAGEB=1` で有効化。binop/if/index(ネスト・境界ケース込み)を opt-in で検証可能。 - v1 互換 canary `selfhost_stageb_v1_compat_vm.sh` は `SMOKES_ENABLE_STAGEB_V1=1` で opt-in。 +- Gate‑C(Core) wrapper トグル: `HAKO_NYVM_CORE=1`(alias `NYASH_NYVM_CORE`)で canonicalize→NyVmDispatcher 経路を準備(現状は JSON 正規化のみ、NyVmDispatcher 実行は今後のタスク)。 - Module 解決: `nyash.toml` に lang/compiler/shared/vm の論理名を追記し、using resolver から参照可能にした。 マイルストーン diff --git a/src/config/env.rs b/src/config/env.rs index e93eba20..925be2bb 100644 --- a/src/config/env.rs +++ b/src/config/env.rs @@ -524,3 +524,27 @@ pub fn ny_compiler_use_tmp_only() -> bool { .as_deref() == Some("1") } +fn env_flag(var: &str) -> Option { + std::env::var(var).ok().map(|v| { + let lv = v.to_ascii_lowercase(); + lv == "1" || lv == "true" || lv == "on" + }) +} + +pub fn nyvm_core_wrapper() -> bool { + env_flag("HAKO_NYVM_CORE") + .or_else(|| env_flag("NYASH_NYVM_CORE")) + .unwrap_or(false) +} + +pub fn nyvm_bridge_inject_singleton() -> bool { + env_flag("HAKO_BRIDGE_INJECT_SINGLETON") + .or_else(|| env_flag("NYASH_BRIDGE_INJECT_SINGLETON")) + .unwrap_or(false) +} + +pub fn nyvm_bridge_early_phi_materialize() -> bool { + env_flag("HAKO_BRIDGE_EARLY_PHI_MATERIALIZE") + .or_else(|| env_flag("NYASH_BRIDGE_EARLY_PHI_MATERIALIZE")) + .unwrap_or(false) +} diff --git a/src/runner/pipe_io.rs b/src/runner/pipe_io.rs index 3977dbeb..e5e92bf3 100644 --- a/src/runner/pipe_io.rs +++ b/src/runner/pipe_io.rs @@ -19,7 +19,7 @@ impl NyashRunner { if !(groups.parser.ny_parser_pipe || groups.parser.json_file.is_some()) { return false; } - let json = if let Some(path) = &groups.parser.json_file { + let mut json = if let Some(path) = &groups.parser.json_file { match std::fs::read_to_string(path) { Ok(s) => s, Err(e) => { @@ -36,6 +36,12 @@ impl NyashRunner { } buf }; + if crate::config::env::nyvm_core_wrapper() { + match crate::runner::modes::common_util::core_bridge::canonicalize_module_json(&json) { + Ok(j) => json = j, + Err(e) => eprintln!("[bridge] canonicalize warning: {}", e), + } + } match super::json_v0_bridge::parse_json_v0_to_module(&json) { Ok(module) => { // Optional dump via env verbose