refactor: remove the tcx field in Tables

the only functionality of `Tables` is caching results. this commit moves calls to rustc queries from `Tables` to `SmirCtxt`.
This commit is contained in:
Makai
2025-05-06 12:41:34 +08:00
parent 6916089d7c
commit 45cf29d651
8 changed files with 100 additions and 119 deletions

View File

@@ -432,7 +432,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> {
let tables_ref = &mut *tables;
let cx = &*self.cx.borrow();
let def = item.internal(tables_ref, cx);
cx.has_body(def, tables_ref)
cx.has_body(def)
}
fn foreign_modules(&self, crate_num: CrateNum) -> Vec<ForeignModuleDef> {
@@ -448,18 +448,16 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> {
fn crate_functions(&self, crate_num: CrateNum) -> Vec<FnDef> {
let mut tables = self.tables.borrow_mut();
let cx = &*self.cx.borrow();
let tables_ref = &mut *tables;
let krate = crate_num.internal(tables_ref, cx);
cx.crate_functions(krate, tables_ref).iter().map(|did| tables.fn_def(*did)).collect()
let krate = crate_num.internal(&mut *tables, cx);
cx.crate_functions(krate).iter().map(|did| tables.fn_def(*did)).collect()
}
/// Retrieve all static items defined in this crate.
fn crate_statics(&self, crate_num: CrateNum) -> Vec<StaticDef> {
let mut tables = self.tables.borrow_mut();
let cx = &*self.cx.borrow();
let tables_ref = &mut *tables;
let krate = crate_num.internal(tables_ref, cx);
cx.crate_statics(krate, tables_ref).iter().map(|did| tables.static_def(*did)).collect()
let krate = crate_num.internal(&mut *tables, cx);
cx.crate_statics(krate).iter().map(|did| tables.static_def(*did)).collect()
}
fn foreign_module(&self, mod_def: ForeignModuleDef) -> ForeignModule {
@@ -908,7 +906,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> {
let mut tables = self.tables.borrow_mut();
let cx = &*self.cx.borrow();
let instance = tables.instances[instance];
cx.instance_body(instance, &mut *tables).map(|body| body.stable(&mut *tables, cx))
cx.instance_body(instance).map(|body| body.stable(&mut *tables, cx))
}
/// Get the instance type with generic instantiations applied and lifetimes erased.
@@ -1078,7 +1076,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> {
let mut tables = self.tables.borrow_mut();
let cx = &*self.cx.borrow();
let instance = tables.instances[def];
cx.instance_abi(instance, &mut *tables).map(|fn_abi| fn_abi.stable(&mut *tables, cx))
cx.instance_abi(instance).map(|fn_abi| fn_abi.stable(&mut *tables, cx))
}
/// Get the ABI of a function pointer.
@@ -1086,7 +1084,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> {
let mut tables = self.tables.borrow_mut();
let cx = &*self.cx.borrow();
let sig = fn_ptr.internal(&mut *tables, cx);
cx.fn_ptr_abi(sig, &mut *tables).map(|fn_abi| fn_abi.stable(&mut *tables, cx))
cx.fn_ptr_abi(sig).map(|fn_abi| fn_abi.stable(&mut *tables, cx))
}
/// Get the layout of a type.
@@ -1094,7 +1092,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> {
let mut tables = self.tables.borrow_mut();
let cx = &*self.cx.borrow();
let internal_ty = ty.internal(&mut *tables, cx);
cx.ty_layout(internal_ty, &mut *tables).map(|layout| layout.stable(&mut *tables, cx))
cx.ty_layout(internal_ty).map(|layout| layout.stable(&mut *tables, cx))
}
/// Get the layout shape.