about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNick Cameron <ncameron@mozilla.com>2017-08-02 15:46:59 +1200
committerNick Cameron <ncameron@mozilla.com>2017-08-02 15:46:59 +1200
commit4e6c1dddff853703bd31a8f3390e8aa2d4856fe8 (patch)
treeb6ae5d2e2e885cce83c42bf22e82e616f5474f1a
parent640cfc852ae17d51a2f5e75fcae9a93431a3b38c (diff)
downloadrust-4e6c1dddff853703bd31a8f3390e8aa2d4856fe8.tar.gz
rust-4e6c1dddff853703bd31a8f3390e8aa2d4856fe8.zip
save-analysis: only emit public fields in value of a struct if the config permits
-rw-r--r--src/librustc_save_analysis/dump_visitor.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs
index f74e8cb2160..4cfd570adea 100644
--- a/src/librustc_save_analysis/dump_visitor.rs
+++ b/src/librustc_save_analysis/dump_visitor.rs
@@ -560,14 +560,20 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
         let (value, fields) =
             if let ast::ItemKind::Struct(ast::VariantData::Struct(ref fields, _), _) = item.node
         {
+            let include_priv_fields = !self.save_ctxt.config.pub_only;
             let fields_str = fields.iter()
                                    .enumerate()
-                                   .map(|(i, f)| f.ident.map(|i| i.to_string())
-                                                  .unwrap_or(i.to_string()))
+                                   .filter_map(|(i, f)| {
+                                        if include_priv_fields || f.vis == ast::Visibility::Public {
+                                            f.ident.map(|i| i.to_string()).or_else(|| Some(i.to_string()))
+                                        } else {
+                                            None
+                                        }
+                                   })
                                    .collect::<Vec<_>>()
                                    .join(", ");
-            (format!("{} {{ {} }}", name, fields_str),
-             fields.iter().map(|f| ::id_from_node_id(f.id, &self.save_ctxt)).collect())
+            let value = format!("{} {{ {} }}", name, fields_str);
+            (value, fields.iter().map(|f| ::id_from_node_id(f.id, &self.save_ctxt)).collect())
         } else {
             (String::new(), vec![])
         };