|
|
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 |
|