Skip to content

Commit 413f074

Browse files
committed
remove generator_sigs from TypeckTables
1 parent d896981 commit 413f074

File tree

5 files changed

+21
-58
lines changed

5 files changed

+21
-58
lines changed

src/librustc/ty/context.rs

-23
Original file line numberDiff line numberDiff line change
@@ -360,8 +360,6 @@ pub struct TypeckTables<'tcx> {
360360
/// not all closures are present in the map.
361361
closure_kind_origins: ItemLocalMap<(Span, ast::Name)>,
362362

363-
generator_sigs: ItemLocalMap<Option<ty::GenSig<'tcx>>>,
364-
365363
generator_interiors: ItemLocalMap<ty::GeneratorInterior<'tcx>>,
366364

367365
/// For each fn, records the "liberated" types of its arguments
@@ -408,7 +406,6 @@ impl<'tcx> TypeckTables<'tcx> {
408406
pat_binding_modes: ItemLocalMap(),
409407
pat_adjustments: ItemLocalMap(),
410408
upvar_capture_map: FxHashMap(),
411-
generator_sigs: ItemLocalMap(),
412409
generator_interiors: ItemLocalMap(),
413410
closure_kind_origins: ItemLocalMap(),
414411
liberated_fn_sigs: ItemLocalMap(),
@@ -661,24 +658,6 @@ impl<'tcx> TypeckTables<'tcx> {
661658
}
662659
}
663660

664-
pub fn generator_sigs(&self)
665-
-> LocalTableInContext<Option<ty::GenSig<'tcx>>>
666-
{
667-
LocalTableInContext {
668-
local_id_root: self.local_id_root,
669-
data: &self.generator_sigs,
670-
}
671-
}
672-
673-
pub fn generator_sigs_mut(&mut self)
674-
-> LocalTableInContextMut<Option<ty::GenSig<'tcx>>>
675-
{
676-
LocalTableInContextMut {
677-
local_id_root: self.local_id_root,
678-
data: &mut self.generator_sigs,
679-
}
680-
}
681-
682661
pub fn generator_interiors(&self)
683662
-> LocalTableInContext<ty::GeneratorInterior<'tcx>>
684663
{
@@ -720,7 +699,6 @@ impl<'gcx> HashStable<StableHashingContext<'gcx>> for TypeckTables<'gcx> {
720699
ref used_trait_imports,
721700
tainted_by_errors,
722701
ref free_region_map,
723-
ref generator_sigs,
724702
ref generator_interiors,
725703
} = *self;
726704

@@ -757,7 +735,6 @@ impl<'gcx> HashStable<StableHashingContext<'gcx>> for TypeckTables<'gcx> {
757735
liberated_fn_sigs.hash_stable(hcx, hasher);
758736
fru_field_types.hash_stable(hcx, hasher);
759737
cast_kinds.hash_stable(hcx, hasher);
760-
generator_sigs.hash_stable(hcx, hasher);
761738
generator_interiors.hash_stable(hcx, hasher);
762739
used_trait_imports.hash_stable(hcx, hasher);
763740
tainted_by_errors.hash_stable(hcx, hasher);

src/librustc/ty/sty.rs

+13-9
Original file line numberDiff line numberDiff line change
@@ -335,16 +335,20 @@ impl<'tcx> ClosureSubsts<'tcx> {
335335
/// Return the "generator signature", which consists of its yield
336336
/// and return types.
337337
///
338-
/// NB. We treat this as a `PolyGenSig`, but since it only
339-
/// contains associated types of the generator, at present it
340-
/// never binds any regions.
338+
/// NB. Some bits of the code prefers to see this wrapped in a
339+
/// binder, but it never contains bound regions. Probably this
340+
/// function should be removed.
341341
pub fn generator_poly_sig(self, def_id: DefId, tcx: TyCtxt<'_, '_, '_>) -> PolyGenSig<'tcx> {
342-
ty::Binder(
343-
ty::GenSig {
344-
yield_ty: self.generator_yield_ty(def_id, tcx),
345-
return_ty: self.generator_return_ty(def_id, tcx),
346-
}
347-
)
342+
ty::Binder(self.generator_sig(def_id, tcx))
343+
}
344+
345+
/// Return the "generator signature", which consists of its yield
346+
/// and return types.
347+
pub fn generator_sig(self, def_id: DefId, tcx: TyCtxt<'_, '_, '_>) -> GenSig<'tcx> {
348+
ty::GenSig {
349+
yield_ty: self.generator_yield_ty(def_id, tcx),
350+
return_ty: self.generator_return_ty(def_id, tcx),
351+
}
348352
}
349353
}
350354

src/librustc_mir/build/mod.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ pub fn mir_build<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> Mir<'t
103103
Some((closure_self_ty(tcx, id, body_id), None))
104104
}
105105
ty::TyGenerator(..) => {
106-
let gen_ty = tcx.body_tables(body_id).node_id_to_type(fn_hir_id);
106+
let gen_ty = tcx.body_tables(body_id).node_id_to_type(fn_hir_id);
107107
Some((gen_ty, None))
108108
}
109109
_ => None,
@@ -127,7 +127,12 @@ pub fn mir_build<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> Mir<'t
127127
let arguments = implicit_argument.into_iter().chain(explicit_arguments);
128128

129129
let (yield_ty, return_ty) = if body.is_generator {
130-
let gen_sig = cx.tables().generator_sigs()[fn_hir_id].clone().unwrap();
130+
let gen_sig = match ty.sty {
131+
ty::TyGenerator(gen_def_id, gen_substs, ..) =>
132+
gen_substs.generator_sig(gen_def_id, tcx),
133+
_ =>
134+
span_bug!(tcx.hir.span(id), "generator w/o generator type: {:?}", ty),
135+
};
131136
(Some(gen_sig.yield_ty), gen_sig.return_ty)
132137
} else {
133138
(None, fn_sig.output())

src/librustc_typeck/check/mod.rs

+1-8
Original file line numberDiff line numberDiff line change
@@ -1037,21 +1037,14 @@ fn check_fn<'a, 'gcx, 'tcx>(inherited: &'a Inherited<'a, 'gcx, 'tcx>,
10371037

10381038
let fn_hir_id = fcx.tcx.hir.node_to_hir_id(fn_id);
10391039
let gen_ty = if can_be_generator && body.is_generator {
1040-
let gen_sig = ty::GenSig {
1041-
yield_ty: fcx.yield_ty.unwrap(),
1042-
return_ty: ret_ty,
1043-
};
1044-
inherited.tables.borrow_mut().generator_sigs_mut().insert(fn_hir_id, Some(gen_sig));
1045-
10461040
let witness = fcx.next_ty_var(TypeVariableOrigin::MiscVariable(span));
10471041
fcx.deferred_generator_interiors.borrow_mut().push((body.id(), witness));
10481042
let interior = ty::GeneratorInterior::new(witness);
10491043

10501044
inherited.tables.borrow_mut().generator_interiors_mut().insert(fn_hir_id, interior);
10511045

1052-
Some(GeneratorTypes { yield_ty: gen_sig.yield_ty, interior: interior })
1046+
Some(GeneratorTypes { yield_ty: fcx.yield_ty.unwrap(), interior: interior })
10531047
} else {
1054-
inherited.tables.borrow_mut().generator_sigs_mut().insert(fn_hir_id, None);
10551048
None
10561049
};
10571050
inherited.tables.borrow_mut().liberated_fn_sigs_mut().insert(fn_hir_id, fn_sig);

src/librustc_typeck/check/writeback.rs

-16
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
4646
wbcx.visit_anon_types();
4747
wbcx.visit_cast_types();
4848
wbcx.visit_free_region_map();
49-
wbcx.visit_generator_sigs();
5049
wbcx.visit_generator_interiors();
5150

5251
let used_trait_imports = mem::replace(&mut self.tables.borrow_mut().used_trait_imports,
@@ -391,21 +390,6 @@ impl<'cx, 'gcx, 'tcx> WritebackCx<'cx, 'gcx, 'tcx> {
391390
}
392391
}
393392

394-
fn visit_generator_sigs(&mut self) {
395-
let common_local_id_root = self.fcx.tables.borrow().local_id_root.unwrap();
396-
for (&id, gen_sig) in self.fcx.tables.borrow().generator_sigs().iter() {
397-
let hir_id = hir::HirId {
398-
owner: common_local_id_root.index,
399-
local_id: id,
400-
};
401-
let gen_sig = gen_sig.map(|s| ty::GenSig {
402-
yield_ty: self.resolve(&s.yield_ty, &hir_id),
403-
return_ty: self.resolve(&s.return_ty, &hir_id),
404-
});
405-
self.tables.generator_sigs_mut().insert(hir_id, gen_sig);
406-
}
407-
}
408-
409393
fn visit_liberated_fn_sigs(&mut self) {
410394
let fcx_tables = self.fcx.tables.borrow();
411395
debug_assert_eq!(fcx_tables.local_id_root, self.tables.local_id_root);

0 commit comments

Comments
 (0)