Phase 33 NORM canon test: enforce normalized dev route for P1/P2/JP mini

This commit is contained in:
nyash-codex
2025-12-11 20:54:33 +09:00
parent 59a985b7fa
commit af6f95cd4b
170 changed files with 4423 additions and 1897 deletions

View File

@ -199,11 +199,7 @@ pub(crate) fn execute_file_with_backend(runner: &NyashRunner, filename: &str) {
}
// Backend selection
if std::env::var("NYASH_EMIT_MIR_TRACE")
.ok()
.as_deref()
== Some("1")
{
if std::env::var("NYASH_EMIT_MIR_TRACE").ok().as_deref() == Some("1") {
eprintln!(
"[dispatch] backend={} file={} path=backend-select",
groups.backend.backend, filename

View File

@ -102,11 +102,7 @@ impl NyashRunner {
let groups = self.config.as_groups();
// CLI mode trace: show backend/file/args when emit-mir trace is enabled
if std::env::var("NYASH_EMIT_MIR_TRACE")
.ok()
.as_deref()
== Some("1")
{
if std::env::var("NYASH_EMIT_MIR_TRACE").ok().as_deref() == Some("1") {
let backend = &groups.backend.backend;
let file = groups.input.file.as_deref().unwrap_or("<none>");
let args = std::env::args().skip(1).collect::<Vec<_>>().join(" ");

View File

@ -79,16 +79,19 @@ impl NyashRunner {
crate::runner::modes::common_util::resolve::clone_last_merged_preludes();
if !preludes.is_empty() {
crate::runtime::get_global_ring0().log.debug(&format!(
"[parse/context] merged prelude files ({}):", preludes.len()
"[parse/context] merged prelude files ({}):",
preludes.len()
));
let show = std::cmp::min(16, preludes.len());
for p in preludes.iter().take(show) {
crate::runtime::get_global_ring0().log.debug(&format!(" - {}", p));
crate::runtime::get_global_ring0()
.log
.debug(&format!(" - {}", p));
}
if preludes.len() > show {
crate::runtime::get_global_ring0().log.debug(&format!(
" ... ({} more)", preludes.len() - show
));
crate::runtime::get_global_ring0()
.log
.debug(&format!(" ... ({} more)", preludes.len() - show));
}
}
process::exit(1);
@ -143,9 +146,11 @@ impl NyashRunner {
&& crate::config::env::llvm_use_harness()
{
use nyash_rust::mir::join_ir::lower_skip_ws_to_joinir;
use nyash_rust::mir::join_ir_vm_bridge::convert_joinir_to_mir;
use nyash_rust::mir::join_ir_vm_bridge::bridge_joinir_to_mir;
crate::runtime::get_global_ring0().log.debug("[joinir/llvm] Attempting JoinIR path for LLVM execution");
crate::runtime::get_global_ring0()
.log
.debug("[joinir/llvm] Attempting JoinIR path for LLVM execution");
// Try to lower Main.skip/1 to JoinIR
if module.functions.contains_key("Main.skip/1") {
@ -156,7 +161,7 @@ impl NyashRunner {
join_module.functions.len()
));
// Convert JoinIR back to MIR' (with normalized PHI)
match convert_joinir_to_mir(&join_module) {
match bridge_joinir_to_mir(&join_module) {
Ok(mir_from_joinir) => {
crate::runtime::get_global_ring0().log.debug(&format!(
"[joinir/llvm] ✅ Converted to MIR' ({} functions)",
@ -174,10 +179,16 @@ impl NyashRunner {
for (name, func) in mir_from_joinir.functions {
// Rename join_func_0 → Main.skip/1 to maintain call compatibility
let target_name = if name == "join_func_0" {
crate::runtime::get_global_ring0().log.debug(&format!("[joinir/llvm] Renaming {} → Main.skip/1", name));
crate::runtime::get_global_ring0().log.debug(&format!(
"[joinir/llvm] Renaming {} → Main.skip/1",
name
));
"Main.skip/1".to_string()
} else {
crate::runtime::get_global_ring0().log.debug(&format!("[joinir/llvm] Adding JoinIR function: {}", name));
crate::runtime::get_global_ring0().log.debug(&format!(
"[joinir/llvm] Adding JoinIR function: {}",
name
));
name
};
merged.functions.insert(target_name, func);
@ -189,20 +200,31 @@ impl NyashRunner {
merged
}
Err(e) => {
crate::runtime::get_global_ring0().log.debug(&format!("[joinir/llvm] ❌ JoinIR→MIR conversion failed: {:?}", e));
crate::runtime::get_global_ring0().log.debug("[joinir/llvm] Falling back to original MIR");
crate::runtime::get_global_ring0().log.debug(&format!(
"[joinir/llvm] ❌ JoinIR→MIR conversion failed: {:?}",
e
));
crate::runtime::get_global_ring0()
.log
.debug("[joinir/llvm] Falling back to original MIR");
module
}
}
}
None => {
crate::runtime::get_global_ring0().log.debug("[joinir/llvm] ❌ JoinIR lowering returned None");
crate::runtime::get_global_ring0().log.debug("[joinir/llvm] Falling back to original MIR");
crate::runtime::get_global_ring0()
.log
.debug("[joinir/llvm] ❌ JoinIR lowering returned None");
crate::runtime::get_global_ring0()
.log
.debug("[joinir/llvm] Falling back to original MIR");
module
}
}
} else {
crate::runtime::get_global_ring0().log.debug("[joinir/llvm] Main.skip/1 not found, using original MIR");
crate::runtime::get_global_ring0()
.log
.debug("[joinir/llvm] Main.skip/1 not found, using original MIR");
module
}
} else {
@ -254,7 +276,8 @@ impl NyashRunner {
Err(e) => {
crate::console_println!(
"❌ harness output not found after emit: {} ({})",
_out_path, e
_out_path,
e
);
process::exit(1);
}
@ -325,7 +348,10 @@ impl NyashRunner {
if !stdout_text.is_empty() {
print!("{}", stdout_text);
}
crate::console_println!("✅ LLVM (harness) execution completed (exit={})", code);
crate::console_println!(
"✅ LLVM (harness) execution completed (exit={})",
code
);
std::process::exit(code);
}
Err(e) => {
@ -358,7 +384,9 @@ impl NyashRunner {
crate::console_println!("📊 Exit code: {}", exit_code);
process::exit(exit_code as i32);
} else {
crate::console_println!("✅ LLVM execution completed (non-integer result)!");
crate::console_println!(
"✅ LLVM execution completed (non-integer result)!"
);
crate::console_println!("📊 Result: {}", result.to_string_box().value);
}
}

View File

@ -47,7 +47,9 @@ impl NyashRunner {
if let Err(e) = provider_lock::set_filebox_provider(filebox_provider) {
if !quiet_pipe {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.warn(&format!("[warn] FileBox provider already set: {}", e));
ring0
.log
.warn(&format!("[warn] FileBox provider already set: {}", e));
}
}
@ -94,7 +96,9 @@ impl NyashRunner {
Ok(content) => content,
Err(e) => {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("❌ Error reading file {}: {}", filename, e));
ring0
.log
.error(&format!("❌ Error reading file {}: {}", filename, e));
process::exit(1);
}
};
@ -180,11 +184,15 @@ impl NyashRunner {
if let Err(e) = fs::write(&path, &code_final) {
if trace {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.warn(&format!("[vm/merged-hako] failed to write {}: {}", path, e));
ring0
.log
.warn(&format!("[vm/merged-hako] failed to write {}: {}", path, e));
}
} else if trace || crate::config::env::env_bool("NYASH_VM_DUMP_MERGED_HAKO_LOG") {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.debug(&format!("[vm/merged-hako] dumped merged code to {}", path));
ring0
.log
.debug(&format!("[vm/merged-hako] dumped merged code to {}", path));
}
}
@ -226,13 +234,18 @@ impl NyashRunner {
crate::runner::modes::common_util::resolve::clone_last_merged_preludes();
if !preludes.is_empty() {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.debug(&format!("[parse/context] merged prelude files ({}):", preludes.len()));
ring0.log.debug(&format!(
"[parse/context] merged prelude files ({}):",
preludes.len()
));
let show = std::cmp::min(16, preludes.len());
for p in preludes.iter().take(show) {
ring0.log.debug(&format!(" - {}", p));
}
if preludes.len() > show {
ring0.log.debug(&format!(" ... ({} more)", preludes.len() - show));
ring0
.log
.debug(&format!(" ... ({} more)", preludes.len() - show));
}
}
process::exit(1);
@ -542,11 +555,7 @@ impl NyashRunner {
// Routing logic is centralized in join_ir_vm_bridge_dispatch module
try_run_joinir_vm_bridge(&module_vm, quiet_pipe);
if std::env::var("NYASH_EMIT_MIR_TRACE")
.ok()
.as_deref()
== Some("1")
{
if std::env::var("NYASH_EMIT_MIR_TRACE").ok().as_deref() == Some("1") {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.debug("[runner/vm] calling execute_module");
}
@ -554,13 +563,12 @@ impl NyashRunner {
Ok(ret) => {
use crate::box_trait::{BoolBox, IntegerBox};
if std::env::var("NYASH_EMIT_MIR_TRACE")
.ok()
.as_deref()
== Some("1")
{
if std::env::var("NYASH_EMIT_MIR_TRACE").ok().as_deref() == Some("1") {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.debug(&format!("[runner/vm] vm_result={}", ret.to_string_box().value));
ring0.log.debug(&format!(
"[runner/vm] vm_result={}",
ret.to_string_box().value
));
}
// Extract exit code from return value
@ -581,7 +589,10 @@ impl NyashRunner {
if crate::config::env::env_bool("NYASH_VM_STATS") {
let ring0 = crate::runtime::ring0::get_global_ring0();
let (inst, br, cmp) = vm.stats_counters();
ring0.log.debug(&format!("[vm/stats] inst={} compare={} branch={}", inst, cmp, br));
ring0.log.debug(&format!(
"[vm/stats] inst={} compare={} branch={}",
inst, cmp, br
));
}
// Quiet mode: suppress "RC:" output for JSON-only pipelines
@ -589,13 +600,11 @@ impl NyashRunner {
// Phase 105.5: Unified console output via macro
crate::console_println!("RC: {}", exit_code);
}
if std::env::var("NYASH_EMIT_MIR_TRACE")
.ok()
.as_deref()
== Some("1")
{
if std::env::var("NYASH_EMIT_MIR_TRACE").ok().as_deref() == Some("1") {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.debug(&format!("[runner/vm] exit_code={}", exit_code));
ring0
.log
.debug(&format!("[runner/vm] exit_code={}", exit_code));
}
// Exit with the return value as exit code
@ -603,11 +612,7 @@ impl NyashRunner {
}
Err(e) => {
let ring0 = crate::runtime::ring0::get_global_ring0();
if std::env::var("NYASH_EMIT_MIR_TRACE")
.ok()
.as_deref()
== Some("1")
{
if std::env::var("NYASH_EMIT_MIR_TRACE").ok().as_deref() == Some("1") {
ring0.log.debug(&format!("[runner/vm] vm_error={}", e));
}
ring0.log.error(&format!("❌ [rust-vm] VM error: {}", e));

View File

@ -26,7 +26,9 @@ fn check_oob_strict_exit() {
if crate::config::env::oob_strict_fail() && crate::runtime::observe::oob_seen() {
// Phase 88: Ring0Context 経由でエラーログ出力
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error("[selfhost][oob-strict] Out-of-bounds observed → exit(1)");
ring0
.log
.error("[selfhost][oob-strict] Out-of-bounds observed → exit(1)");
std::process::exit(1);
}
}
@ -117,7 +119,9 @@ impl NyashRunner {
}
Err(e) => {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("[ny-compiler] using text merge error: {}", e));
ring0
.log
.error(&format!("[ny-compiler] using text merge error: {}", e));
return false;
}
}
@ -155,7 +159,9 @@ impl NyashRunner {
let tmp_dir = std::path::Path::new("tmp");
if let Err(e) = std::fs::create_dir_all(tmp_dir) {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("[ny-compiler] mkdir tmp failed: {}", e));
ring0
.log
.error(&format!("[ny-compiler] mkdir tmp failed: {}", e));
return false;
}
@ -206,14 +212,19 @@ impl NyashRunner {
}
Err(e) => {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("[ny-compiler] pre-expand compile error: {}", e));
ring0.log.error(&format!(
"[ny-compiler] pre-expand compile error: {}",
e
));
return false;
}
}
}
Err(e) => {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("[ny-compiler] pre-expand parse error: {}", e));
ring0
.log
.error(&format!("[ny-compiler] pre-expand parse error: {}", e));
return false;
}
}
@ -225,13 +236,17 @@ impl NyashRunner {
Ok(mut f) => {
if let Err(e) = f.write_all(code_ref.as_bytes()) {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("[ny-compiler] write tmp failed: {}", e));
ring0
.log
.error(&format!("[ny-compiler] write tmp failed: {}", e));
return false;
}
}
Err(e) => {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("[ny-compiler] open tmp failed: {}", e));
ring0
.log
.error(&format!("[ny-compiler] open tmp failed: {}", e));
return false;
}
}
@ -368,7 +383,9 @@ impl NyashRunner {
}
Err(e) => {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("[ny-compiler] json parse error (child): {}", e));
ring0
.log
.error(&format!("[ny-compiler] json parse error (child): {}", e));
}
}
}
@ -391,7 +408,9 @@ impl NyashRunner {
Ok(o) => o,
Err(e) => {
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("[ny-compiler] python harness failed: {}", e));
ring0
.log
.error(&format!("[ny-compiler] python harness failed: {}", e));
return false;
}
};
@ -482,7 +501,9 @@ impl NyashRunner {
)
{
let ring0 = crate::runtime::ring0::get_global_ring0();
ring0.log.error(&format!("❌ PyVM MIR JSON emit error: {}", e));
ring0
.log
.error(&format!("❌ PyVM MIR JSON emit error: {}", e));
process::exit(1);
}
crate::cli_v!(