Phase 22.x WIP: LLVM backend improvements + MIR builder enhancements
LLVM backend improvements: - Add native LLVM backend support (NYASH_LLVM_BACKEND=native) - Add crate backend selector with priority (crate > llvmlite) - Add native_llvm_builder.py for native IR generation - Add NYASH_LLVM_NATIVE_TRACE=1 for IR dump MIR builder enhancements: - Refactor lower_if_compare_* boxes for better code generation - Refactor lower_return_* boxes for optimized returns - Refactor lower_loop_* boxes for loop handling - Refactor lower_method_* boxes for method calls - Update pattern_util_box for better pattern matching Smoke tests: - Add phase2100 S3 backend selector tests (17 new tests) - Add phase2120 native backend tests (4 new tests) - Add phase2034 MIR builder internal tests (2 new tests) - Add phase2211 TLV shim parity test Documentation: - Update ENV_VARS.md with LLVM backend variables - Update CURRENT_TASK.md with progress - Update README.md and CHANGELOG.md Config: - Add NYASH_LLVM_BACKEND env support in src/config/env.rs - Update ny_mir_builder.sh for backend selection - Update dispatch.rs for backend routing Tools: - Add tools/native_llvm_builder.py - Update smokes/v2/profiles/quick/core/phase2100/run_all.sh Known: Many Hako builder internal files modified for optimization
This commit is contained in:
@ -33,9 +33,12 @@ impl NyashEnv {
|
||||
|
||||
// Global current env config (thread-safe)
|
||||
use once_cell::sync::OnceCell;
|
||||
use std::collections::HashSet;
|
||||
use std::sync::Mutex;
|
||||
use std::sync::RwLock;
|
||||
|
||||
static GLOBAL_ENV: OnceCell<RwLock<NyashEnv>> = OnceCell::new();
|
||||
static WARNED_ALIASES: OnceCell<Mutex<HashSet<String>>> = OnceCell::new();
|
||||
// フェーズM.2: PHI_ON_GATED_WARNED削除(phi-legacy簡略化により不要)
|
||||
|
||||
pub fn current() -> NyashEnv {
|
||||
@ -376,11 +379,19 @@ pub fn cli_verbose() -> bool {
|
||||
}
|
||||
pub fn enable_using() -> bool {
|
||||
// Phase 15: デフォルトON(using systemはメイン機能)
|
||||
// NYASH_ENABLE_USING=0 で明示的に無効化可能
|
||||
// NYASH_ENABLE_USING=0 で明示的に無効化可能。HAKO_ENABLE_USING は互換のため受理(警告)。
|
||||
match std::env::var("NYASH_ENABLE_USING").ok().as_deref() {
|
||||
Some("0") | Some("false") | Some("off") => false,
|
||||
_ => true, // デフォルト: ON
|
||||
Some("0") | Some("false") | Some("off") => return false,
|
||||
Some(_) => return true,
|
||||
None => {}
|
||||
}
|
||||
// Fallback to alias
|
||||
if let Some(v) = std::env::var("HAKO_ENABLE_USING").ok() {
|
||||
warn_alias_once("HAKO_ENABLE_USING", "NYASH_ENABLE_USING");
|
||||
let lv = v.to_ascii_lowercase();
|
||||
return !(lv == "0" || lv == "false" || lv == "off");
|
||||
}
|
||||
true // default ON
|
||||
}
|
||||
|
||||
// ---- Using profiles (dev|ci|prod) ----
|
||||
@ -466,7 +477,14 @@ pub fn ny_compiler_stage3() -> bool {
|
||||
/// When enabled, the Rust parser accepts Stage-3 surface (try/catch/finally, throw).
|
||||
/// Default is OFF to keep Stage-2 stable.
|
||||
pub fn parser_stage3() -> bool {
|
||||
std::env::var("NYASH_PARSER_STAGE3").ok().as_deref() == Some("1")
|
||||
if std::env::var("NYASH_PARSER_STAGE3").ok().as_deref() == Some("1") {
|
||||
return true;
|
||||
}
|
||||
if std::env::var("HAKO_PARSER_STAGE3").ok().as_deref() == Some("1") {
|
||||
warn_alias_once("HAKO_PARSER_STAGE3", "NYASH_PARSER_STAGE3");
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
/// Parser gate for Block‑Postfix Catch acceptance
|
||||
@ -578,3 +596,72 @@ pub fn oob_strict_fail() -> bool {
|
||||
.or_else(|| env_flag("NYASH_OOB_STRICT_FAIL"))
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
/// Primary verification route: return true when Hakorune VM is requested as primary.
|
||||
/// Accepts HAKO_VERIFY_PRIMARY=hakovm (preferred) or legacy HAKO_ROUTE_HAKOVM=1 (deprecated, warns).
|
||||
pub fn verify_primary_is_hakovm() -> bool {
|
||||
if std::env::var("HAKO_VERIFY_PRIMARY").ok().as_deref() == Some("hakovm") {
|
||||
return true;
|
||||
}
|
||||
if env_bool("HAKO_ROUTE_HAKOVM") {
|
||||
warn_alias_once("HAKO_ROUTE_HAKOVM", "HAKO_VERIFY_PRIMARY=hakovm");
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
fn warn_alias_once(alias: &str, primary: &str) {
|
||||
let set = WARNED_ALIASES.get_or_init(|| Mutex::new(HashSet::new()));
|
||||
if let Ok(mut s) = set.lock() {
|
||||
if !s.contains(alias) {
|
||||
eprintln!("[deprecate/env] '{}' is deprecated; use '{}'", alias, primary);
|
||||
s.insert(alias.to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---- ENV consolidation helpers (Phase 21.10/22.1) ----
|
||||
/// LLVM opt level (primary: NYASH_LLVM_OPT_LEVEL; alias: HAKO_LLVM_OPT_LEVEL)
|
||||
/// Returns string level (e.g., "0", "1", ...). Default: "0" when unset.
|
||||
pub fn llvm_opt_level() -> String {
|
||||
if let Some(v) = std::env::var("NYASH_LLVM_OPT_LEVEL").ok() {
|
||||
return v;
|
||||
}
|
||||
if let Some(v) = std::env::var("HAKO_LLVM_OPT_LEVEL").ok() {
|
||||
warn_alias_once("HAKO_LLVM_OPT_LEVEL", "NYASH_LLVM_OPT_LEVEL");
|
||||
return v;
|
||||
}
|
||||
"0".to_string()
|
||||
}
|
||||
|
||||
/// Gate‑C(Core) route request (primary: NYASH_GATE_C_CORE; alias: HAKO_GATE_C_CORE)
|
||||
pub fn gate_c_core() -> bool {
|
||||
if env_bool("NYASH_GATE_C_CORE") { return true; }
|
||||
if env_bool("HAKO_GATE_C_CORE") {
|
||||
warn_alias_once("HAKO_GATE_C_CORE", "NYASH_GATE_C_CORE");
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
/// Consolidated toggle for selfhost NY compiler pipeline.
|
||||
/// Primary: NYASH_USE_NY_COMPILER=0|1. Legacy disables accepted (with warning):
|
||||
/// NYASH_DISABLE_NY_COMPILER/HAKO_DISABLE_NY_COMPILER (any true value disables).
|
||||
pub fn use_ny_compiler() -> bool {
|
||||
// Primary knob takes precedence when explicitly set
|
||||
if let Some(v) = std::env::var("NYASH_USE_NY_COMPILER").ok() {
|
||||
let lv = v.trim().to_ascii_lowercase();
|
||||
return lv == "1" || lv == "true" || lv == "on";
|
||||
}
|
||||
// Legacy disable aliases — if any is true, treat as disabled and warn
|
||||
if env_bool("NYASH_DISABLE_NY_COMPILER") {
|
||||
warn_alias_once("NYASH_DISABLE_NY_COMPILER", "NYASH_USE_NY_COMPILER=0");
|
||||
return false;
|
||||
}
|
||||
if env_bool("HAKO_DISABLE_NY_COMPILER") {
|
||||
warn_alias_once("HAKO_DISABLE_NY_COMPILER", "NYASH_USE_NY_COMPILER=0");
|
||||
return false;
|
||||
}
|
||||
// Default: ON (MVP selfhost path)
|
||||
true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user