summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2012-12-06 16:19:05 -0800
committerGraydon Hoare <graydon@mozilla.com>2012-12-07 11:21:14 -0800
commita6fcfd726bb70582c5e2cf1bb47d2fcd8834e74e (patch)
tree6aab1e14b965e3c24425a76e7a0768f4ac874c4e /src/libsyntax/ext
parent70e0c6e27d54779e718aef866d6ab569af3c6a28 (diff)
downloadrust-a6fcfd726bb70582c5e2cf1bb47d2fcd8834e74e.tar.gz
rust-a6fcfd726bb70582c5e2cf1bb47d2fcd8834e74e.zip
syntax: fix missing push in item macro expansion
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/expand.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index 022f843a0ec..1890ec36bdd 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -237,7 +237,7 @@ fn expand_item_mac(exts: HashMap<~str, syntax_extension>,
     );
 
     let extname = cx.parse_sess().interner.get(pth.idents[0]);
-    let (expanded, ex_span) = match exts.find(*extname) {
+    let expanded = match exts.find(*extname) {
         None => cx.span_fatal(pth.span,
                               fmt!("macro undefined: '%s!'", *extname)),
 
@@ -248,7 +248,10 @@ fn expand_item_mac(exts: HashMap<~str, syntax_extension>,
                                     given '%s'", *extname,
                                    *cx.parse_sess().interner.get(it.ident)));
             }
-            (((*expand).expander)(cx, it.span, tts), (*expand).span)
+            cx.bt_push(ExpandedFrom({call_site: it.span,
+                                     callie: {name: *extname,
+                                              span: (*expand).span}}));
+            ((*expand).expander)(cx, it.span, tts)
         }
         Some(item_tt(ref expand)) => {
             if it.ident == parse::token::special_idents::invalid {
@@ -256,14 +259,15 @@ fn expand_item_mac(exts: HashMap<~str, syntax_extension>,
                               fmt!("macro %s! expects an ident argument",
                                    *extname));
             }
-            (((*expand).expander)(cx, it.span, it.ident, tts), (*expand).span)
+            cx.bt_push(ExpandedFrom({call_site: it.span,
+                                     callie: {name: *extname,
+                                              span: (*expand).span}}));
+            ((*expand).expander)(cx, it.span, it.ident, tts)
         }
         _ => cx.span_fatal(
             it.span, fmt!("%s! is not legal in item position", *extname))
     };
 
-    cx.bt_push(ExpandedFrom({call_site: it.span,
-                              callie: {name: *extname, span: ex_span}}));
     let maybe_it = match expanded {
         mr_item(it) => fld.fold_item(it),
         mr_expr(_) => cx.span_fatal(pth.span,