feat(phase72): Phase 72-C Step 2: JoinIR dev flags SSOT completion

Extended joinir_dev.rs with 11 remaining flag helpers (total 20 flags):
- NYASH_JOINIR_LOWER_FROM_MIR, NYASH_JOINIR_LLVM_EXPERIMENT (2 NYASH flags)
- HAKO_JOINIR_IF_TOPLEVEL, IF_TOPLEVEL_TRACE, IF_IN_LOOP_TRACE (3 if-related)
- HAKO_JOINIR_NESTED_IF, PRINT_TOKENS_MAIN, ARRAY_FILTER_MAIN (3 ast_lowerer)
- HAKO_JOINIR_READ_QUOTED, READ_QUOTED_IFMERGE (2 read_quoted)

Updated src/mir/join_ir/mod.rs env_flag_is_1() dispatcher:
- Routes all 16 known JoinIR dev flags to config::env::joinir_dev helpers
- Maintains fallback for backward compatibility
- Centralizes all body code ENV reads through SSOT layer

Achievement: Complete SSOT consolidation for JoinIR development flags
- Test side: joinir_env.rs (is_experiment_enabled, set_if_select_*)
- Body code: config::env::joinir_dev.rs (20 flag helpers)
- Dispatcher: env_flag_is_1() routes all reads to centralized layer

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-02 12:52:38 +09:00
parent 6842a72df1
commit 6b9cef9ee5
2 changed files with 75 additions and 1 deletions

View File

@ -48,3 +48,53 @@ pub fn snapshot_test_enabled() -> bool {
pub fn input_mode() -> Option<String> {
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")
}

View File

@ -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 分類)