Make variant_fields inner an IndexVec

This commit is contained in:
Tyler Mandry 2019-05-03 14:25:22 -07:00
parent 9ef2c30a1a
commit f7c2f2475a
3 changed files with 4 additions and 4 deletions

View File

@ -2997,7 +2997,7 @@ pub struct UnsafetyCheckResult {
/// The layout of generator state /// The layout of generator state
#[derive(Clone, Debug, RustcEncodable, RustcDecodable, HashStable)] #[derive(Clone, Debug, RustcEncodable, RustcDecodable, HashStable)]
pub struct GeneratorLayout<'tcx> { pub struct GeneratorLayout<'tcx> {
pub variant_fields: IndexVec<VariantIdx, Vec<LocalDecl<'tcx>>>, pub variant_fields: IndexVec<VariantIdx, IndexVec<Field, LocalDecl<'tcx>>>,
} }
#[derive(Clone, Debug, RustcEncodable, RustcDecodable, HashStable)] #[derive(Clone, Debug, RustcEncodable, RustcDecodable, HashStable)]

View File

@ -1598,7 +1598,7 @@ fn field_name(&self, i: usize) -> String {
Some(variant.fields[i].ident.to_string()), Some(variant.fields[i].ident.to_string()),
VariantInfo::Generator(_, generator_layout, variant_index) => { VariantInfo::Generator(_, generator_layout, variant_index) => {
let variant_decls = &generator_layout.variant_fields[*variant_index]; let variant_decls = &generator_layout.variant_fields[*variant_index];
variant_decls[i].name.map(|name| name.to_string()) variant_decls[i.into()].name.map(|name| name.to_string())
} }
_ => None, _ => None,
}; };

View File

@ -58,7 +58,7 @@
use rustc::ty::layout::VariantIdx; use rustc::ty::layout::VariantIdx;
use rustc::ty::subst::SubstsRef; use rustc::ty::subst::SubstsRef;
use rustc_data_structures::fx::FxHashMap; use rustc_data_structures::fx::FxHashMap;
use rustc_data_structures::indexed_vec::Idx; use rustc_data_structures::indexed_vec::{Idx, IndexVec};
use rustc_data_structures::bit_set::BitSet; use rustc_data_structures::bit_set::BitSet;
use std::borrow::Cow; use std::borrow::Cow;
use std::iter; use std::iter;
@ -560,7 +560,7 @@ fn compute_layout<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
}).unzip(); }).unzip();
// Put every var in each variant, for now. // Put every var in each variant, for now.
let empty_variants = iter::repeat(vec![]).take(3); let empty_variants = iter::repeat(IndexVec::new()).take(3);
let state_variants = iter::repeat(vars).take(suspending_blocks.count()); let state_variants = iter::repeat(vars).take(suspending_blocks.count());
let layout = GeneratorLayout { let layout = GeneratorLayout {
variant_fields: empty_variants.chain(state_variants).collect() variant_fields: empty_variants.chain(state_variants).collect()