fn drop_halfladder<'a>(&mut self,
                           unwind_ladder: Option<&[BasicBlock]>,
                           succ: BasicBlock,
                           fields: &[(Lvalue<'tcx>, Option<D::Path>)],
                           is_cleanup: bool)
                           -> Vec<BasicBlock>
    {
        let mut unwind_succ = if is_cleanup {
            None
        } else {
            self.unwind
        };

        let goto = TerminatorKind::Goto { target: succ };
        let mut succ = self.new_block(is_cleanup, goto);

        // Always clear the "master" drop flag at the bottom of the
        // ladder. This is needed because the "master" drop flag
        // protects the ADT's discriminant, which is invalidated
        // after the ADT is dropped.
        let succ_loc = Location { block: succ, statement_index: 0 };
        self.elaborator.clear_drop_flag(succ_loc, self.path, DropFlagMode::Shallow);

        fields.iter().rev().enumerate().map(|(i, &(ref lv, path))| {
            succ = self.drop_subpath(is_cleanup, lv, path, succ, unwind_succ);
            unwind_succ = unwind_ladder.as_ref().map(|p| p[i]);
            succ
        }).collect()
    }
/// Create one-half of the drop ladder for a list of fields, and return
/// the list of steps in it in reverse order.
///
/// `unwind_ladder` is such a list of steps in reverse order,
/// which is called instead of the next step if the drop unwinds
/// (the first field is never reached). If it is `None`, all
/// unwind targets are left blank.
Create one-half of the drop ladder for a list of fields, and return
the list of steps in it in reverse order.

`unwind_ladder` is such a list of steps in reverse order,
which is called instead of the next step if the drop unwinds
(the first field is never reached). If it is `None`, all
unwind targets are left blank.
Create one - half of the drop ladder for a list of fields and return the list of steps in it in reverse order . ` unwind_ladder ` is such a list of steps in reverse order which is called instead of the next step if the drop unwinds ( the first field is never reached ) . If it is ` None ` all unwind targets are left blank .
fn drop_halfladder<'a>(&mut self,
                           unwind_ladder: Option<&[BasicBlock]>,
                           succ: BasicBlock,
                           fields: &[(Lvalue<'tcx>, Option<D::Path>)],
                           is_cleanup: bool)
                           -> Vec<BasicBlock>
    {
        let mut unwind_succ = if is_cleanup {
            None
        } else {
            self.unwind
        };
        let goto = TerminatorKind::Goto { target: succ };
        let mut succ = self.new_block(is_cleanup, goto);
        // Always clear the "master" drop flag at the bottom of the
        // ladder. This is needed because the "master" drop flag
        // protects the ADT's discriminant, which is invalidated
        // after the ADT is dropped.
        let succ_loc = Location { block: succ, statement_index: 0 };
        self.elaborator.clear_drop_flag(succ_loc, self.path, DropFlagMode::Shallow);
        fields.iter().rev().enumerate().map(|(i, &(ref lv, path))| {
            succ = self.drop_subpath(is_cleanup, lv, path, succ, unwind_succ);
            unwind_succ = unwind_ladder.as_ref().map(|p| p[i]);
            succ
        }).collect()
    }
fn drop_halfladder < ' a > ( & mut self , unwind_ladder : Option < & [ BasicBlock ] > , succ : BasicBlock , fields : & [ ( Lvalue < ' tcx > , Option < D :: Path > ) ] , is_cleanup : bool ) -> Vec < BasicBlock > { let mut unwind_succ = if is_cleanup { None } else { self . unwind } ; let goto = TerminatorKind :: Goto { target : succ } ; let mut succ = self . new_block ( is_cleanup , goto ) ; // Always clear the "master" drop flag at the bottom of the // ladder. This is needed because the "master" drop flag // protects the ADT's discriminant, which is invalidated // after the ADT is dropped. let succ_loc = Location { block : succ , statement_index : 0 } ; self . elaborator . clear_drop_flag ( succ_loc , self . path , DropFlagMode :: Shallow ) ; fields . iter ( ) . rev ( ) . enumerate ( ) . map ( | ( i , & ( ref lv , path ) ) | { succ = self . drop_subpath ( is_cleanup , lv , path , succ , unwind_succ ) ; unwind_succ = unwind_ladder . as_ref ( ) . map ( | p | p [ i ] ) ; succ } ) . collect ( ) }
Create one-half of the drop ladder for a list of fields, and return
the list of steps in it in reverse order.
Create one - half of the drop ladder for a list of fields and return the list of steps in it in reverse order .
&mut self
unwind_ladder
Option<&[BasicBlock]>
succ
BasicBlock
fields
&[(Lvalue<'tcx>, Option<D::Path>)]
is_cleanup
bool
&mut self
unwind_ladder
Option<&[BasicBlock]>
succ
BasicBlock
fields
&[(Lvalue<'tcx>, Option<D::Path>)]
is_cleanup
bool