@@ -45,6 +45,7 @@ extern char *yytext;
45
45
%token DOTDOTDOT
46
46
%token MOD_SEP
47
47
%token RARROW
48
+ %token LARROW
48
49
%token FAT_ARROW
49
50
%token LIT_BYTE
50
51
%token LIT_CHAR
@@ -167,7 +168,8 @@ extern char *yytext;
167
168
// prefix_exprs
168
169
%precedence RETURN
169
170
170
- %left '=' SHLEQ SHREQ MINUSEQ ANDEQ OREQ PLUSEQ STAREQ SLASHEQ CARETEQ PERCENTEQ
171
+ %right '=' SHLEQ SHREQ MINUSEQ ANDEQ OREQ PLUSEQ STAREQ SLASHEQ CARETEQ PERCENTEQ
172
+ %right LARROW
171
173
%left OROR
172
174
%left ANDAND
173
175
%left EQEQ NE
@@ -1316,6 +1318,7 @@ nonblock_expr
1316
1318
| RETURN expr { $$ = mk_node("ExprRet", 1, $2); }
1317
1319
| BREAK { $$ = mk_node("ExprBreak", 0); }
1318
1320
| BREAK lifetime { $$ = mk_node("ExprBreak", 1, $2); }
1321
+ | nonblock_expr LARROW expr { $$ = mk_node("ExprInPlace", 2, $1, $3); }
1319
1322
| nonblock_expr '=' expr { $$ = mk_node("ExprAssign", 2, $1, $3); }
1320
1323
| nonblock_expr SHLEQ expr { $$ = mk_node("ExprAssignShl", 2, $1, $3); }
1321
1324
| nonblock_expr SHREQ expr { $$ = mk_node("ExprAssignShr", 2, $1, $3); }
@@ -1375,6 +1378,7 @@ expr
1375
1378
| RETURN expr { $$ = mk_node("ExprRet", 1, $2); }
1376
1379
| BREAK { $$ = mk_node("ExprBreak", 0); }
1377
1380
| BREAK ident { $$ = mk_node("ExprBreak", 1, $2); }
1381
+ | expr LARROW expr { $$ = mk_node("ExprInPlace", 2, $1, $3); }
1378
1382
| expr '=' expr { $$ = mk_node("ExprAssign", 2, $1, $3); }
1379
1383
| expr SHLEQ expr { $$ = mk_node("ExprAssignShl", 2, $1, $3); }
1380
1384
| expr SHREQ expr { $$ = mk_node("ExprAssignShr", 2, $1, $3); }
@@ -1435,6 +1439,7 @@ nonparen_expr
1435
1439
| RETURN expr { $$ = mk_node("ExprRet", 1, $2); }
1436
1440
| BREAK { $$ = mk_node("ExprBreak", 0); }
1437
1441
| BREAK ident { $$ = mk_node("ExprBreak", 1, $2); }
1442
+ | nonparen_expr LARROW nonparen_expr { $$ = mk_node("ExprInPlace", 2, $1, $3); }
1438
1443
| nonparen_expr '=' nonparen_expr { $$ = mk_node("ExprAssign", 2, $1, $3); }
1439
1444
| nonparen_expr SHLEQ nonparen_expr { $$ = mk_node("ExprAssignShl", 2, $1, $3); }
1440
1445
| nonparen_expr SHREQ nonparen_expr { $$ = mk_node("ExprAssignShr", 2, $1, $3); }
@@ -1495,6 +1500,7 @@ expr_nostruct
1495
1500
| RETURN expr { $$ = mk_node("ExprRet", 1, $2); }
1496
1501
| BREAK { $$ = mk_node("ExprBreak", 0); }
1497
1502
| BREAK ident { $$ = mk_node("ExprBreak", 1, $2); }
1503
+ | expr_nostruct LARROW expr_nostruct { $$ = mk_node("ExprInPlace", 2, $1, $3); }
1498
1504
| expr_nostruct '=' expr_nostruct { $$ = mk_node("ExprAssign", 2, $1, $3); }
1499
1505
| expr_nostruct SHLEQ expr_nostruct { $$ = mk_node("ExprAssignShl", 2, $1, $3); }
1500
1506
| expr_nostruct SHREQ expr_nostruct { $$ = mk_node("ExprAssignShr", 2, $1, $3); }
@@ -1794,6 +1800,7 @@ unpaired_token
1794
1800
| GE { $$ = mk_atom(yytext); }
1795
1801
| ANDAND { $$ = mk_atom(yytext); }
1796
1802
| OROR { $$ = mk_atom(yytext); }
1803
+ | LARROW { $$ = mk_atom(yytext); }
1797
1804
| SHLEQ { $$ = mk_atom(yytext); }
1798
1805
| SHREQ { $$ = mk_atom(yytext); }
1799
1806
| MINUSEQ { $$ = mk_atom(yytext); }
0 commit comments