Phase 123 proper完了:hako_check JoinIR実装(環境変数選択可能化)
## 実装内容 ### 1. 環境変数フラグ追加 - NYASH_HAKO_CHECK_JOINIR でJoinIR/Legacy経路を切り替え可能 - src/config/env/hako_check.rs で hako_check_joinir_enabled() 実装 - デフォルト: false(レガシー経路)で後方互換性確保 ### 2. MIR Builder JoinIR スイッチ - cf_if() メソッドにフラグチェック追加 - try_cf_if_joinir() プレースホルダー実装(Phase 124で完全実装) - JoinIR → legacy フォールバック機構を構築 ### 3. テストケース作成(4個) - phase123_simple_if.hako - phase123_nested_if.hako - phase123_while_loop.hako - phase123_if_in_loop.hako ### 4. テスト結果 ✅ Legacy path: 4/4 PASS ✅ JoinIR path: 4/4 PASS (JoinIR path は現在フォールバック経由で動作) ### 5. ドキュメント更新 - environment-variables.md: NYASH_HAKO_CHECK_JOINIR 記載 - phase121_hako_check_joinir_design.md: Phase 123実装セクション追加 - hako_check_design.md: 2パス実行フロー図を追加 - CURRENT_TASK.md: Phase 123完了を記録 ## 数値成果 - 新規ファイル: 2個 (config/env/hako_check.rs, test cases × 4, test script) - 修正ファイル: 6個 - 総追加行数: 335行 - ビルド: Zero errors ## 設計・実装の特徴 ✅ Environment variable で簡単に経路切り替え可能 ✅ レガシー経路を完全に保持(後方互換性) ✅ JoinIR基盤を Phase 124 での完全実装に向けて構築 ✅ フォールバック機構でリスク最小化 ## 次のステップ Phase 124: JoinIR 完全実装&デフォルト化 - try_cf_if_joinir() を IfSelectLowerer と統合 - Loop JoinIR 統合追加 - JoinIR をデフォルト経路に変更 - NYASH_LEGACY_PHI=1 で legacy フォールバック可能に 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -246,3 +246,119 @@ Phase 121 は設計と調査のみ。実装は Phase 122+ で段階的に実施
|
||||
- JoinIR 統合は VM の MirBuilder に実装する必要がある
|
||||
- Loop は部分統合済み(Phase 49)、If は未統合
|
||||
- 段階的移行戦略により互換性を維持しながら統合可能
|
||||
|
||||
---
|
||||
|
||||
## Phase 123: 実行フロー図(2パス実装完了)
|
||||
|
||||
### Legacy パス (NYASH_HAKO_CHECK_JOINIR=0 or unset)
|
||||
|
||||
```
|
||||
.hako file
|
||||
↓
|
||||
Tokenize / Parse (Rust Parser)
|
||||
↓
|
||||
AST Generation
|
||||
↓
|
||||
MIR Builder (legacy if/loop lowering)
|
||||
├─ cf_if() → lower_if_form() (legacy PHI generation)
|
||||
└─ cf_loop() → LoopBuilder (legacy PHI generation)
|
||||
↓
|
||||
MIR Generation (with legacy PHI)
|
||||
↓
|
||||
VM Interpreter
|
||||
↓
|
||||
Execution Result
|
||||
```
|
||||
|
||||
### JoinIR パス (NYASH_HAKO_CHECK_JOINIR=1)
|
||||
|
||||
```
|
||||
.hako file
|
||||
↓
|
||||
Tokenize / Parse (Rust Parser)
|
||||
↓
|
||||
AST Generation
|
||||
↓
|
||||
MIR Builder (with JoinIR switch check)
|
||||
├─ cf_if() → [Phase 123] Check hako_check_joinir_enabled()
|
||||
│ ├─ true: try_cf_if_joinir() → [Placeholder] fallback to legacy
|
||||
│ └─ false: lower_if_form() (legacy)
|
||||
└─ cf_loop() → [Phase 124 予定] JoinIR Loop Lowering
|
||||
↓
|
||||
MIR Generation
|
||||
↓
|
||||
[Phase 124 予定] JoinIR Lowerer (if/loop → PHI)
|
||||
├─ IfSelectLowerer: Simple if/else → Select instruction
|
||||
└─ LoopLowerer: Loop → PHI + LoopForm
|
||||
↓
|
||||
MIR (with JoinIR-generated PHI)
|
||||
↓
|
||||
VM Interpreter
|
||||
↓
|
||||
Execution Result
|
||||
```
|
||||
|
||||
### Phase 123 実装状態
|
||||
|
||||
**✅ 実装完了**:
|
||||
- 環境変数 `NYASH_HAKO_CHECK_JOINIR` 読み取り
|
||||
- `cf_if()` での分岐処理
|
||||
- フォールバック機構(プレースホルダー → レガシー)
|
||||
|
||||
**📋 未実装(Phase 124 予定)**:
|
||||
- `try_cf_if_joinir()` の実際の JoinIR 統合処理
|
||||
- JoinIR Lowerer の適用
|
||||
- Loop の JoinIR 統合
|
||||
|
||||
### 実行時の動作確認
|
||||
|
||||
```bash
|
||||
# Legacy Path (デフォルト)
|
||||
$ ./target/release/hakorune --backend vm test.hako
|
||||
[MirBuilder] cf_if() → lower_if_form() (legacy)
|
||||
RC: 0
|
||||
|
||||
# JoinIR Path (Phase 123 実装)
|
||||
$ NYASH_HAKO_CHECK_JOINIR=1 ./target/release/hakorune --backend vm test.hako
|
||||
[MirBuilder] cf_if() → try_cf_if_joinir() → fallback to lower_if_form()
|
||||
RC: 0
|
||||
|
||||
# JoinIR Debug Output (Phase 123)
|
||||
$ NYASH_HAKO_CHECK_JOINIR=1 NYASH_HAKO_CHECK_JOINIR_DEBUG=1 ./target/release/hakorune test.hako
|
||||
[cf_if/joinir] Routing if statement through JoinIR lowering
|
||||
[cf_if/joinir] JoinIR not applicable, falling back to legacy
|
||||
```
|
||||
|
||||
### 設計ノート
|
||||
|
||||
**Phase 123 の焦点**:
|
||||
- 環境変数による経路選択機能の実装
|
||||
- プレースホルダー実装によるフレームワーク確立
|
||||
- テスト基盤の構築
|
||||
|
||||
**Phase 124 での完全実装**:
|
||||
- JoinIR Lowerer の統合
|
||||
- MIR 後処理としての JoinIR 変換
|
||||
- レガシー経路からの完全移行
|
||||
|
||||
---
|
||||
|
||||
## Phase 123 実装完了記録 (2025-12-04)
|
||||
|
||||
### 変更ファイル一覧
|
||||
|
||||
1. `src/config/env/hako_check.rs` (新規) - 環境変数フラグ実装
|
||||
2. `src/config/env.rs` - hako_check モジュール追加
|
||||
3. `src/mir/builder/control_flow.rs` - JoinIR スイッチ実装
|
||||
4. `docs/reference/environment-variables.md` - ドキュメント更新
|
||||
5. `local_tests/phase123_*.hako` (4件) - テストケース作成
|
||||
6. `tools/smokes/v2/profiles/integration/hako_check_joinir.sh` - テストスクリプト
|
||||
|
||||
### テスト結果
|
||||
|
||||
**Legacy Path**: 4/4 PASS (100%)
|
||||
**JoinIR Path**: 4/4 PASS (100%)
|
||||
|
||||
**Note**: JoinIR 経路はプレースホルダー実装のため、実際にはレガシー経路で処理。
|
||||
環境変数読み取りとフラグ分岐は完全に動作しており、Phase 124 で JoinIR 実装を追加すれば即座に動作可能。
|
||||
|
||||
Reference in New Issue
Block a user