]> git.lizzy.rs Git - rust.git/commitdiff
pull out encode_field
authorNiko Matsakis <niko@alum.mit.edu>
Fri, 12 Aug 2016 20:18:22 +0000 (16:18 -0400)
committerNiko Matsakis <niko@alum.mit.edu>
Wed, 17 Aug 2016 14:38:49 +0000 (10:38 -0400)
src/librustc_metadata/encoder.rs

index 8c1e551d030d093c006d18dacd0f2aaa19d363cf..f17613cddefdbffe025a45c6927bb14573f7491d 100644 (file)
@@ -203,10 +203,8 @@ fn encode_enum_variant_infos(&mut self,
         debug!("encode_enum_variant_info(enum_did={:?})", enum_did);
         let ecx = self.ecx();
         let def = ecx.tcx.lookup_adt_def(enum_did);
+        self.encode_fields(enum_did);
         for (i, variant) in def.variants.iter().enumerate() {
-            for field in &variant.fields {
-                self.encode_field(field);
-            }
             self.record(variant.did, |this| this.encode_enum_variant_info(enum_did, i, vis));
         }
     }
@@ -415,25 +413,42 @@ fn encode_item_sort(rbml_w: &mut Encoder, sort: char) {
 }
 
 impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
+    fn encode_fields(&mut self,
+                     adt_def_id: DefId) {
+        let def = self.ecx.tcx.lookup_adt_def(adt_def_id);
+        for (variant_index, variant) in def.variants.iter().enumerate() {
+            for (field_index, field) in variant.fields.iter().enumerate() {
+                self.record(field.did, |this| this.encode_field(adt_def_id,
+                                                                variant_index,
+                                                                field_index));
+            }
+        }
+    }
+}
+
+impl<'a, 'tcx, 'encoder> ItemContentBuilder<'a, 'tcx, 'encoder> {
     fn encode_field(&mut self,
-                    field: ty::FieldDef<'tcx>) {
+                    adt_def_id: DefId,
+                    variant_index: usize,
+                    field_index: usize) {
         let ecx = self.ecx();
+        let def = ecx.tcx.lookup_adt_def(adt_def_id);
+        let variant = &def.variants[variant_index];
+        let field = &variant.fields[field_index];
 
         let nm = field.name;
         let id = ecx.local_id(field.did);
+        debug!("encode_field: encoding {} {}", nm, id);
 
-        self.record(field.did, |this| {
-            debug!("encode_field: encoding {} {}", nm, id);
-            this.encode_struct_field_family(field.vis);
-            encode_name(this.rbml_w, nm);
-            this.encode_bounds_and_type_for_item(id);
-            encode_def_id_and_key(ecx, this.rbml_w, field.did);
+        self.encode_struct_field_family(field.vis);
+        encode_name(self.rbml_w, nm);
+        self.encode_bounds_and_type_for_item(id);
+        encode_def_id_and_key(ecx, self.rbml_w, field.did);
 
-            let stab = ecx.tcx.lookup_stability(field.did);
-            let depr = ecx.tcx.lookup_deprecation(field.did);
-            encode_stability(this.rbml_w, stab);
-            encode_deprecation(this.rbml_w, depr);
-        });
+        let stab = ecx.tcx.lookup_stability(field.did);
+        let depr = ecx.tcx.lookup_deprecation(field.did);
+        encode_stability(self.rbml_w, stab);
+        encode_deprecation(self.rbml_w, depr);
     }
 }
 
@@ -1064,9 +1079,7 @@ fn encode_addl_struct_info(&mut self,
         let def = ecx.tcx.lookup_adt_def(def_id);
         let variant = def.struct_variant();
 
-        for field in &variant.fields {
-            self.encode_field(field);
-        }
+        self.encode_fields(def_id);
 
         // If this is a tuple-like struct, encode the type of the constructor.
         match variant.kind {