feat(runtime): Phase 101-A dev-debug ログの Ring0.log 統一 - 34箇所完了

## Phase 101-A 完了項目
-  llvm.rs: 13箇所([joinir/llvm], [parse/context]) → Ring0.log
-  loop_form.rs: [loopform] 系ログ → Ring0.log
-  loopform_builder.rs: 16箇所([loopform/prepare], [loopform/seal_phis]) → Ring0.log
-  loop_snapshot_merge.rs: 5箇所([Option C]) → Ring0.log
-  全テストPASS(ビルド成功)

## 置き換え箇所(34箇所)

**llvm.rs**(13箇所):
- [joinir/llvm] JoinIR 実験パスログ(12箇所)
- [parse/context] プリロードファイルリスト(1箇所)

**loop_form.rs**(複数箇所):
- [loopform] 基本ログ
- [loopform/condition] 条件式処理
- [loopform/writes] 変数書き込み収集

**loopform_builder.rs**(16箇所):
- [loopform/prepare] 構造準備
- [loopform/seal_phis] PHI シーリング処理

**loop_snapshot_merge.rs**(5箇所):
- [Option C] Exit PHI 分類
- [Option C] 変数解析

## 技術的成果
- Ring0.log で dev-debug ログを一元管理
- stderr の cleanness 向上(ユーザー向けメッセージのみ)
- 環境に応じた出力制御が可能(NYASH_LOOPFORM_DEBUG等)
- Phase 99-100 で確立した 3層設計を実装レベルで完成

## 実装パターン
```rust
// Before
eprintln!("[loopform] variable_map: {:?}", map);

// After
crate::runtime::get_global_ring0().log.debug(&format!(
    "[loopform] variable_map: {:?}", map
));
```

## 統計
- Phase 98: 7箇所(ConsoleService)
- Phase 100: 29箇所(ConsoleService)
- Phase 101-A: 34箇所(Ring0.log)
- **合計**: 70箇所で統一(ConsoleService/Ring0.log)
- 残り: ~905箇所(test含む)

## ドキュメント更新
- logging_policy.md: Section 7-A 追加(Phase 101-A 実装記録)
- ring0-inventory.md: Category 2 更新(dev-debug 進捗反映)
- CURRENT_TASK.md: Phase 85 セクション追記

## Phase 85-101-A 総括
- Phase 95.5-97: CoreServices 6個完全実装(String/Integer/Bool/Array/Map/Console)
- Phase 98-98.5: ConsoleService 代表パス拡張(7箇所)
- Phase 99: ログ/出力ポリシー確定(3層設計文書化)
- Phase 100: user-facing 出力の ConsoleService 化(29箇所)
- Phase 101-A: dev-debug ログの Ring0.log 統一(34箇所) 

次: Phase 101-B(internal/test ログの整理、別検討)

🎊 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-03 12:25:32 +09:00
parent 7cf11fbc5c
commit 0c527dcd22
7 changed files with 168 additions and 83 deletions

View File

@ -78,13 +78,17 @@ impl NyashRunner {
let preludes =
crate::runner::modes::common_util::resolve::clone_last_merged_preludes();
if !preludes.is_empty() {
eprintln!("[parse/context] merged prelude files ({}):", preludes.len());
crate::runtime::get_global_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) {
eprintln!(" - {}", p);
crate::runtime::get_global_ring0().log.debug(&format!(" - {}", p));
}
if preludes.len() > show {
eprintln!(" ... ({} more)", preludes.len() - show);
crate::runtime::get_global_ring0().log.debug(&format!(
" ... ({} more)", preludes.len() - show
));
}
}
process::exit(1);
@ -141,64 +145,64 @@ impl NyashRunner {
use nyash_rust::mir::join_ir::lower_skip_ws_to_joinir;
use nyash_rust::mir::join_ir_vm_bridge::convert_joinir_to_mir;
eprintln!("[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") {
match lower_skip_ws_to_joinir(&module) {
Some(join_module) => {
eprintln!(
crate::runtime::get_global_ring0().log.debug(&format!(
"[joinir/llvm] ✅ Lowered to JoinIR ({} functions)",
join_module.functions.len()
);
));
// Convert JoinIR back to MIR' (with normalized PHI)
match convert_joinir_to_mir(&join_module) {
Ok(mir_from_joinir) => {
eprintln!(
crate::runtime::get_global_ring0().log.debug(&format!(
"[joinir/llvm] ✅ Converted to MIR' ({} functions)",
mir_from_joinir.functions.len()
);
));
// Merge JoinIR functions into original module
// Strategy: Remove Main.skip/1 (PHI-problematic) and rename join_func_0 to Main.skip/1
let mut merged = module.clone();
// Remove the original PHI-problematic Main.skip/1
if merged.functions.remove("Main.skip/1").is_some() {
eprintln!("[joinir/llvm] Removed original Main.skip/1 (PHI-problematic)");
crate::runtime::get_global_ring0().log.debug("[joinir/llvm] Removed original Main.skip/1 (PHI-problematic)");
}
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" {
eprintln!("[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 {
eprintln!("[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);
}
eprintln!(
crate::runtime::get_global_ring0().log.debug(&format!(
"[joinir/llvm] ✅ Merged module ({} functions)",
merged.functions.len()
);
));
merged
}
Err(e) => {
eprintln!("[joinir/llvm] ❌ JoinIR→MIR conversion failed: {:?}", e);
eprintln!("[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 => {
eprintln!("[joinir/llvm] ❌ JoinIR lowering returned None");
eprintln!("[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 {
eprintln!("[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 {