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
26288b5451
refactor(phi): Phase 26-B-3 - loop_builder.rs and json_v0_bridge PhiInputCollector integration
...
- loop_builder.rs: Replace LoopSnapshotMergeBox calls with PhiInputCollector for continue-merge PHI generation
- json_v0_bridge/lowering/loop_.rs: Replace LoopSnapshotMergeBox calls with PhiInputCollector for continue_merge_bb PHI generation
- Unified PHI input handling across all loop builders (loopform_builder, loop_builder, json_v0_bridge)
- Tests: mir_loopform_exit_phi all passed (4/4)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-20 18:07:11 +09:00
c4d25e7773
feat(phi): __pin$変数の完全除外でValueId(313)→(300)に改善!
...
🎯 **Task先生の発見を実装**:
- __pin$ temporary変数をBodyLocalInternalとして強制分類
- Writes収集から__pin$変数を除外(carrier誤判定防止)
📦 **変更ファイル**:
- loop_var_classifier.rs: Priority 0で__pin$変数を自動BodyLocalInternal分類
- loop_builder.rs: Writes収集で__pin$除外
- loop_.rs (JSON): Writes収集で__pin$除外
✅ **テスト結果**: 267 PASS / 1 FAIL(新規ユニットテスト追加)
- test_classify_pin_temporary_variables: PASS ✅
- mir_funcscanner_skip_ws: ValueId(313)→(300)に改善(段階的進捗)
🔍 **ValueId未定義エラー改善履歴**:
- 最初: ValueId(313) at BasicBlockId(201)
- __pin$分類追加: ValueId(301) at BasicBlockId(210)
- Writes除外: ValueId(300) at BasicBlockId(207)
→ 着実に減少中!
📋 **完了ステップ**:
✅ Step 5-1: Writes集合収集(__pin$除外追加)
✅ Step 5-2: ValueId比較ロジック
✅ Step 5-4: φ縮約実装
✅ Step 5-5-A: PHI pred mismatch解決
✅ Step 5-5-B-partial: __pin$変数問題部分解決
🎯 **次のステップ**: ValueId(300)根本原因特定(Continue merge PHI実装検討)
2025-11-20 14:14:37 +09:00
2cdef5432a
feat(phi): Step 5-1/5-2/5-4実装 - Writes収集+ValueId比較+PHI縮約
...
🎯 **実装内容**:
- Step 5-1: Writes集合収集(Snapshot比較で再代入検出)
- Step 5-2: ValueId比較ロジック(preheader_vars保存)
- Step 5-4: φ縮約実装(optimize_same_value()でself-φ撲滅)
📦 **変更ファイル**:
- loopform_builder.rs: preheader_vars追加、seal_phis()にPHI縮約ロジック
- loop_.rs (JSON): Writes収集実装
- loop_builder.rs (AST): Writes収集実装(JSON経路と統一)
✅ **テスト結果**: 266 PASS / 1 FAIL (既知のmir_funcscanner_skip_ws)
🔧 **Box Theory**: 各箱が単一責任を保持、段階的実装完了
📋 **残タスク**:
- Step 5-5: mir_funcscanner_skip_wsのPHI pred mismatch解決
- ValueId(712)の生成箇所特定(body-local PHI疑惑)
2025-11-20 13:26:57 +09:00
146b167e49
feat(phi): Option C実装完了 - 箱理論でPHI bug根本修正 + 完全共通化
...
🎯 **Option C - Box-First Design**
**新規Box追加(2ファイル)**:
- LocalScopeInspectorBox: 変数定義位置追跡(280行、13テスト)
- LoopVarClassBox: 変数分類(Pinned/Carrier/BodyLocalExit/BodyLocalInternal)(220行、10テスト)
**統合完了(3ファイル)**:
- loop_snapshot_merge.rs: merge_exit_with_classification() でOption C分類適用
- loopform_builder.rs: build_exit_phis() でinspector統合、完全共通化達成
- loop_.rs (JSON Bridge): 重複コード削除、共通化された実装を使用
**技術的成果**:
✅ 266テスト通過(既存機能に影響なし)
✅ BodyLocalInternal変数の正しい分類(exit PHI生成スキップ)
✅ JSON/AST両経路の完全共通化(重複コード根絶)
✅ is_available_in_all() でPHI pred mismatch防止
**残課題**:
- mir_funcscanner_skip_ws: 1テストのみ失敗(別変数で問題継続中)
- 次: __mir__.log() でのトレース + 詳細調査
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-20 12:21:40 +09:00
2e6e6b61ff
feat(phi): Option C実装 - 箱分割設計でPHIバグ根本修正(基本実装)
...
## 実装内容
### 新規モジュール(箱理論設計)
1. **LocalScopeInspectorBox** (280行, 13テスト)
- 各変数がどのブロックで定義されているか追跡
- is_defined_in_all() で全exit predsでの定義チェック
- record_snapshot() でスナップショット記録
2. **LoopVarClassBox** (220行, 10テスト)
- 変数を4種類に分類: Pinned/Carrier/BodyLocalExit/BodyLocalInternal
- needs_exit_phi() でPHI生成要否判定
- filter_exit_phi_candidates() で候補フィルタリング
### 既存モジュール修正
3. **loop_snapshot_merge.rs**
- merge_exit_with_classification() 追加
- Option Cロジック実装: 全exit predsで定義されていない変数はSKIP
- デバッグログ追加 (NYASH_OPTION_C_DEBUG)
4. **loopform_builder.rs**
- build_exit_phis() シグネチャ拡張 (inspector追加)
- 実際のCFG predecessors使用 (ops.get_block_predecessors)
- build_exit_phis_for_control() でinspector構築
5. **loop_.rs (JSON bridge)**
- build_exit_phis() 呼び出し修正
- header/exit snapshots記録
## 技術的成果
### ✅ 理論的に正しい設計確立
- 変数スコープを厳密に追跡
- CFGベースの正確な判定
- 汎用的で拡張性の高い基盤
### ✅ 部分的動作確認済み
- 多数のループで BodyLocalInternal が正しくSKIPされる
- ログ: "[Option C] → SKIP exit PHI for 'ch'" 確認
- 23個のユニットテスト全PASS
### ⚠️ 残存課題
- header snapshot記録漏れによる一部誤判定
- 次回修正で完全動作見込み
## 設計哲学(箱理論)
各箱が単一責任を持つ:
- LocalScopeInspectorBox: 変数定義位置の追跡のみ
- LoopVarClassBox: 変数分類のみ
- LoopSnapshotMergeBox: PHI入力生成のみ
→ 保守性・再利用性・テスタビリティの向上
Related: #skip_whitespace PHI bug
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-20 11:22:17 +09:00
25dca4ed48
feat(mir): Phase 26-A-4完了 - is_parameter根本修正(名前ベース→ValueIdベース型安全化)
...
## 🎯 Phase 26-A-4: loop_builder.rs修正完了
### ✅ 実装内容
1. **LoopFormOps trait修正** (`src/mir/phi_core/loopform_builder.rs:538`)
- シグネチャ変更: `is_parameter(&self, name: &str)` → `is_parameter(&self, value_id: ValueId)`
- Phase 26-A-4コメント追加
2. **MirBuilder実装修正** (`src/mir/loop_builder.rs:1172`)
- `self.parent_builder.is_value_parameter(value_id)` 使用
- MirValueKindベースの型安全判定に変更
- GUARD Bug Prevention コメント追加
3. **JSON v0 Bridge実装** (`src/runner/json_v0_bridge/lowering/loop_.rs:96`)
- ValueId → 変数名の逆引き実装
- 既存ヒューリスティック("me", "args")を維持
- Phase 26-A-4コメント追加
4. **テストMock実装×2** (`src/mir/phi_core/loopform_builder.rs:697, 848`)
- MockOps: ValueId < params.len() で判定
- 第2Mock: 常にfalse(パラメータなし)
5. **呼び出し箇所修正×2**
- `loop_builder.rs:237`: `self.is_parameter(*value)`
- `loopform_builder.rs:143`: `ops.is_parameter(value)`
### 🏆 技術的成果
#### GUARDバグ完全根絶
```rust
// ❌ 旧実装(名前ベース、脆弱)
fn is_parameter(&self, name: &str) -> bool {
if name.starts_with("__pin$") { return false; }
if name == "me" { return true; }
self.parent_builder.function_param_names.contains(name)
}
// ✅ 新実装(ValueIdベース、型安全)
fn is_parameter(&self, value_id: ValueId) -> bool {
self.parent_builder.is_value_parameter(value_id)
// ← MirValueKind::Parameter(_) で型安全判定!
}
```
#### GUARD checkバグ再現防止
- **問題**: ValueId(0) を「常に未初期化」と誤判定
- **解決**: MirValueKind::Parameter(0) で正しく判定
- **効果**: パラメータ s=ValueId(0) も正しく処理可能に
### 📊 テスト結果
```
test result: ok. 241 passed; 1 failed; 27 ignored
```
- ✅ **241テスト合格** - Phase 26-A-3と同じ(回帰なし)
- ❌ **1テスト失敗** - `mir_funcscanner_skip_ws`(既存PHIバグ、無関係)
- ✅ **ビルド成功** - 4 warnings(既存)
### 🔄 修正ファイル一覧
1. `src/mir/loop_builder.rs` - メイン実装(is_parameter実装+呼び出し)
2. `src/mir/phi_core/loopform_builder.rs` - trait定義+呼び出し+Mock×2
3. `src/runner/json_v0_bridge/lowering/loop_.rs` - JSON bridge実装
### 🎯 次のステップ
- Phase 26-A-5: 統合テスト作成
- Phase 26-A: 既存テスト全確認
- ドキュメント更新
## 📚 関連Phase
- Phase 26-A-1: MirValueKind + TypedValueId 実装 ✅
- Phase 26-A-2: MirBuilder統合 ✅
- Phase 26-A-3: パラメータ型自動登録 ✅
- **Phase 26-A-4: is_parameter根本修正 ✅ ← 今回**
2025-11-20 09:49:13 +09:00
9bdf2ff069
chore: Phase 25.2関連ドキュメント更新&レガシーテストアーカイブ整理
...
## ドキュメント更新
- CURRENT_TASK.md: Phase 25.2完了記録
- phase-25.1b/e/q/25.2 README更新
- json_v0_bridge/README.md新規追加
## テストファイル整理
- vtable_*テストをtests/archive/に移動(6ファイル)
- json_program_loop.rsテスト追加
## コード整理
- プラグイン(egui/python-compiler)微修正
- benchmarks.rs, instance_v2.rs更新
- MIR関連ファイル微調整
## 全体成果
Phase 25.2完了により:
- LoopSnapshotMergeBox統一管理実装
- ValueId(1283)バグ根本解決
- ~35行コード削減(目標210行の16%)
- 11テスト全部PASS、3実行テストケースPASS
2025-11-20 03:56:12 +09:00
525e59bc8d
feat(loop-phi): Add body-local variable PHI generation for Rust AST loops
...
Phase 25.1c/k: Fix ValueId undefined errors in loops with body-local variables
**Problem:**
- FuncScannerBox.scan_all_boxes/1 and BreakFinderBox._find_loops/2 had ValueId
undefined errors for variables declared inside loop bodies
- LoopFormBuilder only generated PHIs for preheader variables, missing body-locals
- Example: `local ch = s.substring(i, i+1)` inside loop → undefined on next iteration
**Solution:**
1. **Rust AST path** (src/mir/loop_builder.rs):
- Detect body-local variables by comparing body_end_vars vs current_vars
- Generate empty PHI nodes at loop header for body-local variables
- Seal PHIs with latch + continue snapshot inputs after seal_phis()
- Added HAKO_LOOP_PHI_TRACE=1 logging for debugging
2. **JSON v0 path** (already fixed in previous session):
- src/runner/json_v0_bridge/lowering/loop_.rs handles body-locals
- Uses same strategy but for JSON v0 bridge lowering
**Results:**
- ✅ FuncScannerBox.scan_all_boxes: 41 body-local PHIs generated
- ✅ Main.main (demo harness): 23 body-local PHIs generated
- ⚠️ Still some ValueId undefined errors remaining (exit PHI issue)
**Files changed:**
- src/mir/loop_builder.rs: body-local PHI generation logic
- lang/src/compiler/entry/func_scanner.hako: debug logging
- /tmp/stageb_funcscan_demo.hako: test harness
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-19 23:12:01 +09:00
fb256670a1
fix(json_v0): Phase 25.1c/k - loop body local変数のPHI生成を追加
...
BreakFinderBox._find_loops/2 等で、loop body 内で新規宣言された
local 変数(header_pos, next_i 等)が loop header に戻った時に
undefined になる SSA バグを修正。
変更内容:
- body_vars から base_vars にない変数を検出
- それらに対する IncompletePhi を header に追加
- backedge_to_cond 判定を拡張(Branch にも対応)
- break があるループでは latch が Branch 終端になるため
- トレースログ追加(HAKO_LOOP_PHI_TRACE=1)
根本原因:
prepare_loop_variables_with() は preheader の変数のみを対象とし、
loop body 内で新規宣言された変数を PHI に含めていなかった。
修正効果:
- BreakFinderBox._find_loops/2 の ValueId(172) undefined 解決見込み
- FuncScannerBox.scan_all_boxes/1 も同様のパターンで修正される
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-19 20:33:24 +09:00
1747ec976c
refactor(json_v0_bridge): Phase 25.1p - FunctionDefBuilder箱化+me予約修正
...
【変更内容】
1. FunctionDefBuilder 箱化(SSOT化)
- インスタンスメソッド判定の一元化
- パラメータ ValueId 生成の統一
- 変数マップ初期化の統一
2. ValueId(0) me 予約バグ修正
- is_instance_method() で box_name != "Main" 判定
- インスタンスメソッドは me を ValueId(0) に予約
- variable_map["me"] = ValueId(0) を自動設定
3. コード削減・可読性向上
- 60行 → 40行(関数定義処理)
- 重複ロジック削除
- デバッグログ追加(is_instance表示)
【効果】
- json_v0_bridge 経路の ValueId(0) 未定義エラー解消
- Stage-B compiler で static box メソッドが正しく動作
- 設計の一貫性向上(me の扱いが明確)
【非スコープ】
- Rust MirBuilder 側は未修正(Phase 26で統一予定)
- lower_static_method_as_function は現状維持
関連: Phase 25.1m (静的メソッド修正), Phase 25.1c/k (SSA修正)
🐱 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-19 10:08:04 +09:00
d3cbc71c9b
feat(mir): Phase 25.1f完了 - Conservative PHI + ControlForm観測レイヤー
...
🎉 Conservative PHI Box理論による完全SSA構築
**Phase 7-B: Conservative PHI実装**
- 片方branchのみ定義変数に対応(emit_void使用)
- 全変数にPHI生成(Conservative Box理論)
- Stage-1 resolver全テスト緑化(3/3 PASS)
**Phase 25.1f: ControlForm観測レイヤー**
- LoopShape/IfShape/ControlForm構造定義
- Loop/If統一インターフェース実装
- debug_dump/debug_validate機能追加
- NYASH_CONTROL_FORM_TRACE環境変数対応
**主な変更**:
- src/mir/builder/phi.rs: Conservative PHI実装
- src/mir/control_form.rs: ControlForm構造(NEW)
- src/mir/loop_builder.rs: LoopForm v2デフォルト化
**テスト結果**:
✅ mir_stage1_using_resolver_min_fragment_verifies
✅ mir_stage1_using_resolver_full_collect_entries_verifies
✅ mir_parserbox_parse_program2_harness_parses_minimal_source
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com >
Co-Authored-By: ChatGPT <chatgpt@openai.com >
2025-11-18 18:56:35 +09:00
fbf4687ea1
fix(bridge): implement env.box_introspect.kind lowering + Stage0 build fixes
...
Phase 25.1b type system groundwork - env.* namespace support in Bridge layer
Changes:
- Bridge layer (JSON v0 → MIR):
- Add 'env' as well-known variable in MapVars::resolve()
- Implement env.box_introspect.kind(value) → ExternCall lowering
- Pattern: Method { recv: Method { recv: Var("env"), method: "box_introspect" }, method: "kind" }
- VM/extern fixes:
- Add Arc::from() conversion for env.box_introspect.kind result
- Fix MapBox API usage in extern_functions.rs logging
- Build fixes:
- Comment out missing llvm_legacy/llvm modules in src/backend/mod.rs
- Comment out missing gui_visual_node_prototype in Cargo.toml
- New files:
- lang/src/shared/common/box_type_inspector_box.hako (type introspection API)
Context:
- Enables BoxTypeInspectorBox to query runtime Box types via env.box_introspect.kind
- Required for selfhost MirBuilder type-aware lowering (multi-carrier loops, etc.)
- Part of Phase 25.1b "no fallback" selfhosting strategy
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-16 17:19:56 +09:00
7ca7f646de
Phase 25.1b: Step2完了(FuncBodyBasicLowerBox導入)
...
Step2実装内容:
- FuncBodyBasicLowerBox導入(defs専用下請けモジュール)
- _try_lower_local_if_return実装(Local+単純if)
- _inline_local_ints実装(軽い正規化)
- minimal lowers統合(Return/BinOp/IfCompare/MethodArray系)
Fail-Fast体制確立:
- MirBuilderBox: defs_onlyでも必ずタグ出力
- [builder/selfhost-first:unsupported:defs_only]
- [builder/selfhost-first:unsupported:no_match]
Phase構造整備:
- Phase 25.1b README新設(Step0-3計画)
- Phase 25.2b README新設(次期計画)
- UsingResolverBox追加(using system対応準備)
スモークテスト:
- stage1_launcher_program_to_mir_canary_vm.sh追加
Next: Step3 LoopForm対応
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-15 22:32:13 +09:00
6856922374
Phase 25.1a: selfhost builder hotfix (fn rename, docs)
2025-11-15 05:42:32 +09:00
938c92160a
feat(mir-builder): add using imports support to json_v0_bridge
...
Phase 21.8 foundation for MatI64/IntArrayCore integration
Changes:
- Add `imports: HashMap<String, String>` to BridgeEnv
- Extend MapVars::resolve() to check imports and create static box references
- Add BridgeEnv::with_imports() to initialize with using imports map
- Add parse_json_v0_to_module_with_imports() to json_v0_bridge
- Add program_json_to_mir_json_with_imports() to mir_builder.rs
- Maintain backward compatibility via empty HashMap defaults
Next: Wire using extraction from pipeline and test with MatI64
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-14 15:27:42 +09:00
dda65b94b7
Phase 21.7 normalization: optimization pre-work + bench harness expansion
...
- Add opt-in optimizations (defaults OFF)
- Ret purity verifier: NYASH_VERIFY_RET_PURITY=1
- strlen FAST enhancement for const handles
- FAST_INT gate for same-BB SSA optimization
- length cache for string literals in llvmlite
- Expand bench harness (tools/perf/microbench.sh)
- Add branch/call/stringchain/arraymap/chip8/kilo cases
- Auto-calculate ratio vs C reference
- Document in benchmarks/README.md
- Compiler health improvements
- Unify PHI insertion to insert_phi_at_head()
- Add NYASH_LLVM_SKIP_BUILD=1 for build reuse
- Runtime & safety enhancements
- Clarify Rust/Hako ownership boundaries
- Strengthen receiver localization (LocalSSA/pin/after-PHIs)
- Stop excessive PluginInvoke→BoxCall rewrites
- Update CURRENT_TASK.md, docs, and canaries
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-13 16:40:58 +09:00
9e2fa1e36e
Phase 21.6 solidification: chain green (return/binop/loop/call); add Phase 21.7 normalization plan (methodize static boxes). Update CURRENT_TASK.md and docs.
2025-11-11 22:35:45 +09:00
0996090d6d
ssot(cf): bridge set_branch/set_jump/insert_phi adopted across expr/ternary/match/try_catch/loop; builder emission compare/branch/jump delegate to cf_common; add canaries (ternary/match); docs: note cf_common adoption
2025-11-04 21:33:09 +09:00
44a5158a14
hv1: early-exit at main (no plugin init); tokenizer: Stage-3 single-quote + full escapes (\/ \b \f \' \r fix); builder: route BinOp via SSOT emit_binop_to_dst; hv1 verify canary route (builder→Core); docs: phase-20.39 updates
2025-11-04 20:46:43 +09:00
06a729ff40
vm(hako): add v1 reader/dispatcher (flagged), commonize mir_call handler, share block scan; smokes: add v1 hakovm canary; docs: 20.37/20.38 plans, OOB policy; runner: v1 hakovm toggle; include SKIP summary
2025-11-03 23:21:48 +09:00
a1d5b82683
runner: introduce CoreExecutor box for JSON→exec; wire Gate‑C pipe to CoreExecutor. Stage‑B bundling: duplicate name Fail‑Fast + mix canary; add Core Map/String positive smokes; add Gate‑C budget opt‑in canary; docs: Exit Code Policy; apply child_env in PyVM common util.
2025-11-02 15:43:43 +09:00
64d7003249
bridge(loop): exit PHI を SSOT へ統一(break/continue スナップショットの stack 化)+ ループ比較スモーク(bridge)追加\n\n- lowering.rs: ループ用 break/continue スナップショットを thread-local stack で管理(push/pop/record)\n- loop_.rs: continue/break スナップを取り込み、seal_incomplete_phis_with・build_exit_phis_with に委譲\n- smokes: bridge_loop_sum/break/continue を opt-in 追加(SMOKES_ENABLE_LOOP_BRIDGE=1)
2025-11-01 16:56:26 +09:00
5e07e03dd5
bridge(loop): JSON v0 ループ降下を phi_core SSOT に寄せる(ヘッダPHIを委譲)+ 最小スモーク追加\n\n- json_v0_bridge/lowering/loop_.rs: LoopPhiOps アダプタを実装し、prepare/seal を使用(preheader Copy/seed → latch 合流)\n- 既存の手書きPHI生成/更新を撤退(重複を排除)\n- quick/core/loops/bridge_loop_sum_vm.sh: opt-in カナリア(SMOKES_ENABLE_LOOP_BRIDGE=1)
2025-11-01 16:45:27 +09:00
eef6fca8cd
docs(loops): LoopForm SSOT設計ノートを追加し、Bridge側ループ降下にPHI到達検証を導入(debug時)。\n\n- 新規: docs/development/architecture/loops/loopform_ssot.md\n- 修正: src/runner/json_v0_bridge/lowering/loop_.rs に debug_verify_phi_inputs 呼び出しを追加\n- 方針: Direct MIR は既に phi_core を使用。Bridge は段階的に LoopPhiOps アダプタでSSOTに寄せる
2025-11-01 16:37:16 +09:00
01b4417c5d
docs(llvm/vm): 静的Box(self)規約を明文化 + Bridgeトグル追記; Gate‑C/Core 現状反映; CURRENT_TASK 更新。\n\n- 新規: docs/development/architecture/llvm/static_box_singleton.md\n- 追記: lang/src/vm/README.md に self 先頭規約/互換トグルを明記\n- 追記: CURRENT_TASK に本更新を記録\n- phase-20.33/CHECKLIST にドキュメント完了チェックを追加\n- bak フォルダはリポジトリ直下に存在せず(削除対象なし)\n\n併せて未コミット差分をスナップショット(Rust 層の前作業含む)
2025-11-01 16:31:48 +09:00
b9340a1b19
refactor(mir): Phase 6-2 - Apply helper methods to reduce ~28 lines in JSON v0 Bridge
...
**Phase 6-2完了:ヘルパーメソッド適用で28行削減達成!**
## 📊 削減実績
- **loop_.rs**: 8行→1行(7行削減) - PHI更新ループ統一
- **if_else.rs**: 6行→1行(5行削減) - Branch終端設定統一
- **try_catch.rs**: 8箇所×2-3行(16行削減) - Jump終端設定統一
- **合計**: ~28行削減
## 🔧 適用内容
### 1. loop_.rs - PHI更新の統一化
- **Before**: 手動でPHI命令を検索してinputs.push()
- **After**: `bb.update_phi_input(phi_dst, (bend, latch_val))?`
### 2. if_else.rs - Branch終端設定の統一化
- **Before**: if-let-Some + bb.set_terminator(Branch {...})
- **After**: `f.set_branch_terminator(cur, cval, then_bb, else_bb)?`
### 3. try_catch.rs - Jump終端設定の統一化(8箇所)
- **Before**: if-let-Some + bb.set_terminator(Jump {...})
- **After**: `f.set_jump_terminator(bb_id, target)?`
## ✅ テスト結果
- `loop_min_while.nyash`: ✅ PASS(0,1,2出力)
- `loop_phi_one_sided.nyash`: ✅ PASS(ArrayBox警告のみ)
- ビルド: ✅ 88 warnings(既存レベル)
## 🎯 Phase 6進捗
- **Phase 6-1**: ✅ ヘルパーメソッド追加(+46行)
- **Phase 6-2**: ✅ ヘルパー適用(-28行)
- **実質削減**: -28行(基盤整備込み)
## 📋 次のステップ
- **Phase 6-3**: BranchMergeBuilder pattern(~100行削減見込み)
- **Phase 6-4**: 全体統合・最終テスト
Related: Phase 1-5(3,824行削減)に続く段階的リファクタリング
🐱 にゃーん!実用化成功!
2025-11-01 15:23:28 +09:00
79b9d2b32c
fix(mir): edge-copy insertion before terminator - resolve ValueId undefined errors
...
【問題】
Stage-B(JSON v0 Bridge)で「use of undefined value ValueId(...)」エラー発生
- 原因: merge.rs:38-42でedge-copyを終端命令**後**に追加していた
- 結果: Copy命令が到達不能となり、ValueIdが未定義のまま参照される
【根本原因分析】
1. if_else.rs:34で`set_terminator(Jump)`を設定
2. if_else.rs:62で`merge_var_maps()`呼び出し
3. merge.rs:39で`add_instruction(Copy)` ← **ここで終端後に追加!**
4. BasicBlock構造上、terminator設定後のadd_instruction()は到達不能
【修正内容】
1. BasicBlock::add_instruction_before_terminator()メソッド追加
- 終端命令の有無に関わらず、instructions vecに追加
- terminator自体の追加は許可しない(panic)
2. merge_values()でedge-copy挿入方法を変更
- add_instruction() → add_instruction_before_terminator()
- これによりCopyが終端の**前**に配置される
【修正箇所】
- src/mir/basic_block.rs: add_instruction_before_terminator()追加(12行)
- src/runner/json_v0_bridge/lowering/merge.rs: 呼び出し変更(2行)
【テスト結果】
✅ if文PHIテスト: /tmp/phi_simple_if2.nyash → 出力 1
✅ loop文PHIテスト: /tmp/phi_loop_test.nyash → 出力 10
✅ userbox_*スモークテスト: 全6テストPASS
⚠️ Stage-B: namespace conflict未解決のため未確認
(apps/selfhost.vm.* と lang/hakorune.vm.* の競合)
【影響範囲】
- JSON v0 Bridge経路のif/else合流処理
- edge-copy(PHI-off mode)の正しい配置保証
- Builder経路は元々正常動作(影響なし)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-01 14:37:54 +09:00
81211c22ad
feat: MIR Call命令統一Phase 3.1-3.2完了!統一Call実装進行中
...
✨ Phase 3.1-3.2実装完了
- build_indirect_call_expressionでCallTarget::Value使用
- print関数をcall_global print()として統一
- build_function_callでemit_unified_call使用
- ExternCall(env.console.log)→Callee::Global(print)完全移行
🏗️ MIR統一基盤構築
- src/mir/definitions/call_unified.rs: 統一定義(297行)
- emit_unified_call()と便利メソッド3種実装
- NYASH_MIR_UNIFIED_CALL=1で段階移行制御
- VM実行器でCallee対応実装済み
📊 進捗状況(26%削減見込み)
- Phase 1-2: ✅ 基盤構築完了
- Phase 3.1-3.2: ✅ 基本関数統一完了
- Phase 3.3: 🔄 BoxCall統一中
- Phase 4: 📅 Python LLVM(最優先・63%削減)
- Phase 5: 📅 PyVM/VM統一
📚 ドキュメント更新
- CLAUDE.md: テストスクリプト参考集追加
- CURRENT_TASK.md: Phase 3進捗更新
- python-llvm-priority-rationale.md: 優先順位戦略文書化
- mir-call-unification-master-plan.md: スケジュール最新化
🎯 6種類→1種類: Call/BoxCall/PluginInvoke/ExternCall/NewBox/NewClosure → MirCall統一へ
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-24 01:05:44 +09:00
fc4c866151
Step 2完了: peek→match完全統一 + 重大PHI命令バグ発見
...
## 🎉 Step 2: peek→match完全統一アーキテクチャクリーンアップ完了
- ✅ 15ファイルで PeekExpr → MatchExpr 一括置換完了
- ✅ lowering/peek.rs → match_expr.rs 完全移行
- ✅ AI理解性・コードベース一貫性・保守性大幅向上
## 🔍 Step 3: 複数行パース問題調査完了
- ✅ Task先生による根本原因特定完了
- 原因: オブジェクトリテラルパーサーの改行スキップ不足
- 修正: src/parser/expr/primary.rs の skip_newlines() 追加
## 🚨 重大発見: PHI命令処理バグ
- 問題: gemini_test_case.nyash で期待値2→実際0
- 原因: フェーズM+M.2のPHI統一作業でループ後変数マージに回帰バグ
- 詳細: PHI命令は正常だが、print時に間違ったPHI参照
- 影響: Phase 15セルフホスティング基盤の重大バグ
## 📝 CLAUDE.md更新
- 全進捗状況の詳細記録
- 次のアクション: ChatGPT相談でMIRビルダー修正戦略立案
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-23 09:00:07 +09:00
09149be41a
feat: フェーズM.2完了 - JSON v0 Bridge層PHI統一でno_phi完全撤廃
...
- strip_phi_functions()削除: 40行の複雑なPHI→edge-copy後処理撤廃
- JSON v0 Bridge 8箇所のno_phi分岐完全削除:
- try_catch.rs: 3箇所統一
- ternary.rs, peek.rs, expr.rs, loop_.rs: 各1-2箇所統一
- config::env::mir_no_phi()大幅簡略化: 40行→8行、phi-legacy依存除去
- 未使用コード削除: PHI_ON_GATED_WARNED static、mir_no_phiフィールド
- 未使用import削除: HashSet、collect_phi_incoming_if_reachable
効果: フェーズM+M.2で推定500行超削減、MIR層PHI完全統一達成
Phase 15セルフホスティング80k→20k行圧縮の主要基盤完成
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-23 07:41:08 +09:00
10f272a460
fix: Complete JIT/Cranelift archival cleanup for Phase 15
...
- Create JIT stub module with minimal compatibility layer
- Archive JIT-direct execution mode with helpful error message
- Fix remaining JIT references in config, runtime, and backend modules
- Resolve compilation errors preventing Phase 15 development
- All JIT functionality now properly archived to archive/jit-cranelift/
🎯 Phase 15 compilation now succeeds - ready for selfhosting debug
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-23 02:26:33 +09:00
5e818eeb7e
stage3: unify to cleanup; MIR return-defer; docs+smokes updated; LLVM(harness): finalize_phis ownership, ret.py simplified, uses-predeclare; cleanup return override green; method-postfix cleanup return WIP (PHI head)
2025-09-19 02:07:38 +09:00
951a050592
selfhost: introduce using-based imports for compiler/parser/tools; keep includes temporarily. llvm: add PHI wiring JSON trace + unit/integration tests; fast test suite extended. runner: split selfhost helpers, small cleanups.
2025-09-18 13:35:38 +09:00
2720884a20
bridge/json_v0: split expr lowering; add Ternary/Peek lowering + AST; selfhost Peek JSON emit; add selfhost Peek smoke; warning cleanup in lowering/optimizer/verification
...
- Split expr lowering into ; route calls from stmt lowering
- Implement ternary/peek lowering (MIR13 PHI-off=Copy, PHI-on=Phi)
- Extend JSON v0 AST (ExprV0::{Ternary,Peek}, PeekArmV0)
- Selfhost parser_box: emit Peek JSON; add Stage-2 'Peek basic' smoke
- Reduce warnings: remove unused imports/vars in several modules
- current_task: update plan for legacy VM/Interpreter offboarding
2025-09-17 11:45:57 +09:00
d99b941218
docs: add MIR13 mode doc and set PHI-off as default; bridge lowering split (if/loop/try); llvmlite resolver stabilization; curated runner default PHI-off; refresh CURRENT_TASK.md
2025-09-17 10:58:12 +09:00
31f90012e0
refactor: extract helpers (builder_calls: math/env/me; json_v0_bridge: new_block/merge_values) — non-functional cleanup; cargo check + smokes green
2025-09-17 08:20:44 +09:00
a3282abdd9
json_v0_bridge: add new_block() helper; refactor block creation in logical/try/loop; allow(dead_code) wrappers to quieten unused warnings (no behavior change)
2025-09-17 08:16:26 +09:00
adbb0201a9
chore(fmt): add legacy stubs and strip trailing whitespace to unblock cargo fmt
2025-09-17 07:43:07 +09:00
b60d3a0305
runner/json_v0_bridge: split into module dir with ast.rs, lowering.rs, lexer.rs, mod.rs. Keep public API (parse_json_v0_to_module, parse_source_v0_to_module, maybe_dump_mir) unchanged; introduce BridgeEnv/VarScope in lowering; move tiny lexer/parser. Build + PyVM Stage-2 smokes PASS.
2025-09-17 03:03:11 +09:00