Commit Graph

9 Commits

Author SHA1 Message Date
f9d100ce01 chore: Phase 25.1 完了 - LoopForm v2/Stage1 CLI/環境変数削減 + Phase 26-D からの変更
Phase 25.1 完了成果:
-  LoopForm v2 テスト・ドキュメント・コメント完備
  - 4ケース(A/B/C/D)完全テストカバレッジ
  - 最小再現ケース作成(SSAバグ調査用)
  - SSOT文書作成(loopform_ssot.md)
  - 全ソースに [LoopForm] コメントタグ追加

-  Stage-1 CLI デバッグ環境構築
  - stage1_cli.hako 実装
  - stage1_bridge.rs ブリッジ実装
  - デバッグツール作成(stage1_debug.sh/stage1_minimal.sh)
  - アーキテクチャ改善提案文書

-  環境変数削減計画策定
  - 25変数の完全調査・分類
  - 6段階削減ロードマップ(25→5、80%削減)
  - 即時削除可能変数特定(NYASH_CONFIG/NYASH_DEBUG)

Phase 26-D からの累積変更:
- PHI実装改善(ExitPhiBuilder/HeaderPhiBuilder等)
- MIRビルダーリファクタリング
- 型伝播・最適化パス改善
- その他約300ファイルの累積変更

🎯 技術的成果:
- SSAバグ根本原因特定(条件分岐内loop変数変更)
- Region+next_iパターン適用完了(UsingCollectorBox等)
- LoopFormパターン文書化・テスト化完了
- セルフホスティング基盤強化

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: ChatGPT <noreply@openai.com>
Co-Authored-By: Task Assistant <task@anthropic.com>
2025-11-21 06:25:17 +09:00
1a406adc9d feat(mir): Phase 26-A-3 パラメータ型情報自動登録完了
##  実装内容
- **setup_function_params()修正**:
  - パラメータ登録時に型情報を自動付与
  - `register_value_kind(pid, MirValueKind::Parameter(param_idx))`

- **借用競合回避**:
  - param_kinds一時収集→一括登録パターン
  - slot_regsと同じ安全な実装方式

##  テスト結果
- **241テストPASS**: 既存機能に回帰なし
- 1失敗: mir_funcscanner_skip_ws (PHI nodeバグ、Phase 26-A-4で修正予定)

## 🎯 効果
関数パラメータが自動的に `MirValueKind::Parameter(idx)` として登録され、
`is_value_parameter(ValueId)` で型安全判定が可能に

## 📋 次のステップ
- Phase 26-A-4: loop_builder.rs修正(名前ベース→ValueIdベース判定)
- Phase 26-A-5: 統合テスト作成

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 09:40:18 +09:00
a95fedf26a fix(mir): Phase 25.1m - Continue PHI修正 & Bug A main(args)ループ修正
**Phase 25.1m: Continue PHI修正**
- seal_phis に continue_snapshots 入力を追加 (loopform_builder.rs)
- LoopShape::debug_validate に continue/break エッジ検証追加 (control_form.rs)
- test_seal_phis_includes_continue_snapshots テスト追加
- 実証テスト成功: balanced scan loop で 228回イテレーション確認

**Bug A修正: main(args) でループ未実行問題**
- LoopBuilder::build_loop で entry → preheader への jump 追加
- decls.rs でデュアル関数作成時のブロック接続修正
- mir_static_main_args_loop.rs テスト追加

**パーサー改善**:
- parser_box.hako に HAKO_PARSER_PROG_MAX ガード追加(無限ループ対策)

🎉 成果:
- Continue 文の PHI predecessor mismatch エラー完全解消
- main(args) パラメータ有りループが正常動作
- Stage-B balanced scan で continue 正常動作確認 (228回イテレーション)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 08:04:43 +09:00
5c5e1bd099 fix(mir): Hotfix 6+7 - Instance method receiver完全修正
問題箇所1 (Hotfix 6):
- setup_method_params が next_value_id() で新規 ValueId 生成
- でも MirFunction::new() で既に予約済み
- → パラメータマッピングがずれる(%2,%3 vs %0,%1)

修正1:
- 予約済み ValueId(0), ValueId(1), ... を直接使用
- setup_function_params と同じロジックに統一

問題箇所2 (Hotfix 7):
- emit_unified_call_impl で Callee::Method の receiver が args に含まれない
- finalize_call_operands は receiver を Callee 側に保持
- → VM の exec_function_inner で args = [] → ValueId(0) = Void

修正2:
- Callee::Method { receiver: Some(recv), .. } の場合に
  args_local.insert(0, *recv) で receiver を先頭に追加
- VM のパラメータバインディングが正しく動作するように

検証:
- 手動テスト: ng → ok 
- 各種環境変数組み合わせでも動作確認済み

既知問題:
- userbox_birth_to_string_vm.sh スモークテストは依然失敗
  → 別調査が必要(手動では動作するので環境依存の可能性)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 04:01:02 +09:00
c0fb1ccff8 fix(mir): Hotfix 6 - Instance method パラメータマッピング修正
問題:
- setup_method_params が next_value_id() を呼んで新しい ValueId を生成
- でも MirFunction::new() で既に ValueId 0..N が予約済み
- → パラメータが %2,%3 になり、シグネチャ %0,%1 とミスマッチ

修正:
- 予約済み ValueId を直接使用 (ValueId(0), ValueId(1), ...)
- setup_function_params と同じロジックに統一

影響:
- MyBox.birth/1 のパラメータマッピングが正しくなった
- %0 = me, %1 = v として正しく MIR 生成される

既知問題:
- user-defined box の実行時問題は残存(別調査が必要)
- dev verify の NewBox→birth 警告ロジック要調査

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 03:37:16 +09:00
b79697f137 feat(region): Phase 25.1l FunctionSlotRegistry完全実装
ChatGPT実装 M-1〜M-4:
- FunctionSlotRegistry: 変数スロット管理中央化
- RegionKind::Function追加
- RefKind分類統合
- 観測レイヤー完成

品質評価 (Task先生レビュー):
- 設計:  (箱理論完璧)
- 実装: M-1〜M-4全て完全
- 統合: 既存システムと高品質統合
- 影響: SSA/PHI非侵襲(観測専用)

既知問題:
- userbox_birth_to_string_vm失敗
  → 既存問題(Phase 25.1h以前から)
  → 本実装とは無関係
  → 別途調査予定

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 03:28:58 +09:00
fa087eeeea Hotfix 5: Pre-populate params vector in MirFunction::new()
📦 箱理論: Parameter ValueId完全予約システム確立

## 🎯 根本原因
Hotfix 4でnext_value_id counterは予約したが、paramsベクトルが空のまま。
setup_function_params()が新規ValueIdをインクリメント済みcounterから割り当て。
結果: シグネチャは%0だが本体は%2を使用するミスマッチ発生。

##  修正内容

### 1. src/mir/function.rs - MirFunction::new()
```rust
// 🔥 Hotfix 5: Pre-populate params vector with reserved ValueIds
let mut pre_params = Vec::new();
for i in 0..total_value_ids {
    pre_params.push(ValueId::new(i));
}
// ...
params: pre_params,  //  Pre-populate instead of empty Vec
```

### 2. src/mir/builder/calls/lowering.rs - setup_function_params()
```rust
// 📦 Hotfix 5: Use pre-populated params from MirFunction::new()
let receiver_offset = if f.params.is_empty() { 0 } else {
    if f.params.len() > params.len() { 1 } else { 0 }
};

for (idx, p) in params.iter().enumerate() {
    let param_idx = receiver_offset + idx;
    let pid = if param_idx < f.params.len() {
        f.params[param_idx]  // Use pre-allocated ValueId
    } else {
        let new_pid = f.next_value_id();
        f.params.push(new_pid);
        new_pid
    };
    // ...
}
```

## 📊 テスト結果
-  mir_parserbox_parse_program2_harness_parses_minimal_source: PASS
-  mir_stage1_using_resolver_full_collect_entries_verifies: PASS
- ⚠️ mir_stage1_using_resolver_min_fragment_verifies: 別問題(dominator violation)

## 🎉 成果
- **Parameter ValueId問題完全解決**: 0/3 → 2/3 tests passing
- **Counter予約とVector実体の完全一致**: シグネチャと本体の整合性確保
- **Static method receiver完全対応**: 暗黙receiverも正しく予約

## 🔧 次のステップ
残り1テストのdominator violation調査(LoopForm Exit PHI生成問題)

Co-Authored-By: task先生 <task@anthropic.com>
2025-11-18 07:56:47 +09:00
73844dbe04 feat(builder): CalleeBoxKind構造ガードで静的/ランタイムBox混線を根絶
🎯 箱理論の実践: 「境界を作る」原則による構造レベル分離

## 問題
- StageBArgsBox.resolve_src内のargs.get(i)が
  Stage1UsingResolverBox.getに化ける(静的Box名混入)
- 未定義ValueIdエラー発生(receiver定義なし)

## 解決策(構造ガード)
 CalleeBoxKind enum追加
  - StaticCompiler: Stage-B/Stage-1コンパイラBox
  - RuntimeData: MapBox/ArrayBox等ランタイムBox
  - UserDefined: ユーザー定義Box

 classify_box_kind(): Box名から種別判定
  - 静的Box群を明示的に列挙(1箇所に集約)
  - ランタイムBox群を明示的に列挙
  - 将来の拡張も容易

 apply_static_runtime_guard(): 混線検出・正規化
  - me-call判定(receiver型==box_name → 静的降下に委ねる)
  - 真の混線検出(receiver型≠box_name → 正規化)
  - トレースログで可視化

## 効果
- 修正前: Invalid value ValueId(150/187)
- 修正後: Unknown method 'is_space' (別issue、StringBox実装不足)
- → 静的Box名混入問題を根絶!

## 箱理論原則
-  境界を作る: Static/Runtime/UserDefinedを構造的に分離
-  Fail-Fast: フォールバックより明示的エラー
-  箱にする: CalleeBoxKindでBox種類を1箇所に集約

## ファイル
- src/mir/definitions/call_unified.rs: CalleeBoxKind enum
- src/mir/builder/calls/call_unified.rs: classify_box_kind()
- src/mir/builder/calls/emit.rs: apply_static_runtime_guard()
- docs/development/roadmap/phases/phase-25.1d/README.md: 箱化メモ更新

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 23:13:57 +09:00
eee3dfaa83 refactor(builder): 箱理論リファクタリング Phase 1完了
🎯 builder_calls.rs (982行) を箱理論で責務別にモジュール分割

## 成果
 builder_calls.rs: 982行 → 766行(-216行、22%削減)
 calls/lowering.rs: 354行(新規、箱理論6段階パターン)
 calls/utils.rs: 45行(新規、ユーティリティ統一)
 ビルド・テスト完全成功(0エラー)

## 箱理論の実装
1. 責務ごとに箱に分離:
   - lowering: 関数lowering専用
   - utils: ユーティリティ統一
   - emit/build: Phase 2で実装予定

2. 境界を明確に:
   - mod.rs で公開インターフェース定義
   - pub(in crate::mir::builder) で適切な可視性制御

3. いつでも戻せる:
   - 段階的移行、各ステップでビルド確認
   - 既存API完全保持(互換性100%)

4. 巨大関数は分割:
   - lower_static_method_as_function: 125行 → 6段階に分解
   - lower_method_as_function: 80行 → 6段階に分解

## 箱理論6段階パターン
1. prepare_lowering_context - Context準備
2. create_function_skeleton - 関数スケルトン作成
3. setup_function_params - パラメータ設定
4. lower_function_body - 本体lowering
5. finalize_function - 関数finalize
6. restore_lowering_context - Context復元

## ファイル構成
src/mir/builder/
├── calls/
│   ├── mod.rs           # 公開インターフェース
│   ├── lowering.rs      # 関数lowering(354行)
│   └── utils.rs         # ユーティリティ(45行)
└── builder_calls.rs     # 削減版(766行)

## 次のステップ
Phase 2: emit.rs 作成(~500行移行)
Phase 3: build.rs 作成(~350行移行)
最終目標: builder_calls.rs を200行以内に

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

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:02:01 +09:00