refactor(mir): Remove TypeContext legacy fields (Phase 2-3/7)
完全移行→削除の安全順序(Option C)に従い、TypeContext の deprecated フィールドと sync helpers を完全削除。 ⚠️ 危険ゾーン: TypeFactsBox 等の同名フィールドと混同しないよう、 ファイル単位で手作業移行を実施。 ## Changes - Migrated all MirBuilder access sites to type_ctx.* (manual, 40+ files) - Removed 3 deprecated fields (value_types, value_kinds, value_origin_newbox) - Removed 2 sync helpers (sync_type_ctx_to_legacy, sync_legacy_to_type_ctx) - Verified TypeFactsBox, CalleeGuardBox unchanged (no false positives) ## Tests - cargo test --release --lib: 1029/1033 PASS - TypeFactsBox integration: PASS (borrowed references unchanged) - Deprecation warnings: 456 → 255 (-201, -44%) ## Safety Verification ✅ TypeFactsBox unchanged (still uses &'a BTreeMap borrowed references) ✅ CalleeGuardBox unchanged ✅ CalleeResolverBox unchanged ✅ BoxCompilationContext unchanged Phase 2 Progress: 3/7 contexts complete (43%) - ✅ MetadataContext - ✅ CoreContext - ✅ TypeContext (this commit) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -148,14 +148,6 @@ pub struct MirBuilder {
|
||||
#[allow(dead_code)]
|
||||
pub(super) pending_phis: Vec<(BasicBlockId, ValueId, String)>,
|
||||
|
||||
/// [DEPRECATED] Origin tracking for simple optimizations (e.g., object.method after new)
|
||||
/// Maps a ValueId to the class name if it was produced by NewBox of that class
|
||||
/// 注意: compilation_contextがSomeの場合は使用されません
|
||||
/// Phase 136: Moved to type_ctx.value_origin_newbox (backward compat wrapper)
|
||||
// Phase 25.1: HashMap → BTreeMap(決定性確保)
|
||||
#[deprecated(note = "Use type_ctx.value_origin_newbox instead")]
|
||||
pub(super) value_origin_newbox: BTreeMap<ValueId, String>,
|
||||
|
||||
/// [DEPRECATED] Names of user-defined boxes declared in the current module
|
||||
/// Phase 136 Step 7/7: Moved to comp_ctx.user_defined_boxes (backward compat wrapper)
|
||||
#[deprecated(note = "Use comp_ctx.user_defined_boxes instead")]
|
||||
@ -180,21 +172,6 @@ pub struct MirBuilder {
|
||||
#[deprecated(note = "Use comp_ctx.field_origin_by_box instead")]
|
||||
pub(super) field_origin_by_box: HashMap<(String, String), String>,
|
||||
|
||||
/// [DEPRECATED] Optional per-value type annotations (MIR-level): ValueId -> MirType
|
||||
/// 注意: compilation_contextがSomeの場合は使用されません
|
||||
/// Phase 136: Moved to type_ctx.value_types (backward compat wrapper)
|
||||
// Phase 25.1: HashMap → BTreeMap(決定性確保)
|
||||
#[deprecated(note = "Use type_ctx.value_types instead")]
|
||||
pub(super) value_types: BTreeMap<ValueId, super::MirType>,
|
||||
|
||||
/// [DEPRECATED] Phase 26-A: ValueId型情報マップ(型安全性強化)
|
||||
/// ValueId -> MirValueKind のマッピング
|
||||
/// - GUARDバグ予防: ValueId(0)がParameterかLocalか区別可能
|
||||
/// - デフォルト: 未登録のValueIdはTemporary扱い
|
||||
/// Phase 136: Moved to type_ctx.value_kinds (backward compat wrapper)
|
||||
#[deprecated(note = "Use type_ctx.value_kinds instead")]
|
||||
pub(super) value_kinds: HashMap<ValueId, super::MirValueKind>,
|
||||
|
||||
/// [DEPRECATED] 関数スコープの SlotRegistry(観測専用)
|
||||
/// Phase 136 Step 7/7: Moved to comp_ctx.current_slot_registry (backward compat wrapper)
|
||||
/// - current_function と同じライフサイクルを持つよ。
|
||||
@ -362,14 +339,11 @@ impl MirBuilder {
|
||||
variable_map: BTreeMap::new(), // Phase 25.1: 決定性確保 (backward compat)
|
||||
lexical_scope_stack: Vec::new(),
|
||||
pending_phis: Vec::new(),
|
||||
value_origin_newbox: BTreeMap::new(), // Phase 25.1: 決定性確保 (backward compat)
|
||||
user_defined_boxes: HashSet::new(),
|
||||
weak_fields_by_box: HashMap::new(),
|
||||
property_getters_by_box: HashMap::new(),
|
||||
field_origin_class: HashMap::new(),
|
||||
field_origin_by_box: HashMap::new(),
|
||||
value_types: BTreeMap::new(), // Phase 25.1: 決定性確保 (backward compat)
|
||||
value_kinds: HashMap::new(), // Phase 26-A: ValueId型安全化 (backward compat)
|
||||
current_slot_registry: None,
|
||||
type_registry: type_registry::TypeRegistry::new(),
|
||||
plugin_method_sigs,
|
||||
@ -411,23 +385,6 @@ impl MirBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
// ---- Phase 136: TypeContext synchronization helpers ----
|
||||
/// Sync type_ctx changes back to legacy fields (backward compatibility)
|
||||
#[allow(deprecated)]
|
||||
fn sync_type_ctx_to_legacy(&mut self) {
|
||||
self.value_types = self.type_ctx.value_types.clone();
|
||||
self.value_kinds = self.type_ctx.value_kinds.clone();
|
||||
self.value_origin_newbox = self.type_ctx.value_origin_newbox.clone();
|
||||
}
|
||||
|
||||
/// Sync legacy field changes to type_ctx (backward compatibility)
|
||||
#[allow(deprecated)]
|
||||
fn sync_legacy_to_type_ctx(&mut self) {
|
||||
self.type_ctx.value_types = self.value_types.clone();
|
||||
self.type_ctx.value_kinds = self.value_kinds.clone();
|
||||
self.type_ctx.value_origin_newbox = self.value_origin_newbox.clone();
|
||||
}
|
||||
|
||||
// ---- Phase 136 Step 3/7: ScopeContext synchronization helpers ----
|
||||
/// Sync scope_ctx changes back to legacy fields (backward compatibility)
|
||||
#[allow(deprecated)]
|
||||
@ -728,7 +685,7 @@ impl MirBuilder {
|
||||
};
|
||||
// Annotate type
|
||||
if let Some(ty) = ty_for_dst {
|
||||
self.value_types.insert(dst, ty);
|
||||
self.type_ctx.value_types.insert(dst, ty);
|
||||
}
|
||||
|
||||
Ok(dst)
|
||||
@ -1099,7 +1056,7 @@ impl MirBuilder {
|
||||
effects: EffectMask::PURE,
|
||||
})?;
|
||||
// 型注釈(最小)
|
||||
self.value_types
|
||||
self.type_ctx.value_types
|
||||
.insert(dst, super::MirType::Box(class.clone()));
|
||||
return Ok(dst);
|
||||
}
|
||||
@ -1117,7 +1074,7 @@ impl MirBuilder {
|
||||
dst,
|
||||
value: ConstValue::Integer(n),
|
||||
})?;
|
||||
self.value_types.insert(dst, super::MirType::Integer);
|
||||
self.type_ctx.value_types.insert(dst, super::MirType::Integer);
|
||||
return Ok(dst);
|
||||
}
|
||||
}
|
||||
@ -1142,11 +1099,11 @@ impl MirBuilder {
|
||||
})?;
|
||||
// Phase 15.5: Unified box type handling
|
||||
// All boxes (including former core boxes) are treated uniformly as Box types
|
||||
self.value_types
|
||||
self.type_ctx.value_types
|
||||
.insert(dst, super::MirType::Box(class.clone()));
|
||||
|
||||
// Record origin for optimization: dst was created by NewBox of class
|
||||
self.value_origin_newbox.insert(dst, class.clone());
|
||||
self.type_ctx.value_origin_newbox.insert(dst, class.clone());
|
||||
|
||||
// birth 呼び出し(Builder 正規化)
|
||||
// 優先: 低下済みグローバル関数 `<Class>.birth/Arity`(Arity は me を含まない)
|
||||
@ -1215,18 +1172,18 @@ impl MirBuilder {
|
||||
/// Phase 136 P0: Use SSOT allocator (next_value_id) to respect function context
|
||||
pub fn new_typed_value(&mut self, kind: super::MirValueKind) -> super::TypedValueId {
|
||||
let id = self.next_value_id();
|
||||
self.value_kinds.insert(id, kind);
|
||||
self.type_ctx.value_kinds.insert(id, kind);
|
||||
super::TypedValueId::new(id, kind)
|
||||
}
|
||||
|
||||
/// 既存ValueIdの型情報を取得
|
||||
pub fn get_value_kind(&self, id: ValueId) -> Option<super::MirValueKind> {
|
||||
self.value_kinds.get(&id).copied()
|
||||
self.type_ctx.value_kinds.get(&id).copied()
|
||||
}
|
||||
|
||||
/// 既存ValueIdに型情報を後付け(レガシー互換用)
|
||||
pub fn register_value_kind(&mut self, id: ValueId, kind: super::MirValueKind) {
|
||||
self.value_kinds.insert(id, kind);
|
||||
self.type_ctx.value_kinds.insert(id, kind);
|
||||
}
|
||||
|
||||
/// 型安全なパラメータ判定(ValueIdベース) - GUARD Bug Prevention
|
||||
|
||||
Reference in New Issue
Block a user