Phase 9.78h: Stabilize MIR26 pipeline
- Add lib test to sync Core Instruction names with docs (INSTRUCTION_SET.md) - Optimizer: Pass 0 normalizes legacy ops -> unified (TypeCheck/Cast->TypeOp, WeakNew/WeakLoad->WeakRef, BarrierRead/Write->Barrier) - Optimizer: diagnostics for legacy ops; forbid via NYASH_OPT_DIAG_FORBID_LEGACY=1 - Runner: treat diagnostics (unlowered/legacy) as fatal when enabled - Printer: unify legacy print style to TypeOp/WeakRef/Barrier - Verifier: treat Phi inputs correctly (skip merge/dominance violations for Phi) - Docs: update PHI_NORMALIZATION_PLAN; CURRENT_TASK: add risk note for op duplication - Misc: PHI debugging/logs kept stable; snapshots still green
This commit is contained in:
@ -315,6 +315,15 @@ nyash --backend vm local_tests/and_or_truthy_vm.nyash # 期待: false,true,fals
|
||||
- Builderの早期loweringをFunctionCall分岐で強化(`Literal`/`StringBox`両対応、`print(...)` 内でも確実にdst生成)
|
||||
- Optimizerの安全ネット(BoxCall/Call→TypeOp)を `isType` パターンでも確実に発火させる(テーブル駆動の判定)
|
||||
|
||||
- 命令の二重化(Legacy vs Unified)
|
||||
- 状況: `MirInstruction` に旧系(`TypeCheck/Cast/WeakNew/WeakLoad/BarrierRead/BarrierWrite`)と統合系(`TypeOp/WeakRef/Barrier`)が併存。
|
||||
- リスク: ドキュメントは26命令(統合系)で凍結のため、実装との二重化がバグ温床に。
|
||||
- 当面のガード: 26命令同期テストを追加(`src/mir/instruction_introspection.rs`)。ドキュメント≡実装名がズレたら赤。
|
||||
- 次アクション:
|
||||
1) Optimizer診断に「旧命令検出」フラグを追加(`NYASH_OPT_DIAG_FORBID_LEGACY=1`で旧命令が存在したら失敗)。
|
||||
2) Printer/Verifier/Optimizerの表記・効果を統合側に寄せる(表示も統一)。
|
||||
3) 段階的に旧命令をcfgで囲む or 内部で統合命令へアダプト(最終的に旧命令経路を削除)。
|
||||
|
||||
## ⏸️ セッション再開メモ(次にやること)
|
||||
- [ ] Builder: `extract_string_literal` の `StringBox`対応は導入済 → `FunctionCall` 早期loweringの再検証(`print(isType(...))` 直下)
|
||||
- [ ] Optimizer: `Call` 形式(関数呼び出し)でも `isType/asType` を検出して `TypeOp(Check/Cast)` に置換する安全ネットの強化とテスト
|
||||
|
||||
@ -18,9 +18,9 @@
|
||||
|
||||
実装状況(2025-08-26)
|
||||
- Step 1 完了: `VM::loop_execute_phi` が `previous_block` による選択に対応。
|
||||
- 既知の課題: LoopExecutor 経由の借用安全な委譲(Step 2)。
|
||||
- Step 2 スケルトン導入: `LoopExecutor` へphi実行を委譲し、`control_flow::record_transition(from,to)` で `previous_block` と遷移を記録。VM本体の分岐時に呼び出し済み。
|
||||
- 既知の課題: `LoopExecutor` のヘッダ検出/イテレーション管理の強化(いまは簡易)。
|
||||
|
||||
次アクション
|
||||
- VM 内部の phi 実行を LoopExecutor へ委譲できるよう API を見直し(`get_value` クロージャの借用境界を調整)。
|
||||
- Builder 側の phi 正規化 TODO を CURRENT_TASK に追記。
|
||||
|
||||
- `LoopExecutor` のヘッダ判定とイテレーション可視化を拡充(`is_loop_header` の実装、`NYASH_VM_DEBUG_PHI` 出力拡張)。
|
||||
- Builder 側の phi 正規化 TODO を CURRENT_TASK に追記(seal/pred更新・Phi先頭挿入の確認用ユニットテスト追加)。
|
||||
|
||||
Reference in New Issue
Block a user