Skip to content

Commit 41d6513

Browse files
committed
Bison grammar: add qualified path expressions
1 parent ad6bb17 commit 41d6513

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/grammar/parser-lalr.y

+31
Original file line numberDiff line numberDiff line change
@@ -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+
15151546
lambda_expr
15161547
: %prec LAMBDA
15171548
OROR ret_ty expr { $$ = mk_node("ExprFnBlock", 3, mk_none(), $2, $3); }

0 commit comments

Comments
 (0)