Macro item printing
diff --git a/src/expr.rs b/src/expr.rs
index e3e4e55..647edbd 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -827,19 +827,12 @@
fn requires_semi(e: &Expr) -> bool {
match *e {
- Expr::Mac(ref mac) => {
- let len = mac.tts.len();
- if let TokenTree::Delimited(
- Delimited {
- delim: DelimToken::Brace,
- ..
- }
- ) = mac.tts[len - 1] {
- false
- } else {
- true
- }
- }
+ Expr::Mac(ref mac) => match mac.tts.last() {
+ Some(&TokenTree::Delimited(
+ Delimited { delim: DelimToken::Brace, .. }
+ )) => false,
+ _ => true,
+ },
Expr::If(_, _, _) |
Expr::IfLet(_, _, _, _) |
@@ -1164,7 +1157,7 @@
tokens.append("return");
opt_expr.to_tokens(tokens);
}
- Expr::Mac(ref _mac) => unimplemented!(),
+ Expr::Mac(ref mac) => mac.to_tokens(tokens),
Expr::Struct(ref path, ref fields, ref base) => {
path.to_tokens(tokens);
tokens.append("{");
@@ -1309,7 +1302,7 @@
Pat::Lit(ref _expr) => unimplemented!(),
Pat::Range(ref _lower, ref _upper) => unimplemented!(),
Pat::Vec(ref _before, ref _dots, ref _after) => unimplemented!(),
- Pat::Mac(ref _mac) => unimplemented!(),
+ Pat::Mac(ref mac) => mac.to_tokens(tokens),
}
}
}
diff --git a/src/item.rs b/src/item.rs
index 1c0ec66..8c87b3a 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -437,7 +437,7 @@
#[cfg(feature = "printing")]
mod printing {
use super::*;
- use FunctionRetTy;
+ use {Delimited, DelimToken, FunctionRetTy, TokenTree};
use attr::FilterAttrs;
use data::VariantData;
use quote::{Tokens, ToTokens};
@@ -539,7 +539,20 @@
ItemKind::Trait(_unsafety, ref _generics, ref _bound, ref _item) => unimplemented!(),
ItemKind::DefaultImpl(_unsafety, ref _path) => unimplemented!(),
ItemKind::Impl(_unsafety, _polarity, ref _generics, ref _path, ref _ty, ref _item) => unimplemented!(),
- ItemKind::Mac(ref _mac) => unimplemented!(),
+ ItemKind::Mac(ref mac) => {
+ mac.path.to_tokens(tokens);
+ tokens.append("!");
+ self.ident.to_tokens(tokens);
+ for tt in &mac.tts {
+ tt.to_tokens(tokens);
+ }
+ match mac.tts.last() {
+ Some(&TokenTree::Delimited(
+ Delimited { delim: DelimToken::Brace, .. }
+ )) => { /* no semicolon */ }
+ _ => tokens.append(";"),
+ }
+ }
}
}
}