diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2017-08-02 15:46:59 +1200 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2017-08-02 15:46:59 +1200 |
| commit | 4e6c1dddff853703bd31a8f3390e8aa2d4856fe8 (patch) | |
| tree | b6ae5d2e2e885cce83c42bf22e82e616f5474f1a | |
| parent | 640cfc852ae17d51a2f5e75fcae9a93431a3b38c (diff) | |
| download | rust-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.rs | 14 |
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![]) }; |
