grammar: fix where clause parsing

closes #205
This commit is contained in:
Aleksey Kladov 2018-11-06 21:19:32 +03:00
parent dafe747dcc
commit ec131b6c7b
3 changed files with 35 additions and 1 deletions

View file

@ -135,7 +135,11 @@ fn where_predicate(p: &mut Parser) {
if p.at(FOR_KW) {
types::for_binder(p);
}
types::path_type(p);
if paths::is_path_start(p) || p.at(L_ANGLE) {
types::path_type_(p, false);
} else {
p.error("expected a type");
}
if p.at(COLON) {
bounds(p);
} else {

View file

@ -0,0 +1,3 @@
fn foo()
where for<'a>
{}

View file

@ -0,0 +1,27 @@
ROOT@[0; 30)
FN_DEF@[0; 29)
FN_KW@[0; 2)
WHITESPACE@[2; 3)
NAME@[3; 6)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 8)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
WHITESPACE@[8; 13)
WHERE_CLAUSE@[13; 26)
WHERE_KW@[13; 18)
WHITESPACE@[18; 19)
WHERE_PRED@[19; 26)
FOR_KW@[19; 22)
TYPE_PARAM_LIST@[22; 26)
L_ANGLE@[22; 23)
LIFETIME_PARAM@[23; 25)
LIFETIME@[23; 25) "'a"
R_ANGLE@[25; 26)
err: `expected a type`
err: `expected colon`
WHITESPACE@[26; 27)
BLOCK@[27; 29)
L_CURLY@[27; 28)
R_CURLY@[28; 29)
WHITESPACE@[29; 30)