62 lines
2.5 KiB
Rust
62 lines
2.5 KiB
Rust
//! Verification and checking-related environment flags
|
||
//!
|
||
//! This module groups all verification, checking, and testing flags.
|
||
//! Use this for IDE autocomplete to discover verification flags easily.
|
||
|
||
use super::{env_bool, env_bool_default};
|
||
|
||
/// Allow verifier to skip SSA/dominance/merge checks for PHI-less MIR.
|
||
pub fn verify_allow_no_phi() -> bool {
|
||
std::env::var("NYASH_VERIFY_ALLOW_NO_PHI").ok().as_deref() == Some("1") || mir_no_phi()
|
||
}
|
||
|
||
fn mir_no_phi() -> bool {
|
||
env_bool("NYASH_MIR_NO_PHI")
|
||
}
|
||
|
||
/// Enable strict edge-copy policy verification in PHI-off mode.
|
||
/// When enabled, merge blocks must receive merged values via predecessor copies only,
|
||
/// and the merge block itself must not introduce a self-copy to the merged destination.
|
||
pub fn verify_edge_copy_strict() -> bool {
|
||
env_bool("NYASH_VERIFY_EDGE_COPY_STRICT")
|
||
}
|
||
|
||
/// Enforce purity of return blocks: no side-effecting instructions allowed before Return
|
||
/// Default: OFF. Enable with NYASH_VERIFY_RET_PURITY=1 in dev/profiling sessions.
|
||
pub fn verify_ret_purity() -> bool {
|
||
env_bool("NYASH_VERIFY_RET_PURITY")
|
||
}
|
||
|
||
/// Stage-B/selfhost 専用の dev verify トグル(SSA などの厳格チェックを一時緩和するためのスイッチ)
|
||
/// Default: ON(現行挙動)。NYASH_STAGEB_DEV_VERIFY=0 で Stage-B 経路の dev verify をスキップ。
|
||
pub fn stageb_dev_verify_enabled() -> bool {
|
||
fn env_flag(var: &str) -> Option<bool> {
|
||
std::env::var(var).ok().map(|v| {
|
||
let lv = v.to_ascii_lowercase();
|
||
lv == "1" || lv == "true" || lv == "on"
|
||
})
|
||
}
|
||
env_flag("NYASH_STAGEB_DEV_VERIFY").unwrap_or(true)
|
||
}
|
||
|
||
/// Global fail-fast policy for runtime fallbacks.
|
||
/// Default: ON (true) to prohibit silent/different-route fallbacks in Rust layer.
|
||
/// Set NYASH_FAIL_FAST=0 to temporarily allow legacy fallbacks during bring-up.
|
||
pub fn fail_fast() -> bool {
|
||
env_bool_default("NYASH_FAIL_FAST", true)
|
||
}
|
||
|
||
/// Bridge lowering: use Result-style try/throw lowering instead of MIR Catch/Throw
|
||
/// When on, try/catch is lowered using structured blocks and direct jumps,
|
||
/// without emitting MIR Throw/Catch. The thrown value is routed to catch via
|
||
/// block parameters (PHI-off uses edge-copy).
|
||
pub fn try_result_mode() -> bool {
|
||
std::env::var("NYASH_TRY_RESULT_MODE").ok().as_deref() == Some("1")
|
||
}
|
||
|
||
/// Runner/CLI common toggles (hot-path centralization)
|
||
pub fn cli_verbose() -> bool {
|
||
// Use cli_verbose_level from dump module
|
||
super::dump::cli_verbose_level() > 0
|
||
}
|