about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/middle/astencode.rs3
-rw-r--r--src/librustc/middle/liveness.rs4
-rw-r--r--src/librustc/middle/region.rs1
-rw-r--r--src/librustc/middle/trans/base.rs1
-rw-r--r--src/librustc/middle/ty.rs1
-rw-r--r--src/librustc/middle/typeck/check.rs1
-rw-r--r--src/librusti/rusti.rc2
-rw-r--r--src/libsyntax/ast.rs2
-rw-r--r--src/libsyntax/ast_util.rs3
-rw-r--r--src/libsyntax/fold.rs4
-rw-r--r--src/libsyntax/parse/classify.rs21
-rw-r--r--src/libsyntax/print/pprust.rs4
-rw-r--r--src/libsyntax/visit.rs3
13 files changed, 33 insertions, 17 deletions
diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs
index 64aaef99ef6..1c7338fe317 100644
--- a/src/librustc/middle/astencode.rs
+++ b/src/librustc/middle/astencode.rs
@@ -242,7 +242,8 @@ fn simplify_ast(ii: ast::inlined_item) -> ast::inlined_item {
             match stmt.node {
               ast::stmt_expr(_, _) | ast::stmt_semi(_, _) |
               ast::stmt_decl(@{node: ast::decl_local(_), span: _}, _) => true,
-              ast::stmt_decl(@{node: ast::decl_item(_), span: _}, _) => false
+              ast::stmt_decl(@{node: ast::decl_item(_), span: _}, _) => false,
+              ast::stmt_mac(*) => fail ~"unexpanded macro in astencode"
             }
         };
         let blk_sans_items = { stmts: stmts_sans_items,.. blk };
diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs
index 0f1b7489f43..40b1e293351 100644
--- a/src/librustc/middle/liveness.rs
+++ b/src/librustc/middle/liveness.rs
@@ -980,6 +980,10 @@ impl Liveness {
           stmt_expr(expr, _) | stmt_semi(expr, _) => {
             return self.propagate_through_expr(expr, succ);
           }
+
+          stmt_mac(*) => {
+            self.tcx.sess.span_bug(stmt.span, ~"unexpanded macro");
+          }
         }
     }
 
diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs
index e7dec95f09a..2950d7bd95d 100644
--- a/src/librustc/middle/region.rs
+++ b/src/librustc/middle/region.rs
@@ -245,6 +245,7 @@ fn resolve_stmt(stmt: @ast::stmt, cx: ctxt, visitor: visit::vt<ctxt>) {
         expr_cx.parent = Some(stmt_id);
         visit::visit_stmt(stmt, expr_cx, visitor);
       }
+      ast::stmt_mac(*) => cx.sess.bug(~"unexpanded macro")
     }
 }
 
diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs
index f4530a28633..7aac60c5f1d 100644
--- a/src/librustc/middle/trans/base.rs
+++ b/src/librustc/middle/trans/base.rs
@@ -1026,6 +1026,7 @@ fn trans_stmt(cx: block, s: ast::stmt) -> block {
                 ast::decl_item(i) => trans_item(cx.fcx.ccx, *i)
             }
         }
+        ast::stmt_mac(*) => cx.tcx().sess.bug(~"unexpanded macro")
     }
 
     return bcx;
diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs
index b37fbd9feb4..ad6ca83fe4e 100644
--- a/src/librustc/middle/ty.rs
+++ b/src/librustc/middle/ty.rs
@@ -3437,6 +3437,7 @@ fn stmt_node_id(s: @ast::stmt) -> ast::node_id {
       ast::stmt_decl(_, id) | stmt_expr(_, id) | stmt_semi(_, id) => {
         return id;
       }
+      ast::stmt_mac(*) => fail ~"unexpanded macro in trans"
     }
 }
 
diff --git a/src/librustc/middle/typeck/check.rs b/src/librustc/middle/typeck/check.rs
index b24550f2bc6..5807e338ebd 100644
--- a/src/librustc/middle/typeck/check.rs
+++ b/src/librustc/middle/typeck/check.rs
@@ -2344,6 +2344,7 @@ fn check_stmt(fcx: @fn_ctxt, stmt: @ast::stmt) -> bool {
         node_id = id;
         bot = check_expr(fcx, expr, None);
       }
+      ast::stmt_mac(*) => fcx.ccx.tcx.sess.bug(~"unexpanded macro")
     }
     fcx.write_nil(node_id);
     return bot;
diff --git a/src/librusti/rusti.rc b/src/librusti/rusti.rc
index 1b90a227098..923a36c01d2 100644
--- a/src/librusti/rusti.rc
+++ b/src/librusti/rusti.rc
@@ -86,7 +86,7 @@ fn record(repl: Repl, blk: @ast::blk, intr: @token::ident_interner) -> Repl {
         let new_stmts = do with_pp(intr) |pp, writer| {
             for blk.node.stmts.each |stmt| {
                 match stmt.node {
-                    ast::stmt_decl(*) => {
+                    ast::stmt_decl(*) | ast::stmt_mac(*) => {
                         pprust::print_stmt(pp, **stmt);
                         writer.write_line(~"");
                     }
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index 1adcadf1b6a..bc3ae65618a 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -665,6 +665,8 @@ enum stmt_ {
 
     // expr with trailing semi-colon (may have any type):
     stmt_semi(@expr, node_id),
+
+    stmt_mac(mac),
 }
 
 // FIXME (pending discussion of #1697, #2178...): local should really be
diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs
index 12ebca87a80..e6cd413c430 100644
--- a/src/libsyntax/ast_util.rs
+++ b/src/libsyntax/ast_util.rs
@@ -39,7 +39,8 @@ pure fn stmt_id(s: stmt) -> node_id {
     match s.node {
       stmt_decl(_, id) => id,
       stmt_expr(_, id) => id,
-      stmt_semi(_, id) => id
+      stmt_semi(_, id) => id,
+      stmt_mac(_) => fail ~"attempted to analyze unexpanded stmt",
     }
 }
 
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs
index 1db37418370..a92c902ae3f 100644
--- a/src/libsyntax/fold.rs
+++ b/src/libsyntax/fold.rs
@@ -305,10 +305,12 @@ fn noop_fold_block(b: blk_, fld: ast_fold) -> blk_ {
 }
 
 fn noop_fold_stmt(s: stmt_, fld: ast_fold) -> stmt_ {
+    let fold_mac = |x| fold_mac_(x, fld);
     return match s {
       stmt_decl(d, nid) => stmt_decl(fld.fold_decl(d), fld.new_id(nid)),
       stmt_expr(e, nid) => stmt_expr(fld.fold_expr(e), fld.new_id(nid)),
-      stmt_semi(e, nid) => stmt_semi(fld.fold_expr(e), fld.new_id(nid))
+      stmt_semi(e, nid) => stmt_semi(fld.fold_expr(e), fld.new_id(nid)),
+      stmt_mac(mac) => stmt_mac(fold_mac(mac))
     };
 }
 
diff --git a/src/libsyntax/parse/classify.rs b/src/libsyntax/parse/classify.rs
index 2f3e29bd90f..0d370525d17 100644
--- a/src/libsyntax/parse/classify.rs
+++ b/src/libsyntax/parse/classify.rs
@@ -21,18 +21,15 @@ fn expr_is_simple_block(e: @ast::expr) -> bool {
 }
 
 fn stmt_ends_with_semi(stmt: ast::stmt) -> bool {
-    match stmt.node {
-      ast::stmt_decl(d, _) => {
-        return match d.node {
-              ast::decl_local(_) => true,
-              ast::decl_item(_) => false
+    return match stmt.node {
+        ast::stmt_decl(d, _) => {
+            match d.node {
+                ast::decl_local(_) => true,
+                ast::decl_item(_) => false
             }
-      }
-      ast::stmt_expr(e, _) => {
-        return expr_requires_semi_to_be_stmt(e);
-      }
-      ast::stmt_semi(*) => {
-        return false;
-      }
+        }
+        ast::stmt_expr(e, _) => { expr_requires_semi_to_be_stmt(e) }
+        ast::stmt_semi(*) => { false }
+        ast::stmt_mac(*) => { false }
     }
 }
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index f525436cc3e..b55eec80a93 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -882,6 +882,10 @@ fn print_stmt(s: ps, st: ast::stmt) {
         print_expr(s, expr);
         word(s.s, ~";");
       }
+      ast::stmt_mac(mac) => {
+        space_if_not_bol(s);
+        print_mac(s, mac);
+      }
     }
     if parse::classify::stmt_ends_with_semi(st) { word(s.s, ~";"); }
     maybe_print_trailing_comment(s, st.span, None);
diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs
index afd928a9fbc..ca2af67771e 100644
--- a/src/libsyntax/visit.rs
+++ b/src/libsyntax/visit.rs
@@ -347,7 +347,8 @@ fn visit_stmt<E>(s: @stmt, e: E, v: vt<E>) {
     match s.node {
       stmt_decl(d, _) => v.visit_decl(d, e, v),
       stmt_expr(ex, _) => v.visit_expr(ex, e, v),
-      stmt_semi(ex, _) => v.visit_expr(ex, e, v)
+      stmt_semi(ex, _) => v.visit_expr(ex, e, v),
+      stmt_mac(mac) => visit_mac(mac, e, v)
     }
 }