diff --git a/src/config/env/joinir_dev.rs b/src/config/env/joinir_dev.rs index e5164fd8..eb29cdea 100644 --- a/src/config/env/joinir_dev.rs +++ b/src/config/env/joinir_dev.rs @@ -48,3 +48,53 @@ pub fn snapshot_test_enabled() -> bool { pub fn input_mode() -> Option { std::env::var("NYASH_JOINIR_INPUT").ok() } + +/// NYASH_JOINIR_LOWER_FROM_MIR=1 - Enable lowering from MIR mode +pub fn lower_from_mir_enabled() -> bool { + env_bool("NYASH_JOINIR_LOWER_FROM_MIR") +} + +/// NYASH_JOINIR_LLVM_EXPERIMENT=1 - LLVM experimental mode +pub fn llvm_experiment_enabled() -> bool { + env_bool("NYASH_JOINIR_LLVM_EXPERIMENT") +} + +/// HAKO_JOINIR_IF_TOPLEVEL=1 - Enable If-select for top-level if statements +pub fn if_toplevel_enabled() -> bool { + env_bool("HAKO_JOINIR_IF_TOPLEVEL") +} + +/// HAKO_JOINIR_IF_TOPLEVEL_TRACE=1 - Debug trace for top-level if +pub fn if_toplevel_trace_enabled() -> bool { + env_bool("HAKO_JOINIR_IF_TOPLEVEL_TRACE") +} + +/// HAKO_JOINIR_IF_IN_LOOP_TRACE=1 - Debug trace for if in loop +pub fn if_in_loop_trace_enabled() -> bool { + env_bool("HAKO_JOINIR_IF_IN_LOOP_TRACE") +} + +/// HAKO_JOINIR_NESTED_IF=1 - Enable nested if lowering +pub fn nested_if_enabled() -> bool { + env_bool("HAKO_JOINIR_NESTED_IF") +} + +/// HAKO_JOINIR_PRINT_TOKENS_MAIN=1 - Print tokens for main +pub fn print_tokens_main_enabled() -> bool { + env_bool("HAKO_JOINIR_PRINT_TOKENS_MAIN") +} + +/// HAKO_JOINIR_ARRAY_FILTER_MAIN=1 - Array filter main mode +pub fn array_filter_main_enabled() -> bool { + env_bool("HAKO_JOINIR_ARRAY_FILTER_MAIN") +} + +/// HAKO_JOINIR_READ_QUOTED=1 - Read quoted mode +pub fn read_quoted_enabled() -> bool { + env_bool("HAKO_JOINIR_READ_QUOTED") +} + +/// HAKO_JOINIR_READ_QUOTED_IFMERGE=1 - Read quoted with if-merge +pub fn read_quoted_ifmerge_enabled() -> bool { + env_bool("HAKO_JOINIR_READ_QUOTED_IFMERGE") +} diff --git a/src/mir/join_ir/mod.rs b/src/mir/join_ir/mod.rs index 1d0be9d0..50399b28 100644 --- a/src/mir/join_ir/mod.rs +++ b/src/mir/join_ir/mod.rs @@ -102,8 +102,32 @@ impl JoinContId { pub type VarId = ValueId; /// 環境変数フラグが "1" かチェックするヘルパー(JoinIR 実験経路用) +/// Phase 72-C Step 2: SSOT統一 - すべてのリードを config::env::joinir_dev 経由に pub(crate) fn env_flag_is_1(name: &str) -> bool { - std::env::var(name).ok().as_deref() == Some("1") + use crate::config::env::joinir_dev; + match name { + "NYASH_JOINIR_LOWER_GENERIC" => joinir_dev::lower_generic_enabled(), + "NYASH_JOINIR_MAINLINE_DEBUG" => joinir_dev::mainline_debug_enabled(), + "NYASH_JOINIR_IF_MERGE" => joinir_dev::if_merge_enabled(), + "NYASH_JOINIR_DEBUG" => joinir_dev::debug_enabled(), + "NYASH_JOINIR_VM_BRIDGE" => joinir_dev::vm_bridge_enabled(), + "NYASH_JOINIR_STRICT" => joinir_dev::strict_enabled(), + "NYASH_JOINIR_SNAPSHOT_GENERATE" => joinir_dev::snapshot_generate_enabled(), + "NYASH_JOINIR_SNAPSHOT_TEST" => joinir_dev::snapshot_test_enabled(), + "NYASH_JOINIR_LOWER_FROM_MIR" => joinir_dev::lower_from_mir_enabled(), + "NYASH_JOINIR_LLVM_EXPERIMENT" => joinir_dev::llvm_experiment_enabled(), + "HAKO_JOINIR_IF_TOPLEVEL" => joinir_dev::if_toplevel_enabled(), + "HAKO_JOINIR_IF_TOPLEVEL_TRACE" => joinir_dev::if_toplevel_trace_enabled(), + "HAKO_JOINIR_IF_IN_LOOP_TRACE" => joinir_dev::if_in_loop_trace_enabled(), + "HAKO_JOINIR_NESTED_IF" => joinir_dev::nested_if_enabled(), + "HAKO_JOINIR_PRINT_TOKENS_MAIN" => joinir_dev::print_tokens_main_enabled(), + "HAKO_JOINIR_ARRAY_FILTER_MAIN" => joinir_dev::array_filter_main_enabled(), + "HAKO_JOINIR_READ_QUOTED" => joinir_dev::read_quoted_enabled(), + "HAKO_JOINIR_READ_QUOTED_IFMERGE" => joinir_dev::read_quoted_ifmerge_enabled(), + // Fallback for unknown flags (shouldn't happen in normal operation) + // NYASH_JOINIR_EXPERIMENT is handled by test helpers, not body code + _ => std::env::var(name).ok().as_deref() == Some("1"), + } } /// Phase 27.4-A: ループ header φ の意味を表す構造(Pinned/Carrier 分類)