bec2e2ffe6
feat(joinir): Phase 38 If-side PHI Level 1 deletion (90 lines, LOW safety)
...
Phase 38: Level 1 deletion complete (exceeded target by 22 lines)
- Deleted merge_modified_with_control (51 lines, dead code, 0 callsites)
- Deleted extract_assigned_var (39 lines, JoinIR AST lowering replacement)
- Updated callsites: if_form.rs (2), phi.rs (2) → replaced with None
File changes:
- if_phi.rs: 315 → 225 lines (90 lines, 28.6% reduction)
- Callsites updated: 4 sites (if_form.rs, phi.rs)
Technical achievements:
✅ JoinIR coverage verification (None replacement passes all tests)
✅ Dead code elimination (merge_modified_with_control 0 callsites)
✅ Staged deletion strategy validation (Phase 37 3-level plan works)
Test results:
✅ cargo build --release: Clean
✅ PHI tests: 58/58 PASS (no regression)
✅ JoinIR Frontend tests: 37/38 PASS (1 failure pre-existing test ordering)
✅ Full lib tests: 399-400/460 PASS (10-12 non-deterministic failures baseline)
Phase 35-38 cumulative: 605 lines deleted (430+107+90)
Phase 39+ potential: 415 lines (Level 2: 115, Level 3: 300)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-28 05:01:04 +09:00
616767ca06
chore: Update docs/private submodule (Phase 37 If-side PHI design)
...
Phase 37 documentation complete:
- If/PHI responsibility inventory (12 critical callsites)
- JoinIR coverage mapping (Phase 33-34)
- 3-level deletion criteria (Level 1/2/3)
- Deletion sequence plan (Phase 38/39/40+)
CURRENT_TASK.md updated with Phase 37 completion:
- Section 1-00j added with full design summary
- 483 lines deletion potential (Phase 38/39/40+)
- Zero functional code changes (docs-only phase)
Phase 35-37 cumulative: 537 lines deleted + 483 lines planned
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-28 04:41:44 +09:00
1beb9181cd
chore: Update docs/private submodule (Phase 36 final docs)
...
Phase 36 documentation completion:
- PHI_BOX_INVENTORY.md updated with reduction records
- README.md/TASKS.md completion status
- CURRENT_TASK.md Phase 36 section added
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-28 04:29:04 +09:00
5cdf84248f
chore: Update docs/private submodule (Phase 35-4 completion)
2025-11-28 01:19:14 +09:00
c2fb9dab6b
feat(joinir): Phase 35-5 PHI box deletion (430 lines HIGH safety)
...
Phase 35-5: First wave deletion
- Deleted if_body_local_merge.rs (339 lines, 0 external calls)
- Inlined logic into PhiBuilderBox::compute_modified_names_if()
- Absorbed into PhiBuilderBox (isolated box with no external dependencies)
- Deleted phi_invariants.rs (91 lines, moved to JoinIR Verifier)
- Removed ensure_if_values_exist() call from phi_builder_box.rs
- Validation responsibility transferred to JoinIR Verifier
- Updated PHI_BOX_INVENTORY.md with deletion records
Phase 35-3/4: Documentation and route unification
- Added frontend_covered column to PHI_BOX_INVENTORY.md
- Documented JoinIR Runner routes (Route A: SSOT, Route B: structure validation)
- Updated join_ir_runner.rs module docstring with clear route guidelines
Build and test status:
✅ cargo build --release: Clean
✅ Phase 34 tests: All PASS (no regression)
✅ JoinIR tests: joinir_frontend_if_select, test_if_merge_simple_pattern PASS
Total reduction: 430 lines (HIGH safety achieved)
Phase 36+ potential: ~3,275 lines (MEDIUM/LOW safety)
Related docs:
- docs/private/roadmap2/phases/phase-35-phi-reduction/README.md
- docs/private/roadmap2/phases/phase-35-phi-reduction-investigation-report.md
- docs/private/roadmap2/phases/phase-30-final-joinir-world/PHI_BOX_INVENTORY.md
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-28 01:18:57 +09:00
853d80ba74
feat(joinir): Phase 34-7.5 helpers + Phase 34-8 Break/Continue implementation
...
Phase 34-7.5: Code organization improvements
- Added type conversion helpers (as_cont/as_func) in join_ir/mod.rs
- Enhanced docstrings for JoinCall/JoinJump with usage examples
- Improved error messages in join_ir_vm_bridge.rs
JoinIrFrontendTestRunner box implementation
- Created src/tests/helpers/joinir_frontend.rs (119 lines)
- Reduced test code by 83% (70 lines → 12 lines per test)
- 26% overall reduction in test file (284 → 209 lines)
Phase 34-8: Break/Continue pattern implementation
- Extended ast_lowerer.rs (+630 lines)
- lower_loop_break_pattern(): Break as Jump (early return)
- lower_loop_continue_pattern(): Continue as Select + Call
- Added Bool literal support in extract_value()
- Created 2 fixtures: loop_frontend_{break,continue}.program.json
- Added 2 A/B tests (all 6 Phase 34 tests PASS)
Technical achievements:
- Break = Jump (early return pattern)
- Continue = Select + Call (NOT Jump) - critical discovery
- 3-function structure sufficient (no k_continue needed)
- SSA-style re-assignment with natural var_map updates
Test results:
✅ joinir_frontend_if_select_simple_ab_test
✅ joinir_frontend_if_select_local_ab_test
✅ joinir_frontend_json_shape_read_value_ab_test
✅ joinir_frontend_loop_simple_ab_test
✅ joinir_frontend_loop_break_ab_test
✅ joinir_frontend_loop_continue_ab_test
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-28 01:02:49 +09:00
a22726934d
chore: Update docs/private submodule (Phase 34-6 docs)
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-27 17:06:17 +09:00
588129db65
feat(joinir): Phase 34-6 MethodCall 構造と本物の substring 意味論
...
**Phase 34-6 実装完了**: MethodCall 構造を JoinIR に追加し、本物の substring
呼び出しを通すことに成功。
## 主要変更
### 1. MethodCall 構造追加 (34-6.1)
- `src/mir/join_ir/mod.rs`: JoinInst::MethodCall バリアント (+8 lines)
- 構造: `{ dst, receiver, method, args }`
- 設計原則: JoinIR は構造のみ、意味論は MIR レベル
### 2. extract_value 更新 (34-6.2)
- `src/mir/join_ir/frontend/ast_lowerer.rs`: Method 処理本物化 (+37 lines)
- receiver/args を extract_value で再帰処理
- ダミー Const(0) 削除 → 本物の MethodCall 生成
- cond 処理修正: ValueId(0) ハードコード → extract_value で取得
### 3. JoinIR→MIR 変換実装 (34-6.3)
- `src/mir/join_ir_vm_bridge.rs`: MethodCall → BoxCall 変換 (+12 lines)
- `src/mir/join_ir/json.rs`: MethodCall JSON シリアライゼーション (+16 lines)
- `src/mir/join_ir_runner.rs`: MethodCall 未対応エラー (+7 lines)
### 4. テスト更新 (34-6.4)
- `docs/.../fixtures/json_shape_read_value.program.json`: 本物の substring 構造
- `src/tests/joinir_frontend_if_select.rs`: run_joinir_via_vm 使用
- テスト成功: v="hello", at=3 → "hel" ✅
## 成果
- ✅ テスト全通過(1 passed; 0 failed)
- ✅ 設計原則確立: JoinIR = 構造 SSOT、意味論 = MIR レベル
- ✅ Phase 33-10 原則との整合性: Method でも同じ原則適用
**ドキュメント更新**: CURRENT_TASK.md + TASKS.md(Phase 34-6 完了記録)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-27 17:05:46 +09:00
6a5701ead9
feat(joinir): Phase 34-4 & 34-5 — JoinIR Frontend Stage-1/meta 対応 & extract_value 汎用化
...
Phase 34-4: Stage-1/meta 実用関数対応
- 対象関数: JsonShapeToMap._read_value_from_pair/1
- フィクスチャ簡略化(Int 10/20 ダミー値)
- match 分岐に "_read_value_from_pair" 追加(1行変更)
- テスト追加: joinir_frontend_json_shape_read_value_ab_test
- DRY 原則維持(Phase 34-3 refactoring の完全勝利)
Phase 34-5: extract_value 汎用化 & 実用 if の意味論対応
- ExtractCtx 構造体追加(ValueId カウンタ + 変数名マップ)
- extract_value 実装(Int/Var/Method 対応)
- lower_if_return_pattern を extract_value ベースに統一
- extract_int_value 削除(重複コード削減)
- コメント更新(Phase 34-5 反映)
変更ファイル:
- src/mir/join_ir/frontend/ast_lowerer.rs: +248 -62 lines (ExtractCtx + extract_value)
- src/tests/joinir_frontend_if_select.rs: +66 lines (json_shape テスト)
- CURRENT_TASK.md: Phase 34-4 & 34-5 記録追加
- docs/private: Phase 34 ドキュメント追加(README/TASKS/fixtures)
テスト結果: 3 passed; 0 failed
- joinir_frontend_if_select_simple_ab_test (Phase 34-2)
- joinir_frontend_if_select_local_ab_test (Phase 34-3)
- joinir_frontend_json_shape_read_value_ab_test (Phase 34-4)
技術的成果:
- Int ダミー値 → 本物の式(Var)への段階的移行成功
- extract_value 統一により、今後の expr 拡張が容易に
- Method 呼び出し pattern match 実装(Phase 34-6 への準備完了)
- DRY 原則遵守(extract_int_value 削除、重複コード削減)
ガードレール完全遵守:
- Phase 34 frontend テスト専用(既定経路不変)
- JoinIR = PHI 生成器の原則維持
- 未対応パターンは panic(tiny テスト専用で合理的)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-27 16:31:06 +09:00
9e9e08eb84
feat(joinir): Phase 33-9.1 Loop/If lowering responsibility separation
...
Implement clear separation between Loop and If lowering responsibilities:
**Guard Implementation:**
- Add is_loop_lowered_function() to identify 6 Loop-dedicated functions
- Exclude Loop functions from If lowering path in try_lower_if_to_joinir()
- Enforce "1 function → 1 lowering" principle
**Documentation:**
- Add responsibility comments to loop_to_join.rs
- Add responsibility comments to if_select.rs and if_merge.rs
- Update if_joinir_design.md with Phase 33-9.1 section
**Testing:**
- Add unit test test_is_loop_lowered_function() (PASS)
- Verify no regression in existing JoinIR tests
**Loop-dedicated functions (6):**
- Main.skip/1
- FuncScannerBox.trim/1
- FuncScannerBox.append_defs/2
- Stage1UsingResolverBox.resolve_for_source/5
- StageBBodyExtractorBox.build_body_src/2
- StageBFuncScannerBox.scan_all_boxes/1
This prevents future conflicts when both Loop and If lowering expand.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-27 10:58:56 +09:00
2d379692e3
chore: Update docs/private submodule (Phase 33-5 docs)
2025-11-27 05:42:27 +09:00
4fd013d9c7
Phase 33-5 preparation complete: Documentation updates
...
Submodule update: Phase 33 exit criteria & deletion roadmap documented
## Changes (docs/private)
- PHI_BOX_INVENTORY.md: Phase 33 progress section added
- phase-33-joinir-if-phi-cleanup/README.md: Exit criteria defined
## Key Points
- Deletion estimates: ~600 lines (if_phi, phi_invariants, conservative)
- Prerequisites: 5 conditions documented
- Stage-1/Stage-B application needed before full deletion
- Phase 33-4 complete, ready for Phase 33-5
2025-11-27 05:13:07 +09:00
c604402ea4
Phase 33-4.4 complete: Documentation + developer notes
...
## Documentation updates (docs/private submodule)
- TASKS.md: Phase 33-4.4 marked complete
- if_joinir_design.md: Section 10 added (A/B validation results)
## Developer convenience
- tools/smokes/v2/README.md: Added JoinIR If/Select smoke note
- One-liner for dev-only A/B verification (not CI-required)
Phase 33-4 fully complete. Next: Phase 33-5 preparation.
2025-11-27 05:05:01 +09:00
79cbf26f98
Phase 33-4: Stage-1/Stage-B expansion complete (33-4.1 to 33-4.3)
...
## Code Changes
- Extended function name whitelist in try_lower_if_to_joinir()
- Added: JsonShapeParser._read_value_from_pair/1 (Stage-1)
- Added: Stage1JsonScannerBox.value_start_after_key_pos/2 (Stage-B)
## Validation
- A/B testing: Route A (if_phi) vs Route B (Select) → identical results (RC 0)
- Test cases: joinir_if_select_simple.hako, joinir_if_select_local.hako
- Build: cargo build --release successful
## Documentation (docs/private submodule)
- TASKS.md: Phase 33-4.1 to 33-4.3 marked complete
- if_joinir_design.md: Section 9 added (candidate analysis)
## Next Steps
- Phase 33-4.4: CI/smoke test updates (pending)
2025-11-27 04:58:01 +09:00
bb4e3044a8
test(joinir): fix Phase 33-3.2 test flakiness by unifying env-dependent tests
...
Phase 33-3.2 test stabilization:
- Unified 4 env-dependent tests into 1 (test_if_select_pattern_matching)
- Eliminated race condition from parallel test execution
- All 5 tests now pass consistently (5/5 stable PASS)
Before: 8 tests (flaky 7-8/8 due to env var race)
After: 5 tests (stable 5/5, no flakiness)
Test coverage maintained:
- Simple pattern lowering (env ON)
- Local pattern lowering (env ON)
- Disabled by default (env OFF)
- Wrong function name filter (env ON)
- 4 verify tests (env-independent, kept separate)
Documentation:
- Updated TASKS.md with test flake resolution notes
- Updated docs/private submodule to 81ec67f
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-27 04:27:57 +09:00
4ba3fcd615
Phase 33-3.2: phi_invariants/conservative の JoinIR 側への移譲
...
実装内容:
- verify_select_minimal() 実装(Select 命令の最小 invariant チェック)
- phi_invariants.rs / conservative.rs のエッセンス抽出・移譲
- 4 テスト追加(simple/local with verify, reject multiple selects, check invariants)
移譲した責務:
- phi_invariants.rs::ensure_if_values_exist() → 型一貫性・完全性チェック
- conservative.rs::ConservativeMerge → 単一 PHI チェック
テスト結果:
- ✅ 8/8 tests PASS
- ✅ simple/local パターン: Verifier PASS
- ✅ 不正パターン(複数 Select): Verifier REJECT
- ✅ invariant ログ: conservative.rs / phi_invariants.rs からの移譲を明記
制限事項:
- IfSelectTest.* のみ対象、本線 if_phi は保持
- 削除は Stage-1/Stage-B/selfhost への適用後に行う
Phase 33-3.2 完了(2025-11-27)
2025-11-27 03:55:45 +09:00
10856bbb53
chore: Update docs/private submodule (Phase 33-3.1 docs)
2025-11-27 03:40:27 +09:00
cbb9c0ade9
chore: Update docs/private submodule (Phase 33-0/1/2 docs)
2025-11-27 03:00:32 +09:00
35cd93a37a
Phase 33-2: JoinInst::Select implementation + minimal If JoinIR lowering
...
Implementation:
- Add JoinInst::Select variant to JoinIR schema
- Implement Select execution in JoinIR Runner (Bool/Int cond support)
- Add Select handling in JoinIR→MIR Bridge (4-block structure)
- Create test cases (joinir_if_select_simple/local.hako)
- Add dev toggle NYASH_JOINIR_IF_SELECT=1
- Create lowering infrastructure (if_select.rs, stub for Phase 33-3)
Tests:
- 3/3 unit tests pass (test_select_true/false/int_cond)
- Integration tests pass (RC: 0)
- A/B execution verified (existing if_phi vs JoinIR Select)
Files changed:
- New: apps/tests/joinir_if_select_{simple,local}.hako
- New: src/mir/join_ir/lowering/if_select.rs
- Modified: src/mir/join_ir/{mod,json,runner,vm_bridge}.rs
- Modified: src/config/env.rs (joinir_if_select_enabled)
- Modified: docs/reference/environment-variables.md
Phase 33-3 ready: MIR pattern recognition + auto-lowering pending
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-27 02:58:38 +09:00
0c252406ef
docs(joinir): L-4.3b - Phase 40 role transfer documentation
...
## L-4.3b 完了内容
Phase 32 scope clarification:
- llvmlite harness JoinIR experiment (L-4.3a) ✅ completed
- ny-llvmc JoinIR integration → deferred to Phase 40
## 方針明文化
**Phase 32 では**:
- ny-llvmc 側のコード変更なし
- JoinIR→MIR' 変換は Rust 本体 (llvm.rs) で実施
- ny-llvmc は「post-JoinIR MIR JSON」を受け取るだけ
**Phase 40 (LLVM Native Backend) で**:
- ny-llvmc 本体の最適化・native backend 化と併せて
- JoinIR 経路の統合を行う
## ドキュメント更新
- Phase 32 TASKS.md: L-4.3b 完了マーク + Phase 40 移管明記
- CURRENT_TASK.md: 1-00w セクション追加
関連: Phase 32 L-4.3a (llvmlite 実証完了)
2025-11-26 16:12:48 +09:00
b8893787dc
feat(joinir): L-5.3 Phase 1 - progress carrier guard for generic_case_a
...
## 実装内容
1. has_safe_progress() helper 追加 (loop_to_join.rs:186-195)
- Phase 1: scope.progress_carrier.is_some() をチェック (保守的)
- Phase 2 (future): MirQuery で Add 命令チェック予定
2. is_supported_case_a_loop_view() に progress guard 追加 (256-266)
- 無限ループの可能性があるループを事前にフォールバック
- デバッグログで reject 理由を出力
## テスト結果
✅ 25 passed; 0 failed - JoinIR 関連テスト全通過
✅ skip_ws / trim / append_defs / Stage‑1 UsingResolver 全ケース PASS
✅ 既存テストへの影響なし
## 技術メモ
- 保守的アプローチ: progress_carrier.is_some() のみチェック
- LoopScopeShape で progress_carrier を carriers の先頭として設定済み
- ignored テスト失敗は MIR 自体の PHI バグで、本変更とは無関係 (git stash で確認済み)
関連: Phase 29 L-5.3 (TASKS.md), CURRENT_TASK.md 1-00v
2025-11-26 16:08:49 +09:00
bde83f311e
docs(joinir): L-2.3 PHI問題のA/B実行実証
...
- CURRENT_TASK.md に L-2.3 進捗を追記
- docs/private サブモジュールに Phase 32 を追加
Route A vs Route B 比較結果:
- Route A (VM直接): Main.skip(" abc") → 0 (PHI バグ)
- Route B (JoinIR): Main.skip(" abc") → 3 (正解)
JoinIR が PHI 問題を設計的に解決していることを実行レベルで実証。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-26 12:28:32 +09:00
eddc4e6035
docs(joinir): L-2.2 Step-4 - Update JoinIR VM bridge documentation
...
Phase 32 README:
- Expand VM Bridge table with "JoinIR 利用範囲" column
- Add L-2.2 progress summary table (Step-1~5 status)
- Add developer notes for Stage-B JoinIR observation
environment-variables.md:
- Add detailed descriptions for NYASH_JOINIR_* variables
- Clarify scope and limitations (Stage-B = lowering only)
- Add Stage-B JoinIR observation example
CURRENT_TASK:
- Update L-2.2 status to Step-1~4 complete
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-26 11:55:04 +09:00
51ff558904
feat(phase32): L-2.1 Stage-1 UsingResolver JoinIR integration + cleanup
...
Phase 32 L-2.1 complete implementation:
1. Stage-1 UsingResolver main line JoinIR connection
- CFG-based LoopForm construction for resolve_for_source/5
- LoopToJoinLowerer integration with handwritten fallback
- JSON snapshot tests 6/6 PASS
2. JoinIR/VM Bridge improvements
- Simplified join_ir_vm_bridge.rs dispatch logic
- Enhanced json.rs serialization
- PHI core boxes cleanup (local_scope_inspector, loop_exit_liveness, loop_var_classifier)
3. Stage-1 CLI enhancements
- Extended args.rs, groups.rs, mod.rs for new options
- Improved stage1_bridge module (args, env, mod)
- Updated stage1_cli.hako
4. MIR builder cleanup
- Simplified if_form.rs control flow
- Removed dead code from loop_builder.rs
- Enhanced phi_merge.rs
5. Runner module updates
- json_v0_bridge/lowering.rs improvements
- dispatch.rs, selfhost.rs, modes/vm.rs cleanup
6. Documentation updates
- CURRENT_TASK.md, AGENTS.md
- Various docs/ updates
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-26 10:17:37 +09:00
7a29ebd268
refactor(phase31): Connect 4 lowerers to LoopToJoinLowerer
...
Phase 31 Step 2 complete:
- skip_ws.rs: use LoopToJoinLowerer::lower_minimal_skip_ws_case_a()
- funcscanner_trim.rs: use LoopToJoinLowerer::lower_minimal_trim_case_a()
- funcscanner_append_defs.rs: use LoopToJoinLowerer::lower_minimal_append_defs_case_a()
- stage1_using_resolver.rs: use LoopToJoinLowerer::lower_minimal_stage1_case_a()
Eliminates direct generic_case_a calls, routing through unified box.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-26 02:36:43 +09:00
ef9fd4417a
feat(phase31): Add LoopToJoinLowerer unified box
...
Phase 31 Step 1 complete:
- Create src/mir/join_ir/lowering/loop_to_join.rs
- Add LoopToJoinLowerer struct with lower() method
- Implement lower_minimal_skip_ws_case_a() via generic_case_a
- Support for trim, append_defs, stage1 patterns
- Re-export from mod.rs
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-26 01:18:32 +09:00
2b47f47061
refactor(phi_core): F-2.1 - 早期グループPHI箱削除(約2,500行削減)
...
## 削除したファイル
- header_phi_builder.rs (~628行) - バイパス関数を loopform_builder.rs に移動
- exit_phi_builder.rs (~1000行) - バイパス関数を loopform_builder.rs に移動
- body_local_phi_builder.rs (~550行) - 依存なし
- loop_phi.rs (~288行) - LoopPhiOps実装も削除
## 移動した関数
loopform_builder.rs に以下を移動:
- get_loop_bypass_flags() / LoopBypassFlags struct
- is_joinir_header_bypass_target()
- joinir_exit_bypass_enabled()
- is_joinir_exit_bypass_target()
## 修正したファイル
- loop_builder.rs: バイパス関数の参照先変更 + LoopPhiOps impl削除
- mod.rs: モジュール宣言削除
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-25 23:42:35 +09:00
a898ff3f83
refactor(joinir): Phase 30 F-2.0/F-3 - PHI箱インベントリと旧APIレガシー削除
...
F-3 レガシー削除:
- generic_case_a.rs: 旧API関数4個削除(_with_scope 移行完了)
- loop_scope_shape.rs: CaseAContext::new() 削除(from_scope() に統一)
- mod.rs: 不要な pub use 削除
- #[allow(dead_code)] 除去(5関数)
- 未使用import削除(コード削減約150行)
F-2.0 PHI箱インベントリ:
- PHI_BOX_INVENTORY.md 作成: 13箱+11補助構造体の棚卸し
- 削除順ポリシー: 早期/中期/最終の3段階
- TASKS.md/CURRENT_TASK.md 更新
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-25 23:25:39 +09:00
f41564723d
docs: Phase 30 F-1/F-3/F-4.4 preparation survey
...
Task A/B/C results:
- Task A: Lowerer files Case A analysis (6 files surveyed)
- Found: all lowerers use empty LoopVarClassBox/LoopExitLivenessBox
- stageb_body/stageb_funcscanner have placeholders only
- Task B: Add VM runner shrinkage plan to TASKS.md F-4.4
- Task C: Add bridge summary to CURRENT_TASK.md
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-25 15:30:54 +09:00
de16ff9b7f
feat(joinir): Phase 30.x jsonir v0 snapshot tests
...
Implement JSON snapshot testing for JoinIR regression detection.
Implementation:
- tests/fixtures/joinir/v0_*.jsonir: 6 snapshot fixtures for minimal JoinIR cases
- src/tests/joinir_json_min.rs: Added 6 snapshot comparison tests
Fixtures:
- v0_skip_ws_min.jsonir (1338 bytes)
- v0_funcscanner_trim_min.jsonir (4484 bytes)
- v0_funcscanner_append_defs_min.jsonir (988 bytes)
- v0_stage1_usingresolver_min.jsonir (987 bytes)
- v0_stageb_body_min.jsonir (1074 bytes)
- v0_stageb_funcscanner_min.jsonir (962 bytes)
Usage:
# Run snapshot tests
NYASH_JOINIR_SNAPSHOT_TEST=1 cargo test --release joinir_json_v0_
# Regenerate fixtures (after intentional changes)
NYASH_JOINIR_SNAPSHOT_TEST=1 NYASH_JOINIR_SNAPSHOT_GENERATE=1 cargo test --release joinir_json_v0_
Purpose:
- Fix current JoinIR shape as v0 baseline (pre-generic state)
- Detect unintended regressions during genericization
- Allow intentional fixture updates when design changes
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-25 10:19:02 +09:00
e9c7d27a7f
feat(joinir): Phase 30.x jsonir v0 - JoinIR JSON serialization
...
Implement JSON serialization for JoinIR module.
Implementation:
- src/mir/join_ir/json.rs: JSON serializer (~250 lines, no external deps)
- src/tests/joinir_json_min.rs: Integration tests (8 unit + 2 integration)
- 10 tests total, all passing
Features:
- JoinModule → JSON serialization
- All instruction types: Call, Jump, Ret, Compute
- All MirLikeInst types: Const, BinOp, Compare, BoxCall
- Full ConstValue support: Integer, Bool, String, Null
- Full operator coverage: Add/Sub/Mul/Div/Or/And, Lt/Le/Gt/Ge/Eq/Ne
- JSON string escaping for special characters
Usage:
use crate::mir::join_ir::json::join_module_to_json_string;
let json = join_module_to_json_string(&module);
Non-goals (this phase):
- CLI flag (--emit-joinir-json)
- JSON → JoinIR reverse conversion
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-25 09:53:26 +09:00
03efa13e76
docs(phase-29): JoinIR/Stage-1 環境変数棚卸し完了
...
Step 1: ENV_INVENTORY.md 作成 (docs/private submodule)
Step 2: 実装統一確認 - 既にhelper経由で統一済み
Step 3: environment-variables.md に JoinIRセクション追加
Step 4: スモークテスト pass
Step 5: CURRENT_TASK.md に完了記録
発見事項:
- JoinIR: env_flag_is_1() ヘルパー経由で統一済み
- Stage-1: src/config/env/stage1.rs SSOT モジュール経由で統一済み
- NYASH_RUN_JOINIR_MINIMAL は既に削除済み
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-25 09:03:28 +09:00
59f00db385
chore: update docs/private submodule
...
Updates Phase 28.2/29 documentation with Ny compiler path investigation results.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-25 07:08:56 +09:00
94b2bd2799
feat(selfhost): add observation logs for Ny compiler path diagnosis
...
Add NYASH_CLI_VERBOSE>=2 observation logs to trace the Ny compiler
child process path (NYASH_USE_NY_COMPILER=1):
- Log when spawning child process
- Log when receiving Program(JSON v0)
- Log before/after maybe_dump_mir with dump path info
- Report whether MIR dump file was created
Key finding: apps/selfhost/compiler/compiler.hako doesn't exist,
so the preferred child process route never fires. This explains
why RUST_MIR_DUMP_PATH doesn't create files in Ny compiler path.
Also update environment-variables.md with:
- NYASH_CLI_VERBOSE=2 level documentation
- Ny compiler observation template for Phase 29
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-25 07:08:32 +09:00
466e636af6
Span trace utilities and runner source hint
2025-11-24 14:17:02 +09:00
3154903121
docs: S-5.4 GC統合&A/Bテスト完了 (submodule update)
...
✅ Phase 27-shortterm S-5 全タスク完了
- GC統合: Arc<dyn NyashBox> 参照カウント管理
- standalone テスト完全成功 (skip_ws/trim PASS)
- VM統合実証済み (execute_box_call経由)
Submodule commits: ba0cc24, 02e57a1
2025-11-24 11:47:25 +09:00
98dadf446f
feat(joinir): S-5.2-improved - VM完全意味論統合完了
...
Phase 27-shortterm S-5.2-improved 実装完了:
## 実装内容
1. **execute_box_call() ラッパー追加**:
- src/backend/mir_interpreter/mod.rs に公開 API 実装
- 1_000_000 番台レジスタで一時値管理
- 適切なクリーンアップ処理実装
2. **handle_box_call 可視性変更**:
- src/backend/mir_interpreter/handlers/boxes.rs を pub に変更
- JoinIR Runner からアクセス可能に
3. **JoinIR Runner BoxCall 統合**:
- src/mir/join_ir_runner.rs の BoxCall 処理を書き換え
- StringBox 直接呼び出し削除
- VM の execute_box_call 経由に変更
- JoinValue ↔ VMValue 変換で統合
4. **不要な関数削除**:
- expect_str(), expect_int(), box_to_join_value() 削除
- VMValue 変換に一本化
5. **テスト更新**:
- joinir_runner_standalone.rs: VM インスタンス追加
- joinir_runner_min.rs: VM 再利用
## 期待される効果
✅ Void guards 完全対応 (Void.length() → 0)
✅ PluginBox/InstanceBox 将来対応可能
✅ VM の完全な BoxCall 意味論統一
✅ VM 2号機回避(ガードレール設計成功)
## テスト結果
✅ joinir_runner_standalone_skip_ws ... ok
✅ joinir_runner_standalone_trim ... ok
✅ ビルド成功(0エラー)
## 完了タスク
- [x] MirInterpreter::execute_box_call() 実装
- [x] 1_000_000 レジスタ帯域割り当て
- [x] regs クリーンアップ実装
- [x] JoinIR Runner BoxCall 書き換え
- [x] テスト更新&PASS確認
🎉 VM 完全意味論統合完了!
2025-11-24 08:37:59 +09:00
790c8381fb
chore: Update docs/private submodule (S-4 完了記録)
2025-11-24 07:24:59 +09:00
b7c7e48526
feat(joinir): Phase 27.14 - FuncScannerBox._append_defs JoinIR lowering完了 + コード品質改善
...
## Phase 27.14: FuncScannerBox._append_defs/2 JoinIR lowering
- **新規実装**: `funcscanner_append_defs.rs` (322行)
- Shared Builder Pattern採用
- MIR-based lowering with CFG sanity checks
- ValueId range 9000-10999 割り当て
- **テスト**: `mir_joinir_funcscanner_append_defs.rs` (3テスト)
- type_sanity, empty_module_returns_none, auto_lowering (ignored)
- **最小.hako**: `funcscanner_append_defs_minimal.hako`
## コード品質改善 (5項目完了)
1. **CFG Sanity Checks強化** (`common.rs`)
- `has_array_method()`: ArrayBox操作検出
- `has_loop_increment()`: i+1パターン検出
2. **ValueIdテスト自動化** (`value_id_ranges.rs`)
- マクロ化 + 自動overlap検証で30→15行に削減
3. **モジュール名統一確認** (作業不要、既に統一済み)
4. **Shared Builder命名統一** (`funcscanner_trim.rs`)
- `build_trim_joinir` → `build_funcscanner_trim_joinir`
5. **全テストPASS確認**
- value_id_ranges, funcscanner_trim, funcscanner_append_defs全てPASS ✅
## 効果
- CFG検証関数: 1個 → 3個 (200%↑)
- テストコード: 50%削減 (保守性向上)
- 命名一貫性: 75% → 100%
- ビルド成功率: 100%維持
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-24 05:23:26 +09:00
d460fac40c
docs(joinir): Phase 27.11 完了記録 (submodule update)
2025-11-23 23:19:12 +09:00
6ee4ee780a
docs(joinir): Phase 27.10 完了 - ドキュメント更新
...
- IMPLEMENTATION_LOG.md: Phase 27.10 + 27.10.1 完了記録
- joinir_coverage.md: 責務範囲(D-2)セクション追加
🎉 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-23 22:51:45 +09:00
c1aa3c8c2b
feat(joinir): Phase 27.8-4/5 — skip_ws CFG sanity checks + fallback design
...
- MirQuery API を使用した軽量 CFG チェック実装
- Entry block successors >= 1
- Const(0) 存在確認
- String.length() 存在確認
- 予期しない MIR 構造時の手書き版 fallback 設計
- A/B テスト完了: 手書き版・MIR-based 版両方 PASS ✅
- ドキュメント更新: joinir_coverage.md + IMPLEMENTATION_LOG.md
Phase 27.9 modular refactoring: commit 3d5979c7
Phase 27.8-4/5 verification: CFG checks + docs updates
2025-11-23 18:03:33 +09:00
3d5979c78e
refactor(joinir): Phase 27.9 - Modular separation of join_ir.rs into directory structure
...
Phase 27.9 で join_ir.rs (~1,336行) を以下のモジュール構造に分離:
## 新規ディレクトリ構造:
```
src/mir/join_ir/
├── mod.rs # 型定義・共通ユーティリティ (~330行)
└── lowering/
├── mod.rs # lowering インターフェース
├── min_loop.rs # lower_min_loop_to_joinir (~140行)
├── skip_ws.rs # skip_ws lowering 3関数 (~390行)
└── funcscanner_trim.rs # trim lowering (~480行)
```
## 技術的変更:
- **型定義統一**: JoinFuncId, JoinInst, JoinModule 等を mod.rs に集約
- **lowering 分離**: 3つの lowering 関数を個別モジュールに移動
- **後方互換性**: pub use で lowering 関数を re-export(既存コード影響なし)
- **削除**: src/mir/join_ir.rs (旧単一ファイル)
## テスト結果:
- **385 passed** (+1 from 384)
- **9 failed** (-1 from 10)
- **ビルド成功**: 0 errors, 18 warnings (変化なし)
## 効果:
- **保守性向上**: 1,336行 → 4ファイル(各300-500行)で可読性向上
- **モジュール境界明確化**: 型定義 vs lowering 実装の責務分離
- **将来の拡張容易**: 新 lowering 関数追加が簡単に
Phase 27.8 で実装した MIR 自動解析 lowering の基盤整備完了。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-23 16:49:49 +09:00
64b71f5b12
chore: update docs/private submodule (Phase 27.6-3 documentation)
2025-11-23 11:36:49 +09:00
308b57ff89
chore: update docs/private submodule for Phase 27.6-2
2025-11-23 11:27:16 +09:00
4fd74f2a6e
feat(phi): Phase 27.5 - JoinIR Exit φ 統合(LoopExitShape 雛形)
...
LoopExitShape 構造体を追加し、Exit φ の意味を JoinIR 側に固定:
- LoopExitShape 追加 (src/mir/join_ir.rs:84-111)
- exit_args: Vec<ValueId> で Exit φ の意味を表現
- minimal (exit_args=[i]), trim (exit_args=[e], Option A)
- #[allow(dead_code)] で Phase 27.6 まで設計専用
- Exit φ コメント追加
- lower_skip_ws_to_joinir: 2箇所の exit パスに意味明記
- lower_funcscanner_trim_to_joinir: Option A として意味明記
- テストコメント更新
- mir_joinir_skip_ws.rs: Exit φ (i の合流) 検証を明記
- mir_joinir_funcscanner_trim.rs: Exit φ (e の合流+substring) を明記
- ドキュメント更新
- IMPLEMENTATION_LOG.md: Phase 27.5 セクション追加
- TASKS.md: Phase 27.5 完了マーク
ExitPhiBuilder は Phase 27.6 まで保留。本線影響ゼロ。
2025-11-23 11:03:38 +09:00
0d3d6cc455
chore: update docs/private submodule for Phase 27.4-C
...
Phase 27.4-C のドキュメント更新を反映(commit 7025d50)
2025-11-23 10:10:02 +09:00
c652d01b8f
chore(submodule): Update docs/private - Phase 27.3 documentation
...
Submodule commit e9664a4: Phase 27.3-joinir-phi フェーズ開始
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-23 09:12:53 +09:00
0852a397d9
Add experimental JoinIR runner and tests
2025-11-23 08:38:15 +09:00
e283e4681b
chore(submodule): Update docs/private to include Phase 27.1 documentation
...
Submodule commit 448b52d: Phase 27.1-joinir 実装計画・ログ追加
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-23 06:30:02 +09:00