about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorJason Orendorff <jason.orendorff@gmail.com>2017-05-19 13:43:06 -0500
committerJason Orendorff <jason.orendorff@gmail.com>2017-05-19 13:43:06 -0500
commitf8b66a001d74946565ee2e7df58afc9918455da1 (patch)
tree7da3516b0e2416edd3b0cd526a6a823df051a9fd /src/libsyntax
parentb21577e1e80ed7a2470cd3402004b80d1bf0f30d (diff)
downloadrust-f8b66a001d74946565ee2e7df58afc9918455da1.tar.gz
rust-f8b66a001d74946565ee2e7df58afc9918455da1.zip
trace_macro: Show both the macro call and its expansion. #42072.
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/tt/macro_rules.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs
index a208f530602..d3da32304aa 100644
--- a/src/libsyntax/ext/tt/macro_rules.rs
+++ b/src/libsyntax/ext/tt/macro_rules.rs
@@ -84,6 +84,12 @@ impl TTMacroExpander for MacroRulesMacroExpander {
     }
 }
 
+fn trace_macros_note(cx: &mut ExtCtxt, sp: Span, message: String) {
+    let sp = sp.macro_backtrace().last().map(|trace| trace.call_site).unwrap_or(sp);
+    let mut values: &mut Vec<String> = cx.expansions.entry(sp).or_insert_with(Vec::new);
+    values.push(message);
+}
+
 /// Given `lhses` and `rhses`, this is the new macro we create
 fn generic_extension<'cx>(cx: &'cx mut ExtCtxt,
                           sp: Span,
@@ -93,9 +99,7 @@ fn generic_extension<'cx>(cx: &'cx mut ExtCtxt,
                           rhses: &[quoted::TokenTree])
                           -> Box<MacResult+'cx> {
     if cx.trace_macros() {
-        let sp = sp.macro_backtrace().last().map(|trace| trace.call_site).unwrap_or(sp);
-        let mut values: &mut Vec<String> = cx.expansions.entry(sp).or_insert_with(Vec::new);
-        values.push(format!("expands to `{}! {{ {} }}`", name, arg));
+        trace_macros_note(cx, sp, format!("expanding `{}! {{ {} }}`", name, arg));
     }
 
     // Which arm's failure should we report? (the one furthest along)
@@ -117,6 +121,11 @@ fn generic_extension<'cx>(cx: &'cx mut ExtCtxt,
                 };
                 // rhs has holes ( `$id` and `$(...)` that need filled)
                 let tts = transcribe(&cx.parse_sess.span_diagnostic, Some(named_matches), rhs);
+
+                if cx.trace_macros() {
+                    trace_macros_note(cx, sp, format!("to `{}`", tts));
+                }
+
                 let directory = Directory {
                     path: cx.current_expansion.module.directory.clone(),
                     ownership: cx.current_expansion.directory_ownership,