From 84d75dbd7ed128f8694b8a9807cffd5794a0c918 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Tue, 5 Feb 2019 21:49:53 +0100 Subject: [PATCH] fix node classification --- src/librustc/hir/map/mod.rs | 7 ++----- src/librustc_mir/util/pretty.rs | 27 +++++++++++++++++---------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 8db4e52f3d6..955f834e403 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -371,14 +371,11 @@ impl<'hir> Map<'hir> { let def_id = self.local_def_id(variant.node.data.id()); Some(Def::Variant(def_id)) } - Node::AnonConst(item) => { - let def_id = self.local_def_id(item.id); - Some(Def::Const(def_id)) - } Node::StructCtor(variant) => { let def_id = self.local_def_id(variant.id()); - Some(Def::Fn(def_id)) + Some(Def::StructCtor(def_id, def::CtorKind::from_hir(variant))) } + Node::AnonConst(_) | Node::Field(_) | Node::Expr(_) | Node::Stmt(_) | diff --git a/src/librustc_mir/util/pretty.rs b/src/librustc_mir/util/pretty.rs index ae07aad3117..7bbce405a84 100644 --- a/src/librustc_mir/util/pretty.rs +++ b/src/librustc_mir/util/pretty.rs @@ -595,23 +595,28 @@ fn write_mir_sig( use rustc::hir::def::Def; trace!("write_mir_sig: {:?}", src.instance); - let descr = tcx.describe_def(src.def_id()).unwrap(); + let descr = tcx.describe_def(src.def_id()); match (descr, src.promoted) { - (_, Some(i)) => write!(w, "{:?} in", i)?, - (Def::Fn(_), _) | (Def::Method(_), _) => write!(w, "fn")?, - (Def::Const(_), _) => write!(w, "const")?, - (Def::Static(_, /*is_mutbl*/false), _) => write!(w, "static")?, - (Def::Static(_, /*is_mutbl*/true), _) => write!(w, "static mut")?, + (_, Some(i)) => write!(w, "{:?} in ", i)?, + (Some(Def::Fn(_)), _) | (Some(Def::Method(_)), _) => write!(w, "fn ")?, + (Some(Def::StructCtor(..)), _) => write!(w, "struct ")?, + (Some(Def::Const(_)), _) => write!(w, "const ")?, + (Some(Def::Static(_, /*is_mutbl*/false)), _) => write!(w, "static ")?, + (Some(Def::Static(_, /*is_mutbl*/true)), _) => write!(w, "static mut ")?, + (None, _) => {}, // things like anon const, not an item _ => bug!("Unexpected def description {:?}", descr), } item_path::with_forced_impl_filename_line(|| { // see notes on #41697 elsewhere - write!(w, " {}", tcx.item_path_str(src.def_id())) + write!(w, "{}", tcx.item_path_str(src.def_id())) })?; match (descr, src.promoted) { - (Def::Fn(_), None) | (Def::Method(_), None) => { + (Some(Def::Fn(_)), None) | + (Some(Def::Method(_)), None) | + (Some(Def::StructCtor(..)), None) => + { write!(w, "(")?; // fn argument types. @@ -624,11 +629,10 @@ fn write_mir_sig( write!(w, ") -> {}", mir.return_ty())?; } - (Def::Const(_), _) | (Def::Static(_, _), _) | (_, Some(_)) => { + _ => { assert_eq!(mir.arg_count, 0); write!(w, ": {} =", mir.return_ty())?; } - _ => bug!("Unexpected def description {:?}", descr), } if let Some(yield_ty) = mir.yield_ty { @@ -636,6 +640,9 @@ fn write_mir_sig( writeln!(w, "yields {}", yield_ty)?; } + write!(w, " ")?; + // Next thing that gets printed is the opening { + Ok(()) }