}
}
+ impl ToTokens for ast::Generics {
+ fn to_tokens(&self, _cx: &ExtCtxt) -> Vec<TokenTree> {
+ vec![ast::TtToken(DUMMY_SP, token::Interpolated(token::NtGenerics(self.clone())))]
+ }
+ }
+
+ impl ToTokens for ast::WhereClause {
+ fn to_tokens(&self, _cx: &ExtCtxt) -> Vec<TokenTree> {
+ vec![ast::TtToken(DUMMY_SP, token::Interpolated(token::NtWhereClause(self.clone())))]
+ }
+ }
+
impl ToTokens for P<ast::Item> {
fn to_tokens(&self, _cx: &ExtCtxt) -> Vec<TokenTree> {
vec![ast::TtToken(self.span, token::Interpolated(token::NtItem(self.clone())))]
/// | ( < lifetimes , typaramseq ( , )? > )
/// where typaramseq = ( typaram ) | ( typaram , typaramseq )
pub fn parse_generics(&mut self) -> PResult<ast::Generics> {
+ maybe_whole!(self, NtGenerics);
+
if try!(self.eat(&token::Lt) ){
let lifetime_defs = try!(self.parse_lifetime_defs());
let mut seen_default = false;
/// where T : Trait<U, V> + 'b, 'a : 'b
/// ```
pub fn parse_where_clause(&mut self) -> PResult<ast::WhereClause> {
+ maybe_whole!(self, NtWhereClause);
+
let mut where_clause = WhereClause {
id: ast::DUMMY_NODE_ID,
predicates: Vec::new(),
NtArm(ast::Arm),
NtImplItem(P<ast::ImplItem>),
NtTraitItem(P<ast::TraitItem>),
+ NtGenerics(ast::Generics),
+ NtWhereClause(ast::WhereClause),
}
impl fmt::Debug for Nonterminal {
NtArm(..) => f.pad("NtArm(..)"),
NtImplItem(..) => f.pad("NtImplItem(..)"),
NtTraitItem(..) => f.pad("NtTraitItem(..)"),
+ NtGenerics(..) => f.pad("NtGenerics(..)"),
+ NtWhereClause(..) => f.pad("NtWhereClause(..)"),
}
}
}
token::SpecialVarNt(var) => format!("${}", var.as_str()),
token::Interpolated(ref nt) => match *nt {
- token::NtExpr(ref e) => expr_to_string(&**e),
- token::NtMeta(ref e) => meta_item_to_string(&**e),
- token::NtTy(ref e) => ty_to_string(&**e),
- token::NtPath(ref e) => path_to_string(&**e),
- token::NtItem(ref e) => item_to_string(&**e),
- token::NtBlock(ref e) => block_to_string(&**e),
- token::NtStmt(ref e) => stmt_to_string(&**e),
- token::NtPat(ref e) => pat_to_string(&**e),
- token::NtIdent(ref e) => ident_to_string(&**e),
- token::NtTT(ref e) => tt_to_string(&**e),
- token::NtArm(ref e) => arm_to_string(&**e),
- token::NtImplItem(ref e) => impl_item_to_string(&**e),
- token::NtTraitItem(ref e) => trait_item_to_string(&**e),
+ token::NtExpr(ref e) => expr_to_string(&**e),
+ token::NtMeta(ref e) => meta_item_to_string(&**e),
+ token::NtTy(ref e) => ty_to_string(&**e),
+ token::NtPath(ref e) => path_to_string(&**e),
+ token::NtItem(ref e) => item_to_string(&**e),
+ token::NtBlock(ref e) => block_to_string(&**e),
+ token::NtStmt(ref e) => stmt_to_string(&**e),
+ token::NtPat(ref e) => pat_to_string(&**e),
+ token::NtIdent(ref e, _) => ident_to_string(&**e),
+ token::NtTT(ref e) => tt_to_string(&**e),
+ token::NtArm(ref e) => arm_to_string(&*e),
+ token::NtImplItem(ref e) => impl_item_to_string(&**e),
+ token::NtTraitItem(ref e) => trait_item_to_string(&**e),
+ token::NtGenerics(ref e) => generics_to_string(&*e),
+ token::NtWhereClause(ref e) => where_clause_to_string(&*e),
}
}
}