Phase 33 NORM canon test: enforce normalized dev route for P1/P2/JP mini
This commit is contained in:
@ -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
|
||||
|
||||
@ -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(" ");
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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!(
|
||||
|
||||
Reference in New Issue
Block a user