@@ -986,16 +986,16 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
986986
987987 let make_call = |lctx : & LoweringContext , p, args| {
988988 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 )
991991 } ;
992992
993993 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 )
995995 } ;
996996
997997 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 )
999999 } ;
10001000
10011001 // let placer = <placer_expr> ;
@@ -1004,21 +1004,22 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
10041004 vec ! [ ] ,
10051005 placer_expr,
10061006 e. span ,
1007- hir:: PopUnstableBlock ) ;
1007+ hir:: PopUnstableBlock ,
1008+ None ) ;
10081009 mk_stmt_let ( lctx, placer_ident, placer_expr)
10091010 } ;
10101011
10111012 // let mut place = Placer::make_place(placer);
10121013 let s2 = {
1013- let placer = expr_ident ( lctx, e. span , placer_ident) ;
1014+ let placer = expr_ident ( lctx, e. span , placer_ident, None ) ;
10141015 let call = make_call ( lctx, & make_place, vec ! [ placer] ) ;
10151016 mk_stmt_let_mut ( lctx, place_ident, call)
10161017 } ;
10171018
10181019 // let p_ptr = Place::pointer(&mut place);
10191020 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 ) ] ;
10221023 let call = make_call ( lctx, & place_pointer, args) ;
10231024 mk_stmt_let ( lctx, p_ptr_ident, call)
10241025 } ;
@@ -1029,40 +1030,42 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
10291030 vec ! [ ] ,
10301031 value_expr,
10311032 e. span ,
1032- hir:: PopUnstableBlock ) ;
1033+ hir:: PopUnstableBlock ,
1034+ None ) ;
10331035 signal_block_expr ( lctx,
10341036 vec ! [ ] ,
10351037 value_expr,
10361038 e. span ,
1037- hir:: PopUnsafeBlock ( hir:: CompilerGenerated ) )
1039+ hir:: PopUnsafeBlock ( hir:: CompilerGenerated ) , None )
10381040 } ;
10391041
10401042 // push_unsafe!({
10411043 // std::intrinsics::move_val_init(raw_place, pop_unsafe!( EXPR ));
10421044 // InPlace::finalize(place)
10431045 // })
10441046 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 ) ;
10461048 let call_move_val_init =
10471049 hir:: StmtSemi (
10481050 make_call ( lctx, & move_val_init, vec ! [ ptr, pop_unsafe_expr] ) ,
10491051 lctx. next_id ( ) ) ;
10501052 let call_move_val_init = respan ( e. span , call_move_val_init) ;
10511053
1052- let place = expr_ident ( lctx, e. span , place_ident) ;
1054+ let place = expr_ident ( lctx, e. span , place_ident, None ) ;
10531055 let call = make_call ( lctx, & inplace_finalize, vec ! [ place] ) ;
10541056 signal_block_expr ( lctx,
10551057 vec ! [ P ( call_move_val_init) ] ,
10561058 call,
10571059 e. span ,
1058- hir:: PushUnsafeBlock ( hir:: CompilerGenerated ) )
1060+ hir:: PushUnsafeBlock ( hir:: CompilerGenerated ) , None )
10591061 } ;
10601062
10611063 signal_block_expr ( lctx,
10621064 vec ! [ s1, s2, s3] ,
10631065 expr,
10641066 e. span ,
1065- hir:: PushUnstableBlock )
1067+ hir:: PushUnstableBlock ,
1068+ e. attrs . clone ( ) )
10661069 } ) ;
10671070 }
10681071
@@ -1125,7 +1128,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
11251128 rules : hir:: DefaultBlock ,
11261129 span : span,
11271130 } ) ;
1128- expr_block ( lctx, blk)
1131+ expr_block ( lctx, blk, None )
11291132 } )
11301133 }
11311134 _ => lower_expr ( lctx, els) ,
@@ -1241,7 +1244,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
12411244 // `<pat> => <body>`
12421245 let pat_arm = {
12431246 let body = lower_block ( lctx, body) ;
1244- let body_expr = expr_block ( lctx, body) ;
1247+ let body_expr = expr_block ( lctx, body, None ) ;
12451248 arm ( vec ! [ lower_pat( lctx, pat) ] , body_expr)
12461249 } ;
12471250
@@ -1260,7 +1263,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
12601263 attrs : vec ! [ ] ,
12611264 pats : vec ! [ pat_under] ,
12621265 guard : Some ( cond) ,
1263- body : expr_block ( lctx, then) ,
1266+ body : expr_block ( lctx, then, None ) ,
12641267 } ) ;
12651268 else_opt. map ( |else_opt| ( else_opt, true ) )
12661269 }
@@ -1292,7 +1295,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
12921295 let pat_under = pat_wild ( lctx, e. span ) ;
12931296 let else_expr =
12941297 else_opt. unwrap_or_else (
1295- || expr_tuple ( lctx, e. span , vec ! [ ] ) ) ;
1298+ || expr_tuple ( lctx, e. span , vec ! [ ] , None ) ) ;
12961299 arm ( vec ! [ pat_under] , else_expr)
12971300 } ;
12981301
@@ -1302,13 +1305,15 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
13021305 arms. push ( else_arm) ;
13031306
13041307 let sub_expr = lower_expr ( lctx, sub_expr) ;
1308+ // add attributes to the outer returned expr node
13051309 expr ( lctx,
13061310 e. span ,
13071311 hir:: ExprMatch ( sub_expr,
13081312 arms,
13091313 hir:: MatchSource :: IfLetDesugar {
13101314 contains_else_clause : contains_else_clause,
1311- } ) )
1315+ } ) ,
1316+ e. attrs . clone ( ) )
13121317 } ) ;
13131318 }
13141319
@@ -1328,14 +1333,14 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
13281333 // `<pat> => <body>`
13291334 let pat_arm = {
13301335 let body = lower_block ( lctx, body) ;
1331- let body_expr = expr_block ( lctx, body) ;
1336+ let body_expr = expr_block ( lctx, body, None ) ;
13321337 arm ( vec ! [ lower_pat( lctx, pat) ] , body_expr)
13331338 } ;
13341339
13351340 // `_ => break`
13361341 let break_arm = {
13371342 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 ) ;
13391344 arm ( vec ! [ pat_under] , break_expr)
13401345 } ;
13411346
@@ -1346,11 +1351,13 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
13461351 e. span ,
13471352 hir:: ExprMatch ( sub_expr,
13481353 arms,
1349- hir:: MatchSource :: WhileLetDesugar ) ) ;
1354+ hir:: MatchSource :: WhileLetDesugar ) ,
1355+ None ) ;
13501356
13511357 // `[opt_ident]: loop { ... }`
13521358 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 ( ) )
13541361 } ) ;
13551362 }
13561363
@@ -1387,6 +1394,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
13871394 id : lctx. next_id ( ) ,
13881395 node : hir:: ExprBlock ( body_block) ,
13891396 span : body_span,
1397+ attrs : None ,
13901398 } ) ;
13911399 let pat = lower_pat ( lctx, pat) ;
13921400 let some_pat = pat_some ( lctx, e. span , pat) ;
@@ -1396,7 +1404,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
13961404
13971405 // `::std::option::Option::None => break`
13981406 let break_arm = {
1399- let break_expr = expr_break ( lctx, e. span ) ;
1407+ let break_expr = expr_break ( lctx, e. span , None ) ;
14001408
14011409 arm ( vec ! [ pat_none( lctx, e. span) ] , break_expr)
14021410 } ;
@@ -1408,20 +1416,28 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
14081416
14091417 path_global ( e. span , strs)
14101418 } ;
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 ) ;
14151427 let arms = vec ! [ pat_arm, break_arm] ;
14161428
14171429 expr ( lctx,
14181430 e. span ,
1419- hir:: ExprMatch ( next_expr, arms, hir:: MatchSource :: ForLoopDesugar ) )
1431+ hir:: ExprMatch ( next_expr, arms, hir:: MatchSource :: ForLoopDesugar ) ,
1432+ None )
14201433 } ;
14211434
14221435 // `[opt_ident]: loop { ... }`
14231436 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 ) ;
14251441
14261442 // `mut iter => { ... }`
14271443 let iter_arm = {
@@ -1440,22 +1456,24 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
14401456 path_global ( e. span , strs)
14411457 } ;
14421458
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 )
14451461 } ;
14461462
14471463 let match_expr = expr_match ( lctx,
14481464 e. span ,
14491465 into_iter_expr,
14501466 vec ! [ iter_arm] ,
1451- hir:: MatchSource :: ForLoopDesugar ) ;
1467+ hir:: MatchSource :: ForLoopDesugar ,
1468+ None ) ;
14521469
14531470 // `{ let result = ...; result }`
14541471 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 ) ;
14571474 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 ( ) )
14591477 } ) ;
14601478 }
14611479
0 commit comments