Reduced repetition by refactoring new body to constructor function
This commit is contained in:
parent
eda2d416f6
commit
63b36e7127
1 changed files with 40 additions and 41 deletions
|
@ -196,20 +196,13 @@ fn build_drop_shim<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, ty: Option<Ty<'tcx>>)
|
|||
block(&mut blocks, TerminatorKind::Goto { target: return_block });
|
||||
block(&mut blocks, TerminatorKind::Return);
|
||||
|
||||
let mut body = Body::new(
|
||||
blocks,
|
||||
IndexVec::from_elem_n(
|
||||
SourceScopeData { span: span, parent_scope: None }, 1
|
||||
),
|
||||
ClearCrossCrate::Clear,
|
||||
local_decls_for_sig(&sig, span),
|
||||
IndexVec::new(),
|
||||
sig.inputs().len(),
|
||||
vec![],
|
||||
span,
|
||||
vec![],
|
||||
None,
|
||||
);
|
||||
let mut body = new_body(blocks,
|
||||
IndexVec::from_elem_n(
|
||||
SourceScopeData { span, parent_scope: None }, 1
|
||||
),
|
||||
local_decls_for_sig(&sig, span),
|
||||
sig.inputs().len(),
|
||||
span);
|
||||
|
||||
if let Some(..) = ty {
|
||||
// The first argument (index 0), but add 1 for the return value.
|
||||
|
@ -248,6 +241,27 @@ fn build_drop_shim<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, ty: Option<Ty<'tcx>>)
|
|||
body
|
||||
}
|
||||
|
||||
fn new_body<'tcx>(basic_blocks: IndexVec<BasicBlock, BasicBlockData<'tcx>>,
|
||||
source_scopes: IndexVec<SourceScope, SourceScopeData>,
|
||||
local_decls: IndexVec<Local, LocalDecl<'tcx>>,
|
||||
arg_count: usize,
|
||||
span: Span,
|
||||
) -> Body<'tcx> {
|
||||
Body::new(
|
||||
basic_blocks,
|
||||
source_scopes,
|
||||
ClearCrossCrate::Clear,
|
||||
None,
|
||||
local_decls,
|
||||
IndexVec::new(),
|
||||
arg_count,
|
||||
vec![],
|
||||
span,
|
||||
vec![],
|
||||
None,
|
||||
)
|
||||
}
|
||||
|
||||
pub struct DropShimElaborator<'a, 'tcx> {
|
||||
pub body: &'a Body<'tcx>,
|
||||
pub patch: MirPatch<'tcx>,
|
||||
|
@ -363,19 +377,13 @@ impl CloneShimBuilder<'tcx> {
|
|||
}
|
||||
|
||||
fn into_mir(self) -> Body<'tcx> {
|
||||
Body::new(
|
||||
self.blocks,
|
||||
IndexVec::from_elem_n(
|
||||
SourceScopeData { span: self.span, parent_scope: None }, 1
|
||||
),
|
||||
ClearCrossCrate::Clear,
|
||||
self.local_decls,
|
||||
IndexVec::new(),
|
||||
self.sig.inputs().len(),
|
||||
vec![],
|
||||
self.span,
|
||||
vec![],
|
||||
None,
|
||||
new_body(self.blocks,
|
||||
IndexVec::from_elem_n(
|
||||
SourceScopeData { span: self.span, parent_scope: None }, 1
|
||||
),
|
||||
self.local_decls,
|
||||
self.sig.inputs().len(),
|
||||
self.span,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -824,20 +832,16 @@ fn build_call_shim<'tcx>(
|
|||
block(&mut blocks, vec![], TerminatorKind::Resume, true);
|
||||
}
|
||||
|
||||
let mut body = Body::new(
|
||||
let mut body = new_body(
|
||||
blocks,
|
||||
IndexVec::from_elem_n(
|
||||
SourceScopeData { span: span, parent_scope: None }, 1
|
||||
SourceScopeData { span, parent_scope: None }, 1
|
||||
),
|
||||
ClearCrossCrate::Clear,
|
||||
local_decls,
|
||||
IndexVec::new(),
|
||||
sig.inputs().len(),
|
||||
vec![],
|
||||
span,
|
||||
vec![],
|
||||
None,
|
||||
);
|
||||
|
||||
if let Abi::RustCall = sig.abi {
|
||||
body.spread_arg = Some(Local::new(sig.inputs().len()));
|
||||
}
|
||||
|
@ -911,19 +915,14 @@ pub fn build_adt_ctor(tcx: TyCtxt<'_>, ctor_id: DefId) -> &Body<'_> {
|
|||
is_cleanup: false
|
||||
};
|
||||
|
||||
let body = Body::new(
|
||||
let body = new_body(
|
||||
IndexVec::from_elem_n(start_block, 1),
|
||||
IndexVec::from_elem_n(
|
||||
SourceScopeData { span: span, parent_scope: None }, 1
|
||||
SourceScopeData { span, parent_scope: None }, 1
|
||||
),
|
||||
ClearCrossCrate::Clear,
|
||||
local_decls,
|
||||
IndexVec::new(),
|
||||
sig.inputs().len(),
|
||||
vec![],
|
||||
span,
|
||||
vec![],
|
||||
None,
|
||||
);
|
||||
|
||||
crate::util::dump_mir(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue