From cd814fdf8113bc801b735ed462ba142e98f1f81b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 31 Jul 2018 18:24:30 +0300 Subject: trait bounds --- src/parser/grammar/items/mod.rs | 11 +++++++++++ src/parser/grammar/items/traits.rs | 7 +++++++ 2 files changed, 18 insertions(+) (limited to 'src/parser/grammar/items') diff --git a/src/parser/grammar/items/mod.rs b/src/parser/grammar/items/mod.rs index 12bcf7924..037cdca53 100644 --- a/src/parser/grammar/items/mod.rs +++ b/src/parser/grammar/items/mod.rs @@ -149,6 +149,17 @@ fn item(p: &mut Parser) { } } } + TRAIT_KW => { + traits::trait_item(p); + TRAIT_ITEM + } + // test auto_trait + // auto trait T {} + IDENT if p.at_contextual_kw("auto") && la == TRAIT_KW => { + p.bump_remap(AUTO_KW); + traits::trait_item(p); + TRAIT_ITEM + } IMPL_KW => { traits::impl_item(p); IMPL_ITEM diff --git a/src/parser/grammar/items/traits.rs b/src/parser/grammar/items/traits.rs index 7d657ced0..60158fe41 100644 --- a/src/parser/grammar/items/traits.rs +++ b/src/parser/grammar/items/traits.rs @@ -1,9 +1,16 @@ use super::*; +// test trait_item +// trait T: Hash + Clone where U: Copy {} pub(super) fn trait_item(p: &mut Parser) { assert!(p.at(TRAIT_KW)); p.bump(); name(p); + type_params::list(p); + if p.at(COLON) { + type_params::bounds(p); + } + type_params::where_clause(p); p.expect(L_CURLY); p.expect(R_CURLY); } -- cgit v1.2.3