From f104458d45e30024f8a4a02c1ad4101ed74b08f9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 24 Aug 2018 20:50:37 +0300 Subject: parameter parsing does not destroy blocks --- crates/libsyntax2/src/grammar/params.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'crates/libsyntax2/src/grammar/params.rs') diff --git a/crates/libsyntax2/src/grammar/params.rs b/crates/libsyntax2/src/grammar/params.rs index 5b1322b3a..bc0cb44ba 100644 --- a/crates/libsyntax2/src/grammar/params.rs +++ b/crates/libsyntax2/src/grammar/params.rs @@ -48,6 +48,10 @@ fn list_(p: &mut Parser, flavor: Flavor) { opt_self_param(p); } while !p.at(EOF) && !p.at(ket) { + if !VALUE_PARAMETER_FIRST.contains(p.current()) { + p.error("expected value parameter"); + break; + } value_parameter(p, flavor); if !p.at(ket) { p.expect(COMMA); @@ -57,6 +61,13 @@ fn list_(p: &mut Parser, flavor: Flavor) { m.complete(p, PARAM_LIST); } + +const VALUE_PARAMETER_FIRST: TokenSet = + token_set_union![ + patterns::PATTERN_FIRST, + types::TYPE_FIRST, + ]; + fn value_parameter(p: &mut Parser, flavor: Flavor) { let m = p.start(); match flavor { -- cgit v1.2.3