Skip to content

Commit 29c97c5

Browse files
committed
---
yaml --- r: 145100 b: refs/heads/try2 c: 6406138 h: refs/heads/master v: v3
1 parent 41ad0b1 commit 29c97c5

File tree

2 files changed

+26
-16
lines changed

2 files changed

+26
-16
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: fd8c05ccc99642ed6be3516f24c8d876f2046eb4
8+
refs/heads/try2: 640613892fc5ab055853b48934b6e4ecf895c2dd
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/libsyntax/ext/expand.rs

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -81,20 +81,10 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv,
8181
// be the root of the call stack. That's the most
8282
// relevant span and it's the actual invocation of
8383
// the macro.
84-
let mut relevant_info = cx.backtrace();
85-
let mut einfo = relevant_info.unwrap();
86-
loop {
87-
match relevant_info {
88-
None => { break }
89-
Some(e) => {
90-
einfo = e;
91-
relevant_info = einfo.call_site.expn_info;
92-
}
93-
}
94-
}
84+
let mac_span = original_span(cx);
9585

9686
let expanded =
97-
match expandfun(cx, einfo.call_site,
87+
match expandfun(cx, mac_span.call_site,
9888
marked_before, marked_ctxt) {
9989
MRExpr(e) => e,
10090
MRAny(expr_maker,_,_) => expr_maker(),
@@ -400,11 +390,11 @@ pub fn expand_stmt(extsbox: @mut SyntaxEnv,
400390
-> (Option<Stmt_>, Span) {
401391
// why the copying here and not in expand_expr?
402392
// looks like classic changed-in-only-one-place
403-
let (mac, pth, tts, semi, ctxt) = match *s {
393+
let (pth, tts, semi, ctxt) = match *s {
404394
StmtMac(ref mac, semi) => {
405395
match mac.node {
406396
mac_invoc_tt(ref pth, ref tts, ctxt) => {
407-
((*mac).clone(), pth, (*tts).clone(), semi, ctxt)
397+
(pth, (*tts).clone(), semi, ctxt)
408398
}
409399
}
410400
}
@@ -431,7 +421,13 @@ pub fn expand_stmt(extsbox: @mut SyntaxEnv,
431421
// mark before expansion:
432422
let marked_tts = mark_tts(tts,fm);
433423
let marked_ctxt = new_mark(fm,ctxt);
434-
let expanded = match expandfun(cx, mac.span, marked_tts, marked_ctxt) {
424+
425+
// See the comment in expand_expr for why we want the original span,
426+
// not the current mac.span.
427+
let mac_span = original_span(cx);
428+
429+
let expanded = match expandfun(cx, mac_span.call_site,
430+
marked_tts, marked_ctxt) {
435431
MRExpr(e) =>
436432
@codemap::Spanned { node: StmtExpr(e, ast::DUMMY_NODE_ID),
437433
span: e.span},
@@ -1270,6 +1266,20 @@ pub fn mtwt_cancel_outer_mark(tts: &[ast::token_tree], ctxt: ast::SyntaxContext)
12701266
mark_tts(tts,outer_mark)
12711267
}
12721268

1269+
fn original_span(cx: @ExtCtxt) -> @codemap::ExpnInfo {
1270+
let mut relevant_info = cx.backtrace();
1271+
let mut einfo = relevant_info.unwrap();
1272+
loop {
1273+
match relevant_info {
1274+
None => { break }
1275+
Some(e) => {
1276+
einfo = e;
1277+
relevant_info = einfo.call_site.expn_info;
1278+
}
1279+
}
1280+
}
1281+
return einfo;
1282+
}
12731283

12741284
#[cfg(test)]
12751285
mod test {

0 commit comments

Comments
 (0)