summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorErick Tryzelaar <erick.tryzelaar@gmail.com>2015-05-15 08:07:48 -0700
committerErick Tryzelaar <erick.tryzelaar@gmail.com>2015-05-15 08:07:48 -0700
commitb62290d421acf39db929f05522c8ce530e031067 (patch)
tree597c26c4bc602d0566b8177c07577ba3e87f6b94 /src/libsyntax/ext
parent7b00658413db724525db72364b7f77b65ef6af1d (diff)
downloadrust-b62290d421acf39db929f05522c8ce530e031067.tar.gz
rust-b62290d421acf39db929f05522c8ce530e031067.zip
syntax: Unquoting some statements requires trailing semicolons
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/quote.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs
index 39ddafffaec..e0753b2f6f6 100644
--- a/src/libsyntax/ext/quote.rs
+++ b/src/libsyntax/ext/quote.rs
@@ -28,8 +28,7 @@ pub mod rt {
     use ast;
     use codemap::Spanned;
     use ext::base::ExtCtxt;
-    use parse::token;
-    use parse;
+    use parse::{self, token, classify};
     use ptr::P;
     use std::rc::Rc;
 
@@ -126,7 +125,16 @@ pub mod rt {
 
     impl ToTokens for P<ast::Stmt> {
         fn to_tokens(&self, _cx: &ExtCtxt) -> Vec<TokenTree> {
-            vec![ast::TtToken(self.span, token::Interpolated(token::NtStmt(self.clone())))]
+            let mut tts = vec![
+                ast::TtToken(self.span, token::Interpolated(token::NtStmt(self.clone())))
+            ];
+
+            // Some statements require a trailing semicolon.
+            if classify::stmt_ends_with_semi(&self.node) {
+                tts.push(ast::TtToken(self.span, token::Semi));
+            }
+
+            tts
         }
     }