Files
hakorune/src/mir/builder/rewrite
nyash-codex c8ad1dae65 feat(naming): Phase 21.7++ Phase 3 完全達成 - Builder 側 StaticMethodId SSOT 統一
## 🎊 成果概要
**Phase 3: 全体統一** - MIR Builder 側を StaticMethodId 準拠に統一!

###  実装完了項目(全4タスク)
1. **素手 split 調査** (Phase 3.1)
   - 調査結果: known.rs に2箇所のみ(split_once)
   - unified_emitter には素手 split なし
   - 置き換え対象: 2箇所のみで簡潔

2. **unified_emitter.rs 統一** (Phase 3.2)
   - methodization 部分を StaticMethodId::parse() に変更
   - decode_static_method() → StaticMethodId::parse()
   - is_static_method_name() → StaticMethodId::parse().is_some()
   - arity 判定を Optional 対応(None も許容)

3. **known.rs split_once 置き換え** (Phase 3.3)
   - 2箇所の split_once('.') → StaticMethodId::parse()
   - box_name 取得を構造化表現経由に統一
   - コード削減: 8行 → 4行(50%削減)

4. **テスト実行・確認** (Phase 3.4)
   - json_lint_stringutils_min_vm: PASS 
   - namingbox_static_method_id: 13/13 PASS 
   - ビルド成功、警告のみ(既存問題)

### 📊 技術的効果
- **素手 split 根絶**: 全箇所を StaticMethodId 経由に統一
- **コード品質向上**: 構造化表現で型安全化
- **保守性向上**: 名前パース処理が SSOT に集約
- **後方互換**: 既存機能に影響なし

### 🎯 Phase 4 への準備完了
- Builder/VM 両方が StaticMethodId SSOT 準拠
- ドキュメント整備のみ残存(2-3時間)

---

**Phase 0**:  完了 (Silent Failure 根絶)
**Phase 1**:  完了 (SSOT 基盤確立)
**Phase 2**:  完了 (VM 統一)
**Phase 3**:  完了 (Builder 統一)
**Phase 4**: 次のタスク (ドキュメント化)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 02:43:45 +09:00
..

rewrite — Known 経路の関数化 特殊規則P1

目的

  • Known 受け手のメソッド呼び出し obj.m(a) を関数呼び出し Class.m(me,obj,a) に正規化し、実行系を単純化する。
  • 表示系の特殊規則(toString / stringify → 規範 str)を一箇所に集約する(互換維持)。
  • 仕様は不変。Union は観測のみで、Known のみ関数化対象。

責務

  • known.rs: Known 経路の instance→function 正規化(ユーザー Box のみ、既存ガード尊重)。
  • special.rs: toString/stringifystr の早期処理Class.str/0 を優先、互換で stringify/0
    • equals/1 もここに集約Known 優先 → 一意候補のみ許容)。
  • 観測は observe 層に委譲resolve.choose など)。

非責務(禁止)

  • Union の強引な関数化Unknown/曖昧なものは扱わない)。
  • 起源付与/型推論の実施origin 層に限定)。
  • NYABI 呼び出しや VM 直接呼び出し。

API呼び出し側から

  • try_known_rewrite(builder, recv, class, method, args) -> Option<Result<ValueId,String>>
  • try_unique_suffix_rewrite(builder, recv, method, args) -> Option<Result<ValueId,String>>
  • try_known_or_unique(builder, recv, class_opt, method, args) -> Option<Result<ValueId,String>>
  • try_early_str_like(builder, recv, class_opt, method, arity) -> Option<Result<ValueId,String>>
  • try_special_equals(builder, recv, class_opt, method, args) -> Option<Result<ValueId,String>>

レイヤールール

  • Allowed: Builder のメタ参照/関数名生成、MirInstruction の生成(関数化結果)。
  • Forbidden: origin/observe のロジックを混在させない(必要時は呼び出しで連携)。

決定原則

  • Known のみ関数化(value_origin_newbox が根拠)。
  • 表示系は規範 str を優先、stringify は当面互換として許容。
  • すべての決定は dev 観測resolve.try/chooseで可視化し、挙動は不変。