From dc40f1298a8d4dcb7a26d5af38c4fb7ef3d6c5df Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 24 Aug 2018 01:19:38 +0300 Subject: better self-types --- crates/libsyntax2/src/grammar/items/mod.rs | 2 +- crates/libsyntax2/src/grammar/items/use_item.rs | 2 +- crates/libsyntax2/src/grammar/mod.rs | 8 ++++---- crates/libsyntax2/src/grammar/params.rs | 8 +++++--- 4 files changed, 11 insertions(+), 9 deletions(-) (limited to 'crates/libsyntax2/src/grammar') diff --git a/crates/libsyntax2/src/grammar/items/mod.rs b/crates/libsyntax2/src/grammar/items/mod.rs index c74266133..d460612b4 100644 --- a/crates/libsyntax2/src/grammar/items/mod.rs +++ b/crates/libsyntax2/src/grammar/items/mod.rs @@ -208,7 +208,7 @@ fn extern_crate_item(p: &mut Parser) { assert!(p.at(CRATE_KW)); p.bump(); name(p); - alias(p); + opt_alias(p); p.expect(SEMI); } diff --git a/crates/libsyntax2/src/grammar/items/use_item.rs b/crates/libsyntax2/src/grammar/items/use_item.rs index a3f7f0da8..3da40a629 100644 --- a/crates/libsyntax2/src/grammar/items/use_item.rs +++ b/crates/libsyntax2/src/grammar/items/use_item.rs @@ -26,7 +26,7 @@ fn use_tree(p: &mut Parser) { paths::use_path(p); match p.current() { AS_KW => { - alias(p); + opt_alias(p); } COLONCOLON => { p.bump(); diff --git a/crates/libsyntax2/src/grammar/mod.rs b/crates/libsyntax2/src/grammar/mod.rs index bbdc4f807..d09a9dc9c 100644 --- a/crates/libsyntax2/src/grammar/mod.rs +++ b/crates/libsyntax2/src/grammar/mod.rs @@ -92,14 +92,14 @@ fn opt_visibility(p: &mut Parser) { _ => (), } } -fn alias(p: &mut Parser) -> bool { + +fn opt_alias(p: &mut Parser) { if p.at(AS_KW) { - let alias = p.start(); + let m = p.start(); p.bump(); name(p); - alias.complete(p, ALIAS); + m.complete(p, ALIAS); } - true //FIXME: return false if three are errors } fn abi(p: &mut Parser) { diff --git a/crates/libsyntax2/src/grammar/params.rs b/crates/libsyntax2/src/grammar/params.rs index 7e58e8713..47567ec8a 100644 --- a/crates/libsyntax2/src/grammar/params.rs +++ b/crates/libsyntax2/src/grammar/params.rs @@ -92,16 +92,18 @@ fn value_parameter(p: &mut Parser, flavor: Flavor) { // fn b(&self,) {} // fn c(&'a self,) {} // fn d(&'a mut self, x: i32) {} +// fn e(mut self) {} // } fn self_param(p: &mut Parser) { let m; - if p.at(SELF_KW) { + if p.at(SELF_KW) || p.at(MUT_KW) && p.nth(1) == SELF_KW { m = p.start(); - p.bump(); + p.eat(MUT_KW); + p.eat(SELF_KW); // test arb_self_types // impl S { // fn a(self: &Self) {} - // fn b(self: Box) {} + // fn b(mut self: Box) {} // } if p.at(COLON) { types::ascription(p); -- cgit v1.2.3