Phase 30.1 & 73: Stage-3 features env and JoinIR flag cleanup
This commit is contained in:
@ -43,6 +43,12 @@ pub fn apply_core_wrapper_env(cmd: &mut std::process::Command) {
|
||||
// When selfhost builder uses `using` to load modules, the inline compiler
|
||||
// needs Stage-3 support for `local` keyword. Without this, we get:
|
||||
// "Undefined variable: local" in nested compilation.
|
||||
// Preferred propagation: NYASH_FEATURES carries Stage-3 (legacy envs kept for compatibility)
|
||||
if let Ok(val) = std::env::var("NYASH_FEATURES") {
|
||||
cmd.env("NYASH_FEATURES", val);
|
||||
} else if crate::config::env::parser_stage3_enabled() {
|
||||
cmd.env("NYASH_FEATURES", "stage3");
|
||||
}
|
||||
if let Ok(val) = std::env::var("NYASH_PARSER_STAGE3") {
|
||||
cmd.env("NYASH_PARSER_STAGE3", val);
|
||||
}
|
||||
|
||||
@ -169,11 +169,8 @@ impl NyashRunner {
|
||||
}
|
||||
}
|
||||
|
||||
if trace
|
||||
&& (std::env::var("NYASH_PARSER_STAGE3").ok() == Some("1".into())
|
||||
|| std::env::var("HAKO_PARSER_STAGE3").ok() == Some("1".into()))
|
||||
{
|
||||
eprintln!("[vm] Stage-3: enabled (env) for {}", filename);
|
||||
if trace && crate::config::env::parser_stage3_enabled() {
|
||||
eprintln!("[vm] Stage-3: enabled (NYASH_FEATURES/legacy env) for {}", filename);
|
||||
}
|
||||
|
||||
// Fail‑Fast (opt‑in): Hako 構文を Nyash VM 経路で実行しない
|
||||
@ -500,8 +497,10 @@ impl NyashRunner {
|
||||
}
|
||||
|
||||
// Phase 33-10.0: If lowering ドライラン統合(箱化版)
|
||||
// HAKO_JOINIR_IF_SELECT=1 で有効化、IfLoweringDryRunner を使用
|
||||
if crate::config::env::joinir_if_select_enabled() {
|
||||
// JoinIR dev + IfSelect 有効時に IfLoweringDryRunner を使用
|
||||
if crate::config::env::joinir_dev_enabled()
|
||||
&& crate::config::env::joinir_if_select_enabled()
|
||||
{
|
||||
let debug_level = crate::config::env::joinir_debug_level();
|
||||
let runner =
|
||||
crate::mir::join_ir::lowering::if_dry_runner::IfLoweringDryRunner::new(debug_level);
|
||||
|
||||
@ -86,11 +86,11 @@ impl NyashRunner {
|
||||
code2 = crate::runner::modes::common_util::hako::strip_local_decl(&code2);
|
||||
}
|
||||
|
||||
if trace
|
||||
&& (std::env::var("NYASH_PARSER_STAGE3").ok() == Some("1".into())
|
||||
|| std::env::var("HAKO_PARSER_STAGE3").ok() == Some("1".into()))
|
||||
{
|
||||
eprintln!("[vm-fallback] Stage-3: enabled (env) for {}", filename);
|
||||
if trace && crate::config::env::parser_stage3_enabled() {
|
||||
eprintln!(
|
||||
"[vm-fallback] Stage-3: enabled (NYASH_FEATURES/legacy env) for {}",
|
||||
filename
|
||||
);
|
||||
}
|
||||
|
||||
// Fail‑Fast (opt‑in): Hako 構文を Nyash VM 経路で実行しない
|
||||
|
||||
@ -12,7 +12,7 @@ use std::process::Command;
|
||||
///
|
||||
/// Sets defaults for:
|
||||
/// - Runtime behavior (NYASH_NYRT_SILENT_RESULT, NYASH_DISABLE_PLUGINS, etc.)
|
||||
/// - Parser toggles (NYASH_PARSER_STAGE3, NYASH_ENABLE_USING, etc.)
|
||||
/// - Parser toggles (NYASH_FEATURES=stage3, legacy NYASH_PARSER_STAGE3, NYASH_ENABLE_USING, etc.)
|
||||
/// - Stage-B configuration (HAKO_STAGEB_APPLY_USINGS, HAKO_STAGEB_MODULES_LIST, etc.)
|
||||
pub(super) fn configure_stage1_env(
|
||||
cmd: &mut Command,
|
||||
@ -87,17 +87,49 @@ pub(super) fn configure_stage1_env(
|
||||
if env::enable_using() { "1" } else { "0" },
|
||||
);
|
||||
}
|
||||
if std::env::var("NYASH_PARSER_STAGE3").is_err() {
|
||||
cmd.env(
|
||||
"NYASH_PARSER_STAGE3",
|
||||
if env::parser_stage3() { "1" } else { "0" },
|
||||
);
|
||||
// Stage-3 gate (default ON): prefer NYASH_FEATURES for propagation, but keep
|
||||
// legacy envs if parent explicitly set them.
|
||||
let stage3_enabled = env::parser_stage3_enabled();
|
||||
let merge_feature = |current: &str, feature: &str| -> String {
|
||||
let mut list: Vec<String> = current
|
||||
.split(',')
|
||||
.filter_map(|s| {
|
||||
let trimmed = s.trim();
|
||||
if trimmed.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(trimmed.to_string())
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
let normalized_feature = feature.replace(['-', '_'], "");
|
||||
let contains = list.iter().any(|f| {
|
||||
let n = f.to_ascii_lowercase().replace(['-', '_'], "");
|
||||
n == normalized_feature
|
||||
});
|
||||
if !contains {
|
||||
list.push(feature.to_string());
|
||||
}
|
||||
list.join(",")
|
||||
};
|
||||
match std::env::var("NYASH_FEATURES") {
|
||||
Ok(current) => {
|
||||
if stage3_enabled {
|
||||
cmd.env("NYASH_FEATURES", merge_feature(¤t, "stage3"));
|
||||
} else {
|
||||
cmd.env("NYASH_FEATURES", current);
|
||||
}
|
||||
}
|
||||
Err(_) if stage3_enabled => {
|
||||
cmd.env("NYASH_FEATURES", "stage3");
|
||||
}
|
||||
Err(_) => {}
|
||||
}
|
||||
if std::env::var("HAKO_PARSER_STAGE3").is_err() {
|
||||
cmd.env(
|
||||
"HAKO_PARSER_STAGE3",
|
||||
if env::parser_stage3() { "1" } else { "0" },
|
||||
);
|
||||
if let Ok(val) = std::env::var("NYASH_PARSER_STAGE3") {
|
||||
cmd.env("NYASH_PARSER_STAGE3", val);
|
||||
}
|
||||
if let Ok(val) = std::env::var("HAKO_PARSER_STAGE3") {
|
||||
cmd.env("HAKO_PARSER_STAGE3", val);
|
||||
}
|
||||
|
||||
// Modules list
|
||||
|
||||
Reference in New Issue
Block a user