@@ -986,16 +986,16 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
986
986
987
987
let make_call = |lctx : & LoweringContext , p, args| {
988
988
let path = core_path ( lctx, e. span , p) ;
989
- let path = expr_path ( lctx, path) ;
990
- expr_call ( lctx, e. span , path, args)
989
+ let path = expr_path ( lctx, path, None ) ;
990
+ expr_call ( lctx, e. span , path, args, None )
991
991
} ;
992
992
993
993
let mk_stmt_let = |lctx : & LoweringContext , bind, expr| {
994
- stmt_let ( lctx, e. span , false , bind, expr)
994
+ stmt_let ( lctx, e. span , false , bind, expr, None )
995
995
} ;
996
996
997
997
let mk_stmt_let_mut = |lctx : & LoweringContext , bind, expr| {
998
- stmt_let ( lctx, e. span , true , bind, expr)
998
+ stmt_let ( lctx, e. span , true , bind, expr, None )
999
999
} ;
1000
1000
1001
1001
// let placer = <placer_expr> ;
@@ -1004,21 +1004,22 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1004
1004
vec ! [ ] ,
1005
1005
placer_expr,
1006
1006
e. span ,
1007
- hir:: PopUnstableBlock ) ;
1007
+ hir:: PopUnstableBlock ,
1008
+ None ) ;
1008
1009
mk_stmt_let ( lctx, placer_ident, placer_expr)
1009
1010
} ;
1010
1011
1011
1012
// let mut place = Placer::make_place(placer);
1012
1013
let s2 = {
1013
- let placer = expr_ident ( lctx, e. span , placer_ident) ;
1014
+ let placer = expr_ident ( lctx, e. span , placer_ident, None ) ;
1014
1015
let call = make_call ( lctx, & make_place, vec ! [ placer] ) ;
1015
1016
mk_stmt_let_mut ( lctx, place_ident, call)
1016
1017
} ;
1017
1018
1018
1019
// let p_ptr = Place::pointer(&mut place);
1019
1020
let s3 = {
1020
- let agent = expr_ident ( lctx, e. span , place_ident) ;
1021
- let args = vec ! [ expr_mut_addr_of( lctx, e. span, agent) ] ;
1021
+ let agent = expr_ident ( lctx, e. span , place_ident, None ) ;
1022
+ let args = vec ! [ expr_mut_addr_of( lctx, e. span, agent, None ) ] ;
1022
1023
let call = make_call ( lctx, & place_pointer, args) ;
1023
1024
mk_stmt_let ( lctx, p_ptr_ident, call)
1024
1025
} ;
@@ -1029,40 +1030,42 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1029
1030
vec ! [ ] ,
1030
1031
value_expr,
1031
1032
e. span ,
1032
- hir:: PopUnstableBlock ) ;
1033
+ hir:: PopUnstableBlock ,
1034
+ None ) ;
1033
1035
signal_block_expr ( lctx,
1034
1036
vec ! [ ] ,
1035
1037
value_expr,
1036
1038
e. span ,
1037
- hir:: PopUnsafeBlock ( hir:: CompilerGenerated ) )
1039
+ hir:: PopUnsafeBlock ( hir:: CompilerGenerated ) , None )
1038
1040
} ;
1039
1041
1040
1042
// push_unsafe!({
1041
1043
// std::intrinsics::move_val_init(raw_place, pop_unsafe!( EXPR ));
1042
1044
// InPlace::finalize(place)
1043
1045
// })
1044
1046
let expr = {
1045
- let ptr = expr_ident ( lctx, e. span , p_ptr_ident) ;
1047
+ let ptr = expr_ident ( lctx, e. span , p_ptr_ident, None ) ;
1046
1048
let call_move_val_init =
1047
1049
hir:: StmtSemi (
1048
1050
make_call ( lctx, & move_val_init, vec ! [ ptr, pop_unsafe_expr] ) ,
1049
1051
lctx. next_id ( ) ) ;
1050
1052
let call_move_val_init = respan ( e. span , call_move_val_init) ;
1051
1053
1052
- let place = expr_ident ( lctx, e. span , place_ident) ;
1054
+ let place = expr_ident ( lctx, e. span , place_ident, None ) ;
1053
1055
let call = make_call ( lctx, & inplace_finalize, vec ! [ place] ) ;
1054
1056
signal_block_expr ( lctx,
1055
1057
vec ! [ P ( call_move_val_init) ] ,
1056
1058
call,
1057
1059
e. span ,
1058
- hir:: PushUnsafeBlock ( hir:: CompilerGenerated ) )
1060
+ hir:: PushUnsafeBlock ( hir:: CompilerGenerated ) , None )
1059
1061
} ;
1060
1062
1061
1063
signal_block_expr ( lctx,
1062
1064
vec ! [ s1, s2, s3] ,
1063
1065
expr,
1064
1066
e. span ,
1065
- hir:: PushUnstableBlock )
1067
+ hir:: PushUnstableBlock ,
1068
+ e. attrs . clone ( ) )
1066
1069
} ) ;
1067
1070
}
1068
1071
@@ -1125,7 +1128,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1125
1128
rules : hir:: DefaultBlock ,
1126
1129
span : span,
1127
1130
} ) ;
1128
- expr_block ( lctx, blk)
1131
+ expr_block ( lctx, blk, None )
1129
1132
} )
1130
1133
}
1131
1134
_ => lower_expr ( lctx, els) ,
@@ -1241,7 +1244,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1241
1244
// `<pat> => <body>`
1242
1245
let pat_arm = {
1243
1246
let body = lower_block ( lctx, body) ;
1244
- let body_expr = expr_block ( lctx, body) ;
1247
+ let body_expr = expr_block ( lctx, body, None ) ;
1245
1248
arm ( vec ! [ lower_pat( lctx, pat) ] , body_expr)
1246
1249
} ;
1247
1250
@@ -1260,7 +1263,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1260
1263
attrs : vec ! [ ] ,
1261
1264
pats : vec ! [ pat_under] ,
1262
1265
guard : Some ( cond) ,
1263
- body : expr_block ( lctx, then) ,
1266
+ body : expr_block ( lctx, then, None ) ,
1264
1267
} ) ;
1265
1268
else_opt. map ( |else_opt| ( else_opt, true ) )
1266
1269
}
@@ -1292,7 +1295,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1292
1295
let pat_under = pat_wild ( lctx, e. span ) ;
1293
1296
let else_expr =
1294
1297
else_opt. unwrap_or_else (
1295
- || expr_tuple ( lctx, e. span , vec ! [ ] ) ) ;
1298
+ || expr_tuple ( lctx, e. span , vec ! [ ] , None ) ) ;
1296
1299
arm ( vec ! [ pat_under] , else_expr)
1297
1300
} ;
1298
1301
@@ -1302,13 +1305,15 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1302
1305
arms. push ( else_arm) ;
1303
1306
1304
1307
let sub_expr = lower_expr ( lctx, sub_expr) ;
1308
+ // add attributes to the outer returned expr node
1305
1309
expr ( lctx,
1306
1310
e. span ,
1307
1311
hir:: ExprMatch ( sub_expr,
1308
1312
arms,
1309
1313
hir:: MatchSource :: IfLetDesugar {
1310
1314
contains_else_clause : contains_else_clause,
1311
- } ) )
1315
+ } ) ,
1316
+ e. attrs . clone ( ) )
1312
1317
} ) ;
1313
1318
}
1314
1319
@@ -1328,14 +1333,14 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1328
1333
// `<pat> => <body>`
1329
1334
let pat_arm = {
1330
1335
let body = lower_block ( lctx, body) ;
1331
- let body_expr = expr_block ( lctx, body) ;
1336
+ let body_expr = expr_block ( lctx, body, None ) ;
1332
1337
arm ( vec ! [ lower_pat( lctx, pat) ] , body_expr)
1333
1338
} ;
1334
1339
1335
1340
// `_ => break`
1336
1341
let break_arm = {
1337
1342
let pat_under = pat_wild ( lctx, e. span ) ;
1338
- let break_expr = expr_break ( lctx, e. span ) ;
1343
+ let break_expr = expr_break ( lctx, e. span , None ) ;
1339
1344
arm ( vec ! [ pat_under] , break_expr)
1340
1345
} ;
1341
1346
@@ -1346,11 +1351,13 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1346
1351
e. span ,
1347
1352
hir:: ExprMatch ( sub_expr,
1348
1353
arms,
1349
- hir:: MatchSource :: WhileLetDesugar ) ) ;
1354
+ hir:: MatchSource :: WhileLetDesugar ) ,
1355
+ None ) ;
1350
1356
1351
1357
// `[opt_ident]: loop { ... }`
1352
1358
let loop_block = block_expr ( lctx, match_expr) ;
1353
- expr ( lctx, e. span , hir:: ExprLoop ( loop_block, opt_ident) )
1359
+ // add attributes to the outer returned expr node
1360
+ expr ( lctx, e. span , hir:: ExprLoop ( loop_block, opt_ident) , e. attrs . clone ( ) )
1354
1361
} ) ;
1355
1362
}
1356
1363
@@ -1387,6 +1394,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1387
1394
id : lctx. next_id ( ) ,
1388
1395
node : hir:: ExprBlock ( body_block) ,
1389
1396
span : body_span,
1397
+ attrs : None ,
1390
1398
} ) ;
1391
1399
let pat = lower_pat ( lctx, pat) ;
1392
1400
let some_pat = pat_some ( lctx, e. span , pat) ;
@@ -1396,7 +1404,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1396
1404
1397
1405
// `::std::option::Option::None => break`
1398
1406
let break_arm = {
1399
- let break_expr = expr_break ( lctx, e. span ) ;
1407
+ let break_expr = expr_break ( lctx, e. span , None ) ;
1400
1408
1401
1409
arm ( vec ! [ pat_none( lctx, e. span) ] , break_expr)
1402
1410
} ;
@@ -1408,20 +1416,28 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1408
1416
1409
1417
path_global ( e. span , strs)
1410
1418
} ;
1411
- let iter = expr_ident ( lctx, e. span , iter) ;
1412
- let ref_mut_iter = expr_mut_addr_of ( lctx, e. span , iter) ;
1413
- let next_path = expr_path ( lctx, next_path) ;
1414
- let next_expr = expr_call ( lctx, e. span , next_path, vec ! [ ref_mut_iter] ) ;
1419
+ let iter = expr_ident ( lctx, e. span , iter, None ) ;
1420
+ let ref_mut_iter = expr_mut_addr_of ( lctx, e. span , iter, None ) ;
1421
+ let next_path = expr_path ( lctx, next_path, None ) ;
1422
+ let next_expr = expr_call ( lctx,
1423
+ e. span ,
1424
+ next_path,
1425
+ vec ! [ ref_mut_iter] ,
1426
+ None ) ;
1415
1427
let arms = vec ! [ pat_arm, break_arm] ;
1416
1428
1417
1429
expr ( lctx,
1418
1430
e. span ,
1419
- hir:: ExprMatch ( next_expr, arms, hir:: MatchSource :: ForLoopDesugar ) )
1431
+ hir:: ExprMatch ( next_expr, arms, hir:: MatchSource :: ForLoopDesugar ) ,
1432
+ None )
1420
1433
} ;
1421
1434
1422
1435
// `[opt_ident]: loop { ... }`
1423
1436
let loop_block = block_expr ( lctx, match_expr) ;
1424
- let loop_expr = expr ( lctx, e. span , hir:: ExprLoop ( loop_block, opt_ident) ) ;
1437
+ let loop_expr = expr ( lctx,
1438
+ e. span ,
1439
+ hir:: ExprLoop ( loop_block, opt_ident) ,
1440
+ None ) ;
1425
1441
1426
1442
// `mut iter => { ... }`
1427
1443
let iter_arm = {
@@ -1440,22 +1456,24 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
1440
1456
path_global ( e. span , strs)
1441
1457
} ;
1442
1458
1443
- let into_iter = expr_path ( lctx, into_iter_path) ;
1444
- expr_call ( lctx, e. span , into_iter, vec ! [ head] )
1459
+ let into_iter = expr_path ( lctx, into_iter_path, None ) ;
1460
+ expr_call ( lctx, e. span , into_iter, vec ! [ head] , None )
1445
1461
} ;
1446
1462
1447
1463
let match_expr = expr_match ( lctx,
1448
1464
e. span ,
1449
1465
into_iter_expr,
1450
1466
vec ! [ iter_arm] ,
1451
- hir:: MatchSource :: ForLoopDesugar ) ;
1467
+ hir:: MatchSource :: ForLoopDesugar ,
1468
+ None ) ;
1452
1469
1453
1470
// `{ let result = ...; result }`
1454
1471
let result_ident = lctx. str_to_ident ( "result" ) ;
1455
- let let_stmt = stmt_let ( lctx, e. span , false , result_ident, match_expr) ;
1456
- let result = expr_ident ( lctx, e. span , result_ident) ;
1472
+ let let_stmt = stmt_let ( lctx, e. span , false , result_ident, match_expr, None ) ;
1473
+ let result = expr_ident ( lctx, e. span , result_ident, None ) ;
1457
1474
let block = block_all ( lctx, e. span , vec ! [ let_stmt] , Some ( result) ) ;
1458
- expr_block ( lctx, block)
1475
+ // add the attributes to the outer returned expr node
1476
+ expr_block ( lctx, block, e. attrs . clone ( ) )
1459
1477
} ) ;
1460
1478
}
1461
1479
0 commit comments