@@ -289,16 +289,16 @@ item_const
289289;
290290
291291item_macro
292- : path_expr '!' maybe_ident parens_delimited_token_trees ';'
293- | path_expr '!' maybe_ident braces_delimited_token_trees
294- | path_expr '!' maybe_ident brackets_delimited_token_trees ';'
292+ : path_expr '!' maybe_ident parens_delimited_token_trees ';' { $$ = mk_node("ItemMacro", 3, $1, $3, $4); }
293+ | path_expr '!' maybe_ident braces_delimited_token_trees { $$ = mk_node("ItemMacro", 3, $1, $3, $4); }
294+ | path_expr '!' maybe_ident brackets_delimited_token_trees ';'{ $$ = mk_node("ItemMacro", 3, $1, $3, $4); }
295295;
296296
297297view_item
298298: use_item
299299| extern_fn_item
300300| EXTERN CRATE ident ';' { $$ = mk_node("ViewItemExternCrate", 1, $3); }
301- | EXTERN CRATE str AS ident ';' { $$ = mk_node("ViewItemExternCrate", 2, $3, $5); }
301+ | EXTERN CRATE ident AS ident ';' { $$ = mk_node("ViewItemExternCrate", 2, $3, $5); }
302302;
303303
304304extern_fn_item
@@ -312,8 +312,11 @@ use_item
312312view_path
313313: path_no_types_allowed { $$ = mk_node("ViewPathSimple", 1, $1); }
314314| path_no_types_allowed MOD_SEP '{' '}' { $$ = mk_node("ViewPathList", 2, $1, mk_atom("ViewPathListEmpty")); }
315+ | MOD_SEP '{' '}' { $$ = mk_node("ViewPathList", 1, mk_atom("ViewPathListEmpty")); }
315316| path_no_types_allowed MOD_SEP '{' idents_or_self '}' { $$ = mk_node("ViewPathList", 2, $1, $4); }
317+ | MOD_SEP '{' idents_or_self '}' { $$ = mk_node("ViewPathList", 1, $3); }
316318| path_no_types_allowed MOD_SEP '{' idents_or_self ',' '}' { $$ = mk_node("ViewPathList", 2, $1, $4); }
319+ | MOD_SEP '{' idents_or_self ',' '}' { $$ = mk_node("ViewPathList", 1, $3); }
317320| path_no_types_allowed MOD_SEP '*' { $$ = mk_node("ViewPathGlob", 1, $1); }
318321| '{' '}' { $$ = mk_atom("ViewPathListEmpty"); }
319322| '{' idents_or_self '}' { $$ = mk_node("ViewPathList", 1, $2); }
@@ -333,7 +336,7 @@ block_item
333336;
334337
335338maybe_ty_ascription
336- : ':' ty { $$ = $2; }
339+ : ':' ty_sum { $$ = $2; }
337340| %empty { $$ = mk_none(); }
338341;
339342
@@ -511,7 +514,7 @@ trait_item
511514;
512515
513516trait_const
514- : maybe_outer_attrs CONST ident maybe_const_default ';' { $$ = mk_node("ConstTraitItem", 3 , $1, $3, $4); }
517+ : maybe_outer_attrs CONST ident maybe_ty_ascription maybe_const_default ';' { $$ = mk_node("ConstTraitItem", 4 , $1, $3, $4, $5 ); }
515518;
516519
517520maybe_const_default
@@ -590,11 +593,11 @@ item_impl
590593{
591594 $$ = mk_node("ItemImpl", 6, $1, $3, 5, $6, $9, $10);
592595}
593- | maybe_unsafe IMPL generic_params trait_ref FOR ty maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
596+ | maybe_unsafe IMPL generic_params trait_ref FOR ty_sum maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
594597{
595598 $$ = mk_node("ItemImpl", 6, $3, $4, $6, $7, $9, $10);
596599}
597- | maybe_unsafe IMPL generic_params '!' trait_ref FOR ty maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
600+ | maybe_unsafe IMPL generic_params '!' trait_ref FOR ty_sum maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
598601{
599602 $$ = mk_node("ItemImplNeg", 7, $1, $3, $5, $7, $8, $10, $11);
600603}
@@ -620,7 +623,7 @@ impl_items
620623
621624impl_item
622625: impl_method
623- | item_macro
626+ | attrs_and_vis item_macro { $$ = mk_node("ImplMacroItem", 2, $1, $2); }
624627| impl_const
625628| impl_type
626629;
@@ -698,7 +701,7 @@ params
698701;
699702
700703param
701- : pat ':' ty { $$ = mk_node("Arg", 2, $1, $3); }
704+ : pat ':' ty_sum { $$ = mk_node("Arg", 2, $1, $3); }
702705;
703706
704707inferrable_params
909912| ident '@' pat { $$ = mk_node("PatIdent", 3, mk_node("BindByValue", 1, mk_atom("MutImmutable")), $1, $3); }
910913| binding_mode ident '@' pat { $$ = mk_node("PatIdent", 3, $1, $2, $4); }
911914| BOX pat { $$ = mk_node("PatUniq", 1, $2); }
915+ | '<' ty_sum maybe_as_trait_ref '>' MOD_SEP ident { $$ = mk_node("PatQualifiedPath", 3, $2, $3, $6); }
916+ | SHL ty_sum maybe_as_trait_ref '>' MOD_SEP ident maybe_as_trait_ref '>' MOD_SEP ident
917+ {
918+ $$ = mk_node("PatQualifiedPath", 3, mk_node("PatQualifiedPath", 3, $2, $3, $6), $7, $10);
919+ }
912920;
913921
914922pats_or
@@ -981,11 +989,11 @@ pat_vec_elts
981989ty
982990: ty_prim
983991| ty_closure
984- | '<' ty_sum AS trait_ref '>' MOD_SEP ident { $$ = mk_node("TyQualifiedPath", 3, $2, $4 , $7 ); }
985- | SHL ty_sum AS trait_ref '>' MOD_SEP ident AS trait_ref '>' MOD_SEP ident { $$ = mk_node("TyQualifiedPath", 3, mk_node("TyQualifiedPath", 3, $2, $4 , $7 ), $9 , $12 ); }
986- | '(' ty_sums ')' { $$ = mk_node("TyTup", 1, $2); }
987- | '(' ty_sums ',' ')' { $$ = mk_node("TyTup", 1, $2); }
988- | '(' ')' { $$ = mk_atom("TyNil"); }
992+ | '<' ty_sum maybe_as_trait_ref '>' MOD_SEP ident { $$ = mk_node("TyQualifiedPath", 3, $2, $3 , $6 ); }
993+ | SHL ty_sum maybe_as_trait_ref '>' MOD_SEP ident maybe_as_trait_ref '>' MOD_SEP ident { $$ = mk_node("TyQualifiedPath", 3, mk_node("TyQualifiedPath", 3, $2, $3 , $6 ), $7 , $10 ); }
994+ | '(' ty_sums ')' { $$ = mk_node("TyTup", 1, $2); }
995+ | '(' ty_sums ',' ')' { $$ = mk_node("TyTup", 1, $2); }
996+ | '(' ')' { $$ = mk_atom("TyNil"); }
989997;
990998
991999ty_prim
@@ -1551,11 +1559,7 @@ nonblock_prefix_expr
15511559;
15521560
15531561expr_qualified_path
1554- : '<' ty_sum maybe_as_trait_ref '>' MOD_SEP ident
1555- {
1556- $$ = mk_node("ExprQualifiedPath", 3, $2, $3, $6);
1557- }
1558- | '<' ty_sum maybe_as_trait_ref '>' MOD_SEP ident generic_args
1562+ : '<' ty_sum maybe_as_trait_ref '>' MOD_SEP ident maybe_qpath_params
15591563{
15601564 $$ = mk_node("ExprQualifiedPath", 4, $2, $3, $6, $7);
15611565}
@@ -1576,6 +1580,11 @@ expr_qualified_path
15761580 $$ = mk_node("ExprQualifiedPath", 4, mk_node("ExprQualifiedPath", 4, $2, $3, $6, $7), $8, $11, $12);
15771581}
15781582
1583+ maybe_qpath_params
1584+ : MOD_SEP generic_args { $$ = $2; }
1585+ | %empty { $$ = mk_none(); }
1586+ ;
1587+
15791588maybe_as_trait_ref
15801589: AS trait_ref { $$ = $2; }
15811590| %empty { $$ = mk_none(); }
@@ -1666,8 +1675,10 @@ block_expr
16661675
16671676full_block_expr
16681677: block_expr
1669- | full_block_expr '.' path_generic_args_with_colons { $$ = mk_node("ExprField", 2, $1, $3); }
1670- | full_block_expr '.' LIT_INTEGER { $$ = mk_node("ExprTupleIndex", 1, $1); }
1678+ | full_block_expr '.' path_generic_args_with_colons %prec IDENT { $$ = mk_node("ExprField", 2, $1, $3); }
1679+ | full_block_expr '.' path_generic_args_with_colons '[' maybe_expr ']' { $$ = mk_node("ExprIndex", 3, $1, $3, $5); }
1680+ | full_block_expr '.' path_generic_args_with_colons '(' maybe_exprs ')' { $$ = mk_node("ExprCall", 3, $1, $3, $5); }
1681+ | full_block_expr '.' LIT_INTEGER { $$ = mk_node("ExprTupleIndex", 1, $1); }
16711682;
16721683
16731684expr_match
0 commit comments