diff options
| author | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2015-05-15 08:07:48 -0700 |
|---|---|---|
| committer | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2015-05-15 08:07:48 -0700 |
| commit | b62290d421acf39db929f05522c8ce530e031067 (patch) | |
| tree | 597c26c4bc602d0566b8177c07577ba3e87f6b94 /src/libsyntax/ext | |
| parent | 7b00658413db724525db72364b7f77b65ef6af1d (diff) | |
| download | rust-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.rs | 14 |
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 } } |
