1
Fork 0

Rebase fixup for lower.rs

This commit is contained in:
Marvin Löbel 2015-11-24 19:13:32 +01:00
parent 296c3613ca
commit 02a18a659a
2 changed files with 55 additions and 37 deletions

View file

@ -864,7 +864,7 @@ pub fn noop_fold_impl_item<T: Folder>(i: P<ImplItem>, folder: &mut T) -> P<ImplI
pub fn noop_fold_mod<T: Folder>(Mod { inner, item_ids }: Mod, folder: &mut T) -> Mod {
Mod {
inner: folder.new_span(inner),
items_ids: item_ids.move_map(|x| folder.fold_item_id(x)),
item_ids: item_ids.move_map(|x| folder.fold_item_id(x)),
}
}

View file

@ -986,16 +986,16 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
let make_call = |lctx: &LoweringContext, p, args| {
let path = core_path(lctx, e.span, p);
let path = expr_path(lctx, path);
expr_call(lctx, e.span, path, args)
let path = expr_path(lctx, path, None);
expr_call(lctx, e.span, path, args, None)
};
let mk_stmt_let = |lctx: &LoweringContext, bind, expr| {
stmt_let(lctx, e.span, false, bind, expr)
stmt_let(lctx, e.span, false, bind, expr, None)
};
let mk_stmt_let_mut = |lctx: &LoweringContext, bind, expr| {
stmt_let(lctx, e.span, true, bind, expr)
stmt_let(lctx, e.span, true, bind, expr, None)
};
// let placer = <placer_expr> ;
@ -1004,21 +1004,22 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
vec![],
placer_expr,
e.span,
hir::PopUnstableBlock);
hir::PopUnstableBlock,
None);
mk_stmt_let(lctx, placer_ident, placer_expr)
};
// let mut place = Placer::make_place(placer);
let s2 = {
let placer = expr_ident(lctx, e.span, placer_ident);
let placer = expr_ident(lctx, e.span, placer_ident, None);
let call = make_call(lctx, &make_place, vec![placer]);
mk_stmt_let_mut(lctx, place_ident, call)
};
// let p_ptr = Place::pointer(&mut place);
let s3 = {
let agent = expr_ident(lctx, e.span, place_ident);
let args = vec![expr_mut_addr_of(lctx, e.span, agent)];
let agent = expr_ident(lctx, e.span, place_ident, None);
let args = vec![expr_mut_addr_of(lctx, e.span, agent, None)];
let call = make_call(lctx, &place_pointer, args);
mk_stmt_let(lctx, p_ptr_ident, call)
};
@ -1029,12 +1030,13 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
vec![],
value_expr,
e.span,
hir::PopUnstableBlock);
hir::PopUnstableBlock,
None);
signal_block_expr(lctx,
vec![],
value_expr,
e.span,
hir::PopUnsafeBlock(hir::CompilerGenerated))
hir::PopUnsafeBlock(hir::CompilerGenerated), None)
};
// push_unsafe!({
@ -1042,27 +1044,28 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
// InPlace::finalize(place)
// })
let expr = {
let ptr = expr_ident(lctx, e.span, p_ptr_ident);
let ptr = expr_ident(lctx, e.span, p_ptr_ident, None);
let call_move_val_init =
hir::StmtSemi(
make_call(lctx, &move_val_init, vec![ptr, pop_unsafe_expr]),
lctx.next_id());
let call_move_val_init = respan(e.span, call_move_val_init);
let place = expr_ident(lctx, e.span, place_ident);
let place = expr_ident(lctx, e.span, place_ident, None);
let call = make_call(lctx, &inplace_finalize, vec![place]);
signal_block_expr(lctx,
vec![P(call_move_val_init)],
call,
e.span,
hir::PushUnsafeBlock(hir::CompilerGenerated))
hir::PushUnsafeBlock(hir::CompilerGenerated), None)
};
signal_block_expr(lctx,
vec![s1, s2, s3],
expr,
e.span,
hir::PushUnstableBlock)
hir::PushUnstableBlock,
e.attrs.clone())
});
}
@ -1125,7 +1128,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
rules: hir::DefaultBlock,
span: span,
});
expr_block(lctx, blk)
expr_block(lctx, blk, None)
})
}
_ => lower_expr(lctx, els),
@ -1241,7 +1244,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
// `<pat> => <body>`
let pat_arm = {
let body = lower_block(lctx, body);
let body_expr = expr_block(lctx, body);
let body_expr = expr_block(lctx, body, None);
arm(vec![lower_pat(lctx, pat)], body_expr)
};
@ -1260,7 +1263,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
attrs: vec![],
pats: vec![pat_under],
guard: Some(cond),
body: expr_block(lctx, then),
body: expr_block(lctx, then, None),
});
else_opt.map(|else_opt| (else_opt, true))
}
@ -1292,7 +1295,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
let pat_under = pat_wild(lctx, e.span);
let else_expr =
else_opt.unwrap_or_else(
|| expr_tuple(lctx, e.span, vec![]));
|| expr_tuple(lctx, e.span, vec![], None));
arm(vec![pat_under], else_expr)
};
@ -1302,13 +1305,15 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
arms.push(else_arm);
let sub_expr = lower_expr(lctx, sub_expr);
// add attributes to the outer returned expr node
expr(lctx,
e.span,
hir::ExprMatch(sub_expr,
arms,
hir::MatchSource::IfLetDesugar {
contains_else_clause: contains_else_clause,
}))
}),
e.attrs.clone())
});
}
@ -1328,14 +1333,14 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
// `<pat> => <body>`
let pat_arm = {
let body = lower_block(lctx, body);
let body_expr = expr_block(lctx, body);
let body_expr = expr_block(lctx, body, None);
arm(vec![lower_pat(lctx, pat)], body_expr)
};
// `_ => break`
let break_arm = {
let pat_under = pat_wild(lctx, e.span);
let break_expr = expr_break(lctx, e.span);
let break_expr = expr_break(lctx, e.span, None);
arm(vec![pat_under], break_expr)
};
@ -1346,11 +1351,13 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
e.span,
hir::ExprMatch(sub_expr,
arms,
hir::MatchSource::WhileLetDesugar));
hir::MatchSource::WhileLetDesugar),
None);
// `[opt_ident]: loop { ... }`
let loop_block = block_expr(lctx, match_expr);
expr(lctx, e.span, hir::ExprLoop(loop_block, opt_ident))
// add attributes to the outer returned expr node
expr(lctx, e.span, hir::ExprLoop(loop_block, opt_ident), e.attrs.clone())
});
}
@ -1387,6 +1394,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
id: lctx.next_id(),
node: hir::ExprBlock(body_block),
span: body_span,
attrs: None,
});
let pat = lower_pat(lctx, pat);
let some_pat = pat_some(lctx, e.span, pat);
@ -1396,7 +1404,7 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
// `::std::option::Option::None => break`
let break_arm = {
let break_expr = expr_break(lctx, e.span);
let break_expr = expr_break(lctx, e.span, None);
arm(vec![pat_none(lctx, e.span)], break_expr)
};
@ -1408,20 +1416,28 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
path_global(e.span, strs)
};
let iter = expr_ident(lctx, e.span, iter);
let ref_mut_iter = expr_mut_addr_of(lctx, e.span, iter);
let next_path = expr_path(lctx, next_path);
let next_expr = expr_call(lctx, e.span, next_path, vec![ref_mut_iter]);
let iter = expr_ident(lctx, e.span, iter, None);
let ref_mut_iter = expr_mut_addr_of(lctx, e.span, iter, None);
let next_path = expr_path(lctx, next_path, None);
let next_expr = expr_call(lctx,
e.span,
next_path,
vec![ref_mut_iter],
None);
let arms = vec![pat_arm, break_arm];
expr(lctx,
e.span,
hir::ExprMatch(next_expr, arms, hir::MatchSource::ForLoopDesugar))
hir::ExprMatch(next_expr, arms, hir::MatchSource::ForLoopDesugar),
None)
};
// `[opt_ident]: loop { ... }`
let loop_block = block_expr(lctx, match_expr);
let loop_expr = expr(lctx, e.span, hir::ExprLoop(loop_block, opt_ident));
let loop_expr = expr(lctx,
e.span,
hir::ExprLoop(loop_block, opt_ident),
None);
// `mut iter => { ... }`
let iter_arm = {
@ -1440,22 +1456,24 @@ pub fn lower_expr(lctx: &LoweringContext, e: &Expr) -> P<hir::Expr> {
path_global(e.span, strs)
};
let into_iter = expr_path(lctx, into_iter_path);
expr_call(lctx, e.span, into_iter, vec![head])
let into_iter = expr_path(lctx, into_iter_path, None);
expr_call(lctx, e.span, into_iter, vec![head], None)
};
let match_expr = expr_match(lctx,
e.span,
into_iter_expr,
vec![iter_arm],
hir::MatchSource::ForLoopDesugar);
hir::MatchSource::ForLoopDesugar,
None);
// `{ let result = ...; result }`
let result_ident = lctx.str_to_ident("result");
let let_stmt = stmt_let(lctx, e.span, false, result_ident, match_expr);
let result = expr_ident(lctx, e.span, result_ident);
let let_stmt = stmt_let(lctx, e.span, false, result_ident, match_expr, None);
let result = expr_ident(lctx, e.span, result_ident, None);
let block = block_all(lctx, e.span, vec![let_stmt], Some(result));
expr_block(lctx, block)
// add the attributes to the outer returned expr node
expr_block(lctx, block, e.attrs.clone())
});
}