@@ -1309,6 +1309,7 @@ nonblock_expr
13091309| nonblock_expr AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
13101310| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
13111311| %prec BOXPLACE BOX '(' maybe_expr ')' nonblock_expr { $$ = mk_node("ExprBox", 2, $3, $5); }
1312+ | expr_qualified_path
13121313| nonblock_prefix_expr
13131314;
13141315
@@ -1367,6 +1368,7 @@ expr
13671368| expr AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
13681369| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
13691370| %prec BOXPLACE BOX '(' maybe_expr ')' expr { $$ = mk_node("ExprBox", 2, $3, $5); }
1371+ | expr_qualified_path
13701372| block_expr
13711373| block
13721374| nonblock_prefix_expr
@@ -1426,6 +1428,7 @@ nonparen_expr
14261428| nonparen_expr AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
14271429| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
14281430| %prec BOXPLACE BOX '(' maybe_expr ')' expr { $$ = mk_node("ExprBox", 1, $3, $5); }
1431+ | expr_qualified_path
14291432| block_expr
14301433| block
14311434| nonblock_prefix_expr
@@ -1485,6 +1488,7 @@ expr_nostruct
14851488| expr_nostruct AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
14861489| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
14871490| %prec BOXPLACE BOX '(' maybe_expr ')' expr_nostruct { $$ = mk_node("ExprBox", 1, $3, $5); }
1491+ | expr_qualified_path
14881492| block_expr
14891493| block
14901494| nonblock_prefix_expr_nostruct
@@ -1512,6 +1516,33 @@ nonblock_prefix_expr
15121516| proc_expr
15131517;
15141518
1519+ expr_qualified_path
1520+ : '<' ty_sum AS trait_ref '>' MOD_SEP ident
1521+ {
1522+ $$ = mk_node("ExprQualifiedPath", 3, $2, $4, $7);
1523+ }
1524+ | '<' ty_sum AS trait_ref '>' MOD_SEP ident generic_args
1525+ {
1526+ $$ = mk_node("ExprQualifiedPath", 4, $2, $4, $7, $8);
1527+ }
1528+ | SHL ty_sum AS trait_ref '>' MOD_SEP ident AS trait_ref '>' MOD_SEP ident
1529+ {
1530+ $$ = mk_node("ExprQualifiedPath", 3, mk_node("ExprQualifiedPath", 3, $2, $4, $7), $9, $12);
1531+ }
1532+ | SHL ty_sum AS trait_ref '>' MOD_SEP ident generic_args AS trait_ref '>' MOD_SEP ident
1533+ {
1534+ $$ = mk_node("ExprQualifiedPath", 3, mk_node("ExprQualifiedPath", 4, $2, $4, $7, $8), $10, $13);
1535+ }
1536+ | SHL ty_sum AS trait_ref '>' MOD_SEP ident AS trait_ref '>' MOD_SEP ident generic_args
1537+ {
1538+ $$ = mk_node("ExprQualifiedPath", 4, mk_node("ExprQualifiedPath", 3, $2, $4, $7), $9, $12, $13);
1539+ }
1540+ | SHL ty_sum AS trait_ref '>' MOD_SEP ident generic_args AS trait_ref '>' MOD_SEP ident generic_args
1541+ {
1542+ $$ = mk_node("ExprQualifiedPath", 4, mk_node("ExprQualifiedPath", 4, $2, $4, $7, $8), $10, $13, $14);
1543+ }
1544+
1545+
15151546lambda_expr
15161547: %prec LAMBDA
15171548 OROR ret_ty expr { $$ = mk_node("ExprFnBlock", 3, mk_none(), $2, $3); }
0 commit comments