From 2df4f2a126ec817666c66dd94f25411da1789243 Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Sat, 1 Oct 2016 04:24:19 +0000 Subject: [PATCH] Add field `backtrace: SyntaxContext` to `ExpansionData`. --- src/librustc_resolve/macros.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index 4068c34a7f90..84bed07fe711 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -18,7 +18,7 @@ use syntax::errors::DiagnosticBuilder; use syntax::ext::base::{self, MultiModifier, MultiDecorator, MultiItemModifier}; use syntax::ext::base::{NormalTT, SyntaxExtension}; use syntax::ext::expand::{Expansion, Invocation, InvocationKind}; -use syntax::ext::hygiene::Mark; +use syntax::ext::hygiene::{Mark, SyntaxContext}; use syntax::ext::tt::macro_rules; use syntax::parse::token::intern; use syntax::util::lev_distance::find_best_match_for_name; @@ -30,6 +30,7 @@ pub struct NameBinding { #[derive(Clone)] pub struct ExpansionData<'a> { + backtrace: SyntaxContext, pub module: Module<'a>, def_index: DefIndex, // True if this expansion is in a `const_integer` position, for example `[u32; m!()]`. @@ -40,6 +41,7 @@ pub struct ExpansionData<'a> { impl<'a> ExpansionData<'a> { pub fn root(graph_root: Module<'a>) -> Self { ExpansionData { + backtrace: SyntaxContext::empty(), module: graph_root, def_index: CRATE_DEF_INDEX, const_integer: false, @@ -56,6 +58,7 @@ impl<'a> base::Resolver for Resolver<'a> { let mark = Mark::fresh(); let module = self.module_map[&id]; self.expansion_data.insert(mark, ExpansionData { + backtrace: SyntaxContext::empty(), module: module, def_index: module.def_id().unwrap().index, const_integer: false, @@ -171,9 +174,10 @@ impl<'a> Resolver<'a> { fn collect_def_ids(&mut self, mark: Mark, expansion: &Expansion) { let expansion_data = &mut self.expansion_data; - let ExpansionData { def_index, const_integer, module } = expansion_data[&mark]; + let ExpansionData { backtrace, def_index, const_integer, module } = expansion_data[&mark]; let visit_macro_invoc = &mut |invoc: map::MacroInvocationData| { expansion_data.entry(invoc.mark).or_insert(ExpansionData { + backtrace: backtrace.apply_mark(invoc.mark), def_index: invoc.def_index, const_integer: invoc.const_integer, module: module,