Fn-style type params

This commit is contained in:
Aleksey Kladov 2018-08-08 14:43:14 +03:00
parent 678882d4f8
commit bfb90dc4f1
3 changed files with 56 additions and 1 deletions

View file

@ -71,7 +71,16 @@ fn path_segment(p: &mut Parser, mode: Mode, first: bool) {
fn path_generic_args(p: &mut Parser, mode: Mode) { fn path_generic_args(p: &mut Parser, mode: Mode) {
match mode { match mode {
Mode::Use => return, Mode::Use => return,
Mode::Type => type_args::type_arg_list(p, false), Mode::Type => {
// test path_fn_trait_args
// type F = Box<Fn(x: i32) -> ()>;
if p.at(L_PAREN) {
params::param_list(p);
fn_ret_type(p);
} else {
type_args::type_arg_list(p, false)
}
},
Mode::Expr => type_args::type_arg_list(p, true), Mode::Expr => type_args::type_arg_list(p, true),
} }
} }

View file

@ -0,0 +1 @@
type F = Box<Fn(x: i32) -> ()>;

View file

@ -0,0 +1,45 @@
FILE@[0; 32)
TYPE_ITEM@[0; 31)
TYPE_KW@[0; 4)
WHITESPACE@[4; 5)
NAME@[5; 6)
IDENT@[5; 6) "F"
WHITESPACE@[6; 7)
EQ@[7; 8)
WHITESPACE@[8; 9)
PATH_TYPE@[9; 30)
PATH@[9; 30)
PATH_SEGMENT@[9; 30)
NAME_REF@[9; 12)
IDENT@[9; 12) "Box"
TYPE_ARG_LIST@[12; 30)
L_ANGLE@[12; 13)
TYPE_ARG@[13; 29)
PATH_TYPE@[13; 29)
PATH@[13; 29)
PATH_SEGMENT@[13; 29)
NAME_REF@[13; 15)
IDENT@[13; 15) "Fn"
PARAM_LIST@[15; 23)
L_PAREN@[15; 16)
PARAM@[16; 22)
BIND_PAT@[16; 17)
NAME@[16; 17)
IDENT@[16; 17) "x"
COLON@[17; 18)
WHITESPACE@[18; 19)
PATH_TYPE@[19; 22)
PATH@[19; 22)
PATH_SEGMENT@[19; 22)
NAME_REF@[19; 22)
IDENT@[19; 22) "i32"
R_PAREN@[22; 23)
WHITESPACE@[23; 24)
THIN_ARROW@[24; 26)
WHITESPACE@[26; 27)
TUPLE_TYPE@[27; 29)
L_PAREN@[27; 28)
R_PAREN@[28; 29)
R_ANGLE@[29; 30)
SEMI@[30; 31)
WHITESPACE@[31; 32)