From be20b014d9fd4df64a8b6b88aaf6950d44ca6f39 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 2 Feb 2018 23:23:39 +0300 Subject: Move type parameter parsing to a separate file --- src/parser/event_parser/grammar/items/mod.rs | 70 ------------------------ src/parser/event_parser/grammar/items/structs.rs | 8 +-- 2 files changed, 4 insertions(+), 74 deletions(-) (limited to 'src/parser/event_parser/grammar/items') diff --git a/src/parser/event_parser/grammar/items/mod.rs b/src/parser/event_parser/grammar/items/mod.rs index 1c092779b..35825e7c4 100644 --- a/src/parser/event_parser/grammar/items/mod.rs +++ b/src/parser/event_parser/grammar/items/mod.rs @@ -83,76 +83,6 @@ fn item(p: &mut Parser) { item.complete(p, item_kind); } -fn type_param_list(p: &mut Parser) { - if !p.at(L_ANGLE) { - return; - } - let m = p.start(); - p.bump(); - - while !p.at(EOF) && !p.at(R_ANGLE) { - match p.current() { - LIFETIME => lifetime_param(p), - IDENT => type_param(p), - _ => p.err_and_bump("expected type parameter"), - } - if !p.at(R_ANGLE) && !p.expect(COMMA) { - break; - } - } - p.expect(R_ANGLE); - m.complete(p, TYPE_PARAM_LIST); - - fn lifetime_param(p: &mut Parser) { - assert!(p.at(LIFETIME)); - let m = p.start(); - p.bump(); - if p.eat(COLON) { - while p.at(LIFETIME) { - p.bump(); - if !p.eat(PLUS) { - break; - } - } - } - m.complete(p, LIFETIME_PARAM); - } - - fn type_param(p: &mut Parser) { - assert!(p.at(IDENT)); - let m = p.start(); - p.bump(); - if p.eat(COLON) { - loop { - let has_paren = p.eat(L_PAREN); - p.eat(QUESTION); - if p.at(FOR_KW) { - //TODO - } - if p.at(LIFETIME) { - p.bump(); - } else if paths::is_path_start(p) { - paths::type_path(p); - } else { - break; - } - if has_paren { - p.expect(R_PAREN); - } - if !p.eat(PLUS) { - break; - } - } - } - if p.at(EQ) { - types::type_ref(p) - } - m.complete(p, TYPE_PARAM); - } -} - -fn where_clause(_: &mut Parser) {} - fn extern_crate_item(p: &mut Parser) { assert!(p.at(EXTERN_KW)); p.bump(); diff --git a/src/parser/event_parser/grammar/items/structs.rs b/src/parser/event_parser/grammar/items/structs.rs index 6e438413b..69d95c698 100644 --- a/src/parser/event_parser/grammar/items/structs.rs +++ b/src/parser/event_parser/grammar/items/structs.rs @@ -7,10 +7,10 @@ pub(super) fn struct_item(p: &mut Parser) { if !p.expect(IDENT) { return; } - type_param_list(p); + type_params::list(p); match p.current() { WHERE_KW => { - where_clause(p); + type_params::where_clause(p); match p.current() { SEMI => { p.bump(); @@ -44,8 +44,8 @@ pub(super) fn enum_item(p: &mut Parser) { assert!(p.at(ENUM_KW)); p.bump(); p.expect(IDENT); - type_param_list(p); - where_clause(p); + type_params::list(p); + type_params::where_clause(p); if p.expect(L_CURLY) { while !p.at(EOF) && !p.at(R_CURLY) { let var = p.start(); -- cgit v1.2.3