summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorPaul Stansifer <paul.stansifer@gmail.com>2012-11-21 13:37:43 -0500
committerGraydon Hoare <graydon@mozilla.com>2012-11-29 12:09:10 -0800
commit0f707f42c847814f60776a3b608c3016b00d7457 (patch)
tree8e8c4a8fc17bbef3054d732999cbcd785123ab03 /src/libsyntax/ext
parente77491bd870d9b026ebfbda07caab103f111ce8f (diff)
downloadrust-0f707f42c847814f60776a3b608c3016b00d7457.tar.gz
rust-0f707f42c847814f60776a3b608c3016b00d7457.zip
Distinguish `stmt_mac`s that are followed by semicolons and those that aren't.
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/expand.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index 07290c9248b..0d5b0070d2f 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -272,12 +272,12 @@ fn expand_stmt(exts: HashMap<~str, syntax_extension>, cx: ext_ctxt,
                orig: fn@(&&s: stmt_, span, ast_fold) -> (stmt_, span))
     -> (stmt_, span)
 {
-    let (mac, pth, tts) = biased_match! (
-        (s)        ~ (stmt_mac(mac))          else return orig(s, sp, fld);
+    let (mac, pth, tts, semi) = biased_match! (
+        (s)        ~ (stmt_mac(mac, semi))    else return orig(s, sp, fld);
         (mac.node) ~ (mac_invoc_tt(pth, tts)) else {
             cx.span_bug(mac.span, ~"naked syntactic bit")
         };
-        => (mac, pth, tts));
+        => (mac, pth, tts, semi));
 
     assert(vec::len(pth.idents) == 1u);
     let extname = cx.parse_sess().interner.get(pth.idents[0]);
@@ -287,8 +287,10 @@ fn expand_stmt(exts: HashMap<~str, syntax_extension>, cx: ext_ctxt,
 
         Some(normal_tt({expander: exp, span: exp_sp})) => {
             let expanded = match exp(cx, mac.span, tts) {
-                mr_expr(e) =>
+                mr_expr(e) if !semi =>
                     @{node: ast::stmt_expr(e, cx.next_id()), span: e.span},
+                mr_expr(e) if semi =>
+                    @{node: ast::stmt_semi(e, cx.next_id()), span: e.span},
                 mr_any(_,_,stmt_mkr) => stmt_mkr(),
                 _ => cx.span_fatal(
                     pth.span,