Files
hakorune/src/mir/builder/rewrite
nyash-codex 990d00393e refactor(mir): Remove CompilationContext legacy fields (Phase 2-7/7) 🎉
Phase 2 完全完了!全 7 Context のレガシーフィールドを完全削除。

## Changes
- Migrated all access sites to comp_ctx.* (15 fields)
- Removed 15 deprecated fields:
  * compilation_context
  * current_static_box
  * user_defined_boxes
  * reserved_value_ids
  * fn_body_ast
  * weak_fields_by_box
  * property_getters_by_box
  * field_origin_class
  * field_origin_by_box
  * static_method_index
  * method_tail_index
  * method_tail_index_source_len
  * type_registry
  * current_slot_registry
  * plugin_method_sigs
- Removed initialization code (15 field inits)

## Phase 2 完了!🎉
- builder.rs: 1222 → 1127 lines (-95 lines net)
- Deprecation warnings: 86 → 0 (完全排除)
- 全 36 deprecated fields 削除完了
- 全 14 sync helpers 削除完了
- 7 Context 完全SSOT化

## Tests
- cargo build --release: SUCCESS
- cargo test --release --lib: 1033/1033 PASS 
- Deprecation warnings: 0 

Phase 2 Progress: 7/7 contexts complete (100%) 
-  MetadataContext
-  CoreContext
-  TypeContext
-  ScopeContext
-  BindingContext
-  VariableContext
-  CompilationContext (this commit) 🎉

Phase 136 Context Box化: 完全完了!

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-16 04:07:17 +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で可視化し、挙動は不変。