@@ -1309,6 +1309,7 @@ nonblock_expr
1309
1309
| nonblock_expr AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
1310
1310
| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
1311
1311
| %prec BOXPLACE BOX '(' maybe_expr ')' nonblock_expr { $$ = mk_node("ExprBox", 2, $3, $5); }
1312
+ | expr_qualified_path
1312
1313
| nonblock_prefix_expr
1313
1314
;
1314
1315
@@ -1367,6 +1368,7 @@ expr
1367
1368
| expr AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
1368
1369
| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
1369
1370
| %prec BOXPLACE BOX '(' maybe_expr ')' expr { $$ = mk_node("ExprBox", 2, $3, $5); }
1371
+ | expr_qualified_path
1370
1372
| block_expr
1371
1373
| block
1372
1374
| nonblock_prefix_expr
@@ -1426,6 +1428,7 @@ nonparen_expr
1426
1428
| nonparen_expr AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
1427
1429
| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
1428
1430
| %prec BOXPLACE BOX '(' maybe_expr ')' expr { $$ = mk_node("ExprBox", 1, $3, $5); }
1431
+ | expr_qualified_path
1429
1432
| block_expr
1430
1433
| block
1431
1434
| nonblock_prefix_expr
@@ -1485,6 +1488,7 @@ expr_nostruct
1485
1488
| expr_nostruct AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
1486
1489
| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
1487
1490
| %prec BOXPLACE BOX '(' maybe_expr ')' expr_nostruct { $$ = mk_node("ExprBox", 1, $3, $5); }
1491
+ | expr_qualified_path
1488
1492
| block_expr
1489
1493
| block
1490
1494
| nonblock_prefix_expr_nostruct
@@ -1512,6 +1516,33 @@ nonblock_prefix_expr
1512
1516
| proc_expr
1513
1517
;
1514
1518
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
+
1515
1546
lambda_expr
1516
1547
: %prec LAMBDA
1517
1548
OROR ret_ty expr { $$ = mk_node("ExprFnBlock", 3, mk_none(), $2, $3); }
0 commit comments