diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2018-10-31 11:05:58 +1300 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2018-10-31 11:53:38 +1300 |
| commit | 4895deaeea03d8d1a7329a0ff55849201a75a8b6 (patch) | |
| tree | 49e62a729258706f444b0a605ee32f7ea89300ce | |
| parent | f586ac9ef9266f6e257c3ec41e126336a543025f (diff) | |
| download | rust-4895deaeea03d8d1a7329a0ff55849201a75a8b6.tar.gz rust-4895deaeea03d8d1a7329a0ff55849201a75a8b6.zip | |
save-analysis: make sure we save the def for the last segment of a path
| -rw-r--r-- | src/librustc/hir/lowering.rs | 11 | ||||
| -rw-r--r-- | src/librustc_resolve/lib.rs | 22 | ||||
| -rw-r--r-- | src/librustc_save_analysis/dump_visitor.rs | 3 |
3 files changed, 18 insertions, 18 deletions
diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index c3c65816b26..b6621e0962c 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -1754,7 +1754,6 @@ impl<'a> LoweringContext<'a> { &mut self, def: Def, p: &Path, - ident: Option<Ident>, param_mode: ParamMode, explicit_owner: Option<NodeId>, ) -> hir::Path { @@ -1773,7 +1772,6 @@ impl<'a> LoweringContext<'a> { explicit_owner, ) }) - .chain(ident.map(|ident| hir::PathSegment::from_ident(ident))) .collect(), span: p.span, } @@ -1781,7 +1779,7 @@ impl<'a> LoweringContext<'a> { fn lower_path(&mut self, id: NodeId, p: &Path, param_mode: ParamMode) -> hir::Path { let def = self.expect_full_def(id); - self.lower_path_extra(def, p, None, param_mode, None) + self.lower_path_extra(def, p, param_mode, None) } fn lower_path_segment( @@ -3014,7 +3012,7 @@ impl<'a> LoweringContext<'a> { self.with_hir_id_owner(new_node_id, |this| { let new_id = this.lower_node_id(new_node_id); let path = - this.lower_path_extra(def, &path, None, ParamMode::Explicit, None); + this.lower_path_extra(def, &path, ParamMode::Explicit, None); let item = hir::ItemKind::Use(P(path), hir::UseKind::Single); let vis_kind = match vis.node { hir::VisibilityKind::Public => hir::VisibilityKind::Public, @@ -3053,7 +3051,7 @@ impl<'a> LoweringContext<'a> { } let path = - P(self.lower_path_extra(ret_def, &path, None, ParamMode::Explicit, None)); + P(self.lower_path_extra(ret_def, &path, ParamMode::Explicit, None)); hir::ItemKind::Use(path, hir::UseKind::Single) } UseTreeKind::Glob => { @@ -3140,7 +3138,7 @@ impl<'a> LoweringContext<'a> { // the stability of `use a::{};`, to avoid it showing up as // a re-export by accident when `pub`, e.g. in documentation. let def = self.expect_full_def_from_use(id).next().unwrap_or(Def::Err); - let path = P(self.lower_path_extra(def, &prefix, None, ParamMode::Explicit, None)); + let path = P(self.lower_path_extra(def, &prefix, ParamMode::Explicit, None)); *vis = respan(prefix.span.shrink_to_lo(), hir::VisibilityKind::Inherited); hir::ItemKind::Use(path, hir::UseKind::ListStem) } @@ -4550,7 +4548,6 @@ impl<'a> LoweringContext<'a> { path: P(self.lower_path_extra( def, path, - None, ParamMode::Explicit, explicit_owner, )), diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index ebd87e87ff6..094488f3af3 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -3589,7 +3589,17 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> { ); for (i, &Segment { ident, id }) in path.iter().enumerate() { - debug!("resolve_path ident {} {:?}", i, ident); + debug!("resolve_path ident {} {:?} {:?}", i, ident, id); + let record_segment_def = |this: &mut Self, def| { + if record_used { + if let Some(id) = id { + if !this.def_map.contains_key(&id) { + assert!(id != ast::DUMMY_NODE_ID, "Trying to resolve dummy id"); + this.record_def(id, PathResolution::new(def)); + } + } + } + }; let is_last = i == path.len() - 1; let ns = if is_last { opt_ns.unwrap_or(TypeNS) } else { TypeNS }; @@ -3673,6 +3683,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> { // we found a local variable or type param Some(LexicalScopeBinding::Def(def)) if opt_ns == Some(TypeNS) || opt_ns == Some(ValueNS) => { + record_segment_def(self, def); return PathResult::NonModule(PathResolution::with_unresolved_segments( def, path.len() - 1 )); @@ -3690,14 +3701,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> { let maybe_assoc = opt_ns != Some(MacroNS) && PathSource::Type.is_expected(def); if let Some(next_module) = binding.module() { module = Some(ModuleOrUniformRoot::Module(next_module)); - if record_used { - if let Some(id) = id { - if !self.def_map.contains_key(&id) { - assert!(id != ast::DUMMY_NODE_ID, "Trying to resolve dummy id"); - self.record_def(id, PathResolution::new(def)); - } - } - } + record_segment_def(self, def); } else if def == Def::ToolMod && i + 1 != path.len() { let def = Def::NonMacroAttr(NonMacroAttrKind::Tool); return PathResult::NonModule(PathResolution::new(def)); diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index c0b718e4863..839b8956b4c 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -771,8 +771,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { } fn process_path(&mut self, id: NodeId, path: &'l ast::Path) { - debug!("process_path {:?}", path); - if generated_code(path.span) { + if self.span.filter_generated(path.span) { return; } self.dump_path_ref(id, path); |
