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::Goto { target: return_block });
|
||||||
block(&mut blocks, TerminatorKind::Return);
|
block(&mut blocks, TerminatorKind::Return);
|
||||||
|
|
||||||
let mut body = Body::new(
|
let mut body = new_body(blocks,
|
||||||
blocks,
|
IndexVec::from_elem_n(
|
||||||
IndexVec::from_elem_n(
|
SourceScopeData { span, parent_scope: None }, 1
|
||||||
SourceScopeData { span: span, parent_scope: None }, 1
|
),
|
||||||
),
|
local_decls_for_sig(&sig, span),
|
||||||
ClearCrossCrate::Clear,
|
sig.inputs().len(),
|
||||||
local_decls_for_sig(&sig, span),
|
span);
|
||||||
IndexVec::new(),
|
|
||||||
sig.inputs().len(),
|
|
||||||
vec![],
|
|
||||||
span,
|
|
||||||
vec![],
|
|
||||||
None,
|
|
||||||
);
|
|
||||||
|
|
||||||
if let Some(..) = ty {
|
if let Some(..) = ty {
|
||||||
// The first argument (index 0), but add 1 for the return value.
|
// 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
|
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 struct DropShimElaborator<'a, 'tcx> {
|
||||||
pub body: &'a Body<'tcx>,
|
pub body: &'a Body<'tcx>,
|
||||||
pub patch: MirPatch<'tcx>,
|
pub patch: MirPatch<'tcx>,
|
||||||
|
@ -363,19 +377,13 @@ impl CloneShimBuilder<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn into_mir(self) -> Body<'tcx> {
|
fn into_mir(self) -> Body<'tcx> {
|
||||||
Body::new(
|
new_body(self.blocks,
|
||||||
self.blocks,
|
IndexVec::from_elem_n(
|
||||||
IndexVec::from_elem_n(
|
SourceScopeData { span: self.span, parent_scope: None }, 1
|
||||||
SourceScopeData { span: self.span, parent_scope: None }, 1
|
),
|
||||||
),
|
self.local_decls,
|
||||||
ClearCrossCrate::Clear,
|
self.sig.inputs().len(),
|
||||||
self.local_decls,
|
self.span,
|
||||||
IndexVec::new(),
|
|
||||||
self.sig.inputs().len(),
|
|
||||||
vec![],
|
|
||||||
self.span,
|
|
||||||
vec![],
|
|
||||||
None,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -824,20 +832,16 @@ fn build_call_shim<'tcx>(
|
||||||
block(&mut blocks, vec![], TerminatorKind::Resume, true);
|
block(&mut blocks, vec![], TerminatorKind::Resume, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut body = Body::new(
|
let mut body = new_body(
|
||||||
blocks,
|
blocks,
|
||||||
IndexVec::from_elem_n(
|
IndexVec::from_elem_n(
|
||||||
SourceScopeData { span: span, parent_scope: None }, 1
|
SourceScopeData { span, parent_scope: None }, 1
|
||||||
),
|
),
|
||||||
ClearCrossCrate::Clear,
|
|
||||||
local_decls,
|
local_decls,
|
||||||
IndexVec::new(),
|
|
||||||
sig.inputs().len(),
|
sig.inputs().len(),
|
||||||
vec![],
|
|
||||||
span,
|
span,
|
||||||
vec![],
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Abi::RustCall = sig.abi {
|
if let Abi::RustCall = sig.abi {
|
||||||
body.spread_arg = Some(Local::new(sig.inputs().len()));
|
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
|
is_cleanup: false
|
||||||
};
|
};
|
||||||
|
|
||||||
let body = Body::new(
|
let body = new_body(
|
||||||
IndexVec::from_elem_n(start_block, 1),
|
IndexVec::from_elem_n(start_block, 1),
|
||||||
IndexVec::from_elem_n(
|
IndexVec::from_elem_n(
|
||||||
SourceScopeData { span: span, parent_scope: None }, 1
|
SourceScopeData { span, parent_scope: None }, 1
|
||||||
),
|
),
|
||||||
ClearCrossCrate::Clear,
|
|
||||||
local_decls,
|
local_decls,
|
||||||
IndexVec::new(),
|
|
||||||
sig.inputs().len(),
|
sig.inputs().len(),
|
||||||
vec![],
|
|
||||||
span,
|
span,
|
||||||
vec![],
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
crate::util::dump_mir(
|
crate::util::dump_mir(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue