Unify condition lowering logic across Pattern 2/4 with trait-based API. New infrastructure: - condition_lowering_box.rs: ConditionLoweringBox trait + ConditionContext (293 lines) - ExprLowerer implements ConditionLoweringBox trait (+51 lines) Pattern migrations: - Pattern 2 (loop_with_break_minimal.rs): Use trait API - Pattern 4 (loop_with_continue_minimal.rs): Use trait API Benefits: - Unified condition lowering interface - Extensible for future lowering strategies - Clean API boundary between patterns and lowering logic - Zero code duplication Test results: 911/911 PASS (+2 new tests) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
5.8 KiB
5.8 KiB
Phase 71 Findings - SSA/selfhost 再ブートストラップ観測報告
実施日: 2025-12-02 担当: Claude (Phase 70完了直後にPhase 71開始)
📊 観測結果サマリー
代表パス実行状況
NYASH_ROOT=/home/tomoaki/git/hakorune-selfhost \
NYASH_FEATURES=stage3 \
NYASH_USE_NY_COMPILER=1 \
NYASH_NY_COMPILER_EMIT_ONLY=1 \
NYASH_SELFHOST_KEEP_RAW=1 \
./tools/selfhost/selfhost_build.sh --in apps/tests/stage1_run_min.hako --run
結果:
- ✅ Stage-B compiler実行成功 (
rc_stageb=0) - ❌ Program JSON抽出失敗 (
extract_ok=0) - ❌ Program JSON行数: 0件 (emit失敗)
RAWログ
Location: /home/tomoaki/git/hakorune-selfhost/logs/selfhost/stageb_20251202_101623_2665649.log
Size: 707K
🔍 根本原因分析
1. SSA undef警告 (4件)
影響関数:
-
ParserCommonUtilsBox.trim/1Copy { dst: ValueId(2), src: ValueId(272) }atBasicBlockId(787)- ValueId(272)が未定義
-
ParserBox.trim/1Copy { dst: ValueId(4), src: ValueId(272) }atBasicBlockId(2479)- ValueId(272)が未定義
-
Main._parse_number/1Copy { dst: ValueId(2), src: ValueId(12) }atBasicBlockId(6708)- ValueId(12)が未定義
-
ParserBox.parse_block2/2Copy { dst: ValueId(5), src: ValueId(440) }atBasicBlockId(2573)- ValueId(440)が未定義
パターン: すべてCopy命令で未定義ValueIdをコピーしようとしている
2. dev verify警告 (1件)
[warn] dev verify: NewBox StageBDriverBox at v%366 not followed by birth() call
(expect StageBDriverBox.birth/0)
影響: StageBDriverBoxの初期化手順が不完全
🎯 Phase 71-SSA側の課題
課題1: trim系関数のSSA undef
影響範囲:
ParserCommonUtilsBox.trim/1ParserBox.trim/1
想定原因:
- レシーバ引数の受け渡しでValueIdが未定義のまま渡されている
- 関数呼び出し時のパラメータマッピングに問題がある可能性
対応方針 (Phase 71-SSA-debug/TASKS.md):
lang/src/compiler/parser/common_utils.hakoのtrim/1実装を確認- 呼び出し側での引数渡しパターンを確認
- 必要に応じて
skip_wsベースの実装に統一(前回修正パターン適用)
課題2: Stage-B DriverBox birth警告
影響:
StageBDriverBoxが NewBox直後にbirth()を呼んでいない
対応方針:
apps/selfhost-compiler/compiler.hakoのStageBDriverBox使用箇所を確認- birth()呼び出しを追加(または不要な場合は警告を緩和)
課題3: Program JSON未出力
状況:
- Stage-B rc=0 (エラーなし)
- しかしProgram JSON行が0件
想定原因:
- SSA undef や dev verify警告により、JSON出力処理に到達する前に処理が中断している可能性
- または JSON出力ロジック自体に問題がある可能性
対応方針:
NYASH_STAGEB_DEV_VERIFY=0で dev verify無効化して比較- Stage-B DriverBox の Program JSON出力箇所にトレースログ追加
- SSA undef解消後に再度実行して状況確認
📋 Phase 71次のステップ
ステップ1: SSA undef優先修正
trim/1系関数のSSA undef解消- 前回の
_trim/1修正パターン(ダミーカンマ+静的呼び出し統一)を適用
ステップ2: dev verify緩和トグル活用
NYASH_STAGEB_DEV_VERIFY=0での実行比較- Program JSON出力復活の有無を確認
ステップ3: Stage-B DriverBox トレース強化
- Program JSON出力直前のトレースログ追加
- 処理フローの可視化
ステップ4: 代表パス安定化
- SSA undef全解消
- dev verify警告を0件に
- Program JSON emit成功を確認
🔗 関連ドキュメント
- Phase 71 README:
docs/private/roadmap2/phases/phase-71-selfhost-reboot/README.md - Phase 71-SSA README:
docs/private/roadmap2/phases/phase-71-ssa-debug/README.md - Phase 71-SSA TASKS:
docs/private/roadmap2/phases/phase-71-ssa-debug/TASKS.md - CURRENT_TASK.md: Line 112-119 (Phase 71-SSA観測停止中メモ)
💡 重要な気づき
JoinIR は問題なし
[joinir/vm_bridge]ログから、JoinIRパスは正常動作しているFuncScannerBox.trimは JoinIR経路で正常に lowering されている- Phase 71-SSAの問題は「JoinIRとは無関係」
プラグイン初期化も問題なし
[UnifiedBoxRegistry] 🎯 Factory Policy: StrictPluginFirst成功[provider-registry] FileBox: using registered provider成功- Phase 71-SSAの問題は「プラグインとも無関係」
真の問題箇所
- SSA/Stage-B MIR生成時の ValueId未定義問題
- StageBDriverBox の初期化手順不備
- これらが複合的にProgram JSON emit失敗を引き起こしている
📝 Phase 71完了判定基準
- SSA undef警告: 4件 → 0件
- dev verify警告: 1件 → 0件
- Program JSON抽出: 0件 → 1件以上
- 代表パス
selfhost_build + stage1_run_min.hakoが GREEN
現在の状況: 0/4基準達成(観測窓としての役割は完了)
🎯 次のフェーズへの引き継ぎ
Phase 71の成果:
- ✅ Phase 70完了直後にPhase 71実行成功
- ✅ RAW観測レイヤ活用成功
- ✅ SSA undef根本原因特定(trim系関数の未定義ValueId問題)
- ✅ JoinIR/プラグインは無関係であることを確認
Phase 71-SSA-debugへの課題引き継ぎ:
- trim系関数 SSA undef 修正(4件 → 0件)
- StageBDriverBox birth警告 解消(1件 → 0件)
- Program JSON emit 復活(0件 → 1件以上)
備考: このドキュメントは Phase 71初回実行の観測結果を記録したものです。 SSA undef修正作業は Phase 71-SSA-debug側で継続します。 Status: Historical