diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2013-09-13 20:54:52 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2013-09-13 20:54:52 -0700 |
| commit | 6c4c5f56313b3b48dc42297ca927f2a43715e19f (patch) | |
| tree | f028f5ee9d5b1578c7f388dc50e00f724fb3d7d9 /src/libsyntax | |
| parent | 7c8f503ac543e0ffe18986b8d6f8548df21cefa3 (diff) | |
| download | rust-6c4c5f56313b3b48dc42297ca927f2a43715e19f.tar.gz rust-6c4c5f56313b3b48dc42297ca927f2a43715e19f.zip | |
Pass a more proper span to the syntax expanders
Closes #5794
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 2cebae550fd..ee62f35a4e4 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -76,8 +76,26 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv, // mark before: let marked_before = mark_tts(*tts,fm); let marked_ctxt = new_mark(fm, ctxt); + + // The span that we pass to the expanders we want to + // be the root of the call stack. That's the most + // relevant span and it's the actual invocation of + // the macro. + let mut relevant_info = cx.backtrace(); + let mut einfo = relevant_info.unwrap(); + loop { + match relevant_info { + None => { break } + Some(e) => { + einfo = e; + relevant_info = einfo.call_site.expn_info; + } + } + } + let expanded = - match expandfun(cx, mac.span, marked_before, marked_ctxt) { + match expandfun(cx, einfo.call_site, + marked_before, marked_ctxt) { MRExpr(e) => e, MRAny(expr_maker,_,_) => expr_maker(), _ => { |
