]> git.lizzy.rs Git - rust.git/commitdiff
Reduced repetition by refactoring new body to constructor function
authorDavid Haig <david@ninjasource.com>
Tue, 26 Nov 2019 01:31:27 +0000 (01:31 +0000)
committerDavid Haig <david@ninjasource.com>
Thu, 28 Nov 2019 07:46:33 +0000 (07:46 +0000)
src/librustc_mir/shim.rs

index d623e7870e19e6f3d5b9f1f15e4c2a73c1adc6d8..5848df3b6658bf6b3b5e722ffd7887a8e9c0f281 100644 (file)
@@ -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 @@ fn new(tcx: TyCtxt<'tcx>, def_id: DefId, self_ty: Ty<'tcx>) -> Self {
     }
 
     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(