expr,
targeted_by_break,
safety_mode,
- } = ast_block;
+ } = *ast_block;
self.in_opt_scope(opt_destruction_scope.map(|de| (de, source_info)), move |this| {
- this.in_scope((*region_scope, source_info), LintLevel::Inherited, move |this| {
- if *targeted_by_break {
- this.in_breakable_scope(None, destination, *span, |this| {
+ this.in_scope((region_scope, source_info), LintLevel::Inherited, move |this| {
+ if targeted_by_break {
+ this.in_breakable_scope(None, destination, span, |this| {
Some(this.ast_block_stmts(
destination,
block,
- *span,
- &stmts,
- expr.as_deref(),
- *safety_mode,
+ span,
+ stmts,
+ expr,
+ safety_mode,
))
})
} else {
- this.ast_block_stmts(
- destination,
- block,
- *span,
- &stmts,
- expr.as_deref(),
- *safety_mode,
- )
+ this.ast_block_stmts(destination, block, span, stmts, expr, safety_mode)
}
})
})
let source_info = this.source_info(span);
for Stmt { kind, opt_destruction_scope } in stmts {
match kind {
- StmtKind::Expr { scope, expr } => {
+ &StmtKind::Expr { scope, expr } => {
this.block_context.push(BlockFrame::Statement { ignores_expr_result: true });
unpack!(
block = this.in_opt_scope(
opt_destruction_scope.map(|de| (de, source_info)),
|this| {
- let si = (*scope, source_info);
+ let si = (scope, source_info);
this.in_scope(si, LintLevel::Inherited, |this| {
- this.stmt_expr(block, &expr, Some(*scope))
+ this.stmt_expr(block, expr, Some(scope))
})
}
)
let_scope_stack.push(remainder_scope);
// Declare the bindings, which may create a source scope.
- let remainder_span = remainder_scope.span(this.tcx, &this.region_scope_tree);
+ let remainder_span = remainder_scope.span(this.tcx, this.region_scope_tree);
let visibility_scope =
Some(this.new_source_scope(remainder_span, LintLevel::Inherited, None));
this.declare_bindings(
visibility_scope,
remainder_span,
- &pattern,
+ pattern,
ArmHasGuard(false),
Some((None, initializer_span)),
);
- this.expr_into_pattern(block, pattern.clone(), &init)
+ this.expr_into_pattern(block, pattern.clone(), init)
})
}
)
this.declare_bindings(
visibility_scope,
remainder_span,
- &pattern,
+ pattern,
ArmHasGuard(false),
None,
);
/// `expr` is a valid compile-time constant!
crate fn as_constant(&mut self, expr: &Expr<'_, 'tcx>) -> Constant<'tcx> {
let this = self;
- let Expr { ty, temp_lifetime: _, span, kind } = expr;
+ let Expr { ty, temp_lifetime: _, span, ref kind } = *expr;
match kind {
- ExprKind::Scope { region_scope: _, lint_level: _, value } => this.as_constant(&value),
+ ExprKind::Scope { region_scope: _, lint_level: _, value } => this.as_constant(value),
ExprKind::Literal { literal, user_ty, const_id: _ } => {
let user_ty = user_ty.map(|user_ty| {
this.canonical_user_type_annotations.push(CanonicalUserTypeAnnotation {
- span: *span,
+ span,
user_ty,
inferred_ty: ty,
})
});
- assert_eq!(literal.ty, *ty);
- Constant { span: *span, user_ty, literal }
+ assert_eq!(literal.ty, ty);
+ Constant { span, user_ty, literal }
}
- ExprKind::StaticRef { literal, .. } => Constant { span: *span, user_ty: None, literal },
+ ExprKind::StaticRef { literal, .. } => Constant { span, user_ty: None, literal },
ExprKind::ConstBlock { value } => {
- Constant { span: *span, user_ty: None, literal: value }
+ Constant { span: span, user_ty: None, literal: value }
}
- _ => span_bug!(*span, "expression is not a valid constant {:?}", kind),
+ _ => span_bug!(span, "expression is not a valid constant {:?}", kind),
}
}
}
debug!("as_operand(block={:?}, expr={:?})", block, expr);
let this = self;
- if let ExprKind::Scope { region_scope, lint_level, value } = &expr.kind {
+ if let ExprKind::Scope { region_scope, lint_level, value } = expr.kind {
let source_info = this.source_info(expr.span);
- let region_scope = (*region_scope, source_info);
+ let region_scope = (region_scope, source_info);
return this
- .in_scope(region_scope, *lint_level, |this| this.as_operand(block, scope, &value));
+ .in_scope(region_scope, lint_level, |this| this.as_operand(block, scope, value));
}
let category = Category::of(&expr.kind).unwrap();
debug!("as_call_operand(block={:?}, expr={:?})", block, expr);
let this = self;
- if let ExprKind::Scope { region_scope, lint_level, value } = &expr.kind {
+ if let ExprKind::Scope { region_scope, lint_level, value } = expr.kind {
let source_info = this.source_info(expr.span);
- let region_scope = (*region_scope, source_info);
- return this.in_scope(region_scope, *lint_level, |this| {
- this.as_call_operand(block, scope, &value)
+ let region_scope = (region_scope, source_info);
+ return this.in_scope(region_scope, lint_level, |this| {
+ this.as_call_operand(block, scope, value)
});
}
// As described above, detect the case where we are passing a value of unsized
// type, and that value is coming from the deref of a box.
- if let ExprKind::Deref { ref arg } = expr.kind {
+ if let ExprKind::Deref { arg } = expr.kind {
// Generate let tmp0 = arg0
let operand = unpack!(block = this.as_temp(block, scope, arg, Mutability::Mut));
let this = self;
let expr_span = expr.span;
let source_info = this.source_info(expr_span);
- match &expr.kind {
+ match expr.kind {
ExprKind::Scope { region_scope, lint_level, value } => {
- this.in_scope((*region_scope, source_info), *lint_level, |this| {
- this.expr_as_place(block, &value, mutability, fake_borrow_temps)
+ this.in_scope((region_scope, source_info), lint_level, |this| {
+ this.expr_as_place(block, value, mutability, fake_borrow_temps)
})
}
ExprKind::Field { lhs, name } => {
- let place_builder = unpack!(
- block = this.expr_as_place(block, &lhs, mutability, fake_borrow_temps,)
- );
- block.and(place_builder.field(*name, expr.ty))
+ let place_builder =
+ unpack!(block = this.expr_as_place(block, lhs, mutability, fake_borrow_temps,));
+ block.and(place_builder.field(name, expr.ty))
}
ExprKind::Deref { arg } => {
- let place_builder = unpack!(
- block = this.expr_as_place(block, &arg, mutability, fake_borrow_temps,)
- );
+ let place_builder =
+ unpack!(block = this.expr_as_place(block, arg, mutability, fake_borrow_temps,));
block.and(place_builder.deref())
}
ExprKind::Index { lhs, index } => this.lower_index_expression(
block,
- &lhs,
- &index,
+ lhs,
+ index,
mutability,
fake_borrow_temps,
expr.temp_lifetime,
source_info,
),
ExprKind::UpvarRef { closure_def_id, var_hir_id } => {
- let upvar_id = ty::UpvarId::new(*var_hir_id, closure_def_id.expect_local());
+ let upvar_id = ty::UpvarId::new(var_hir_id, closure_def_id.expect_local());
this.lower_captured_upvar(block, upvar_id)
}
ExprKind::VarRef { id } => {
- let place_builder = if this.is_bound_var_in_guard(*id) {
- let index = this.var_local_id(*id, RefWithinGuard);
+ let place_builder = if this.is_bound_var_in_guard(id) {
+ let index = this.var_local_id(id, RefWithinGuard);
PlaceBuilder::from(index).deref()
} else {
- let index = this.var_local_id(*id, OutsideGuard);
+ let index = this.var_local_id(id, OutsideGuard);
PlaceBuilder::from(index)
};
block.and(place_builder)
ExprKind::PlaceTypeAscription { source, user_ty } => {
let place_builder = unpack!(
- block = this.expr_as_place(block, &source, mutability, fake_borrow_temps,)
+ block = this.expr_as_place(block, source, mutability, fake_borrow_temps,)
);
if let Some(user_ty) = user_ty {
let annotation_index =
this.canonical_user_type_annotations.push(CanonicalUserTypeAnnotation {
span: source_info.span,
- user_ty: *user_ty,
+ user_ty,
inferred_ty: expr.ty,
});
}
ExprKind::ValueTypeAscription { source, user_ty } => {
let temp =
- unpack!(block = this.as_temp(block, source.temp_lifetime, &source, mutability));
+ unpack!(block = this.as_temp(block, source.temp_lifetime, source, mutability));
if let Some(user_ty) = user_ty {
let annotation_index =
this.canonical_user_type_annotations.push(CanonicalUserTypeAnnotation {
span: source_info.span,
- user_ty: *user_ty,
+ user_ty,
inferred_ty: expr.ty,
});
this.cfg.push(
let expr_span = expr.span;
let source_info = this.source_info(expr_span);
- match &expr.kind {
- ExprKind::ThreadLocalRef(did) => block.and(Rvalue::ThreadLocalRef(*did)),
+ match expr.kind {
+ ExprKind::ThreadLocalRef(did) => block.and(Rvalue::ThreadLocalRef(did)),
ExprKind::Scope { region_scope, lint_level, value } => {
- let region_scope = (*region_scope, source_info);
- this.in_scope(region_scope, *lint_level, |this| {
- this.as_rvalue(block, scope, &value)
- })
+ let region_scope = (region_scope, source_info);
+ this.in_scope(region_scope, lint_level, |this| this.as_rvalue(block, scope, value))
}
ExprKind::Repeat { value, count } => {
- let value_operand = unpack!(block = this.as_operand(block, scope, &value));
+ let value_operand = unpack!(block = this.as_operand(block, scope, value));
block.and(Rvalue::Repeat(value_operand, count))
}
ExprKind::Binary { op, lhs, rhs } => {
- let lhs = unpack!(block = this.as_operand(block, scope, &lhs));
- let rhs = unpack!(block = this.as_operand(block, scope, &rhs));
- this.build_binary_op(block, *op, expr_span, expr.ty, lhs, rhs)
+ let lhs = unpack!(block = this.as_operand(block, scope, lhs));
+ let rhs = unpack!(block = this.as_operand(block, scope, rhs));
+ this.build_binary_op(block, op, expr_span, expr.ty, lhs, rhs)
}
ExprKind::Unary { op, arg } => {
- let arg = unpack!(block = this.as_operand(block, scope, &arg));
+ let arg = unpack!(block = this.as_operand(block, scope, arg));
// Check for -MIN on signed integers
- if this.check_overflow && *op == UnOp::Neg && expr.ty.is_signed() {
+ if this.check_overflow && op == UnOp::Neg && expr.ty.is_signed() {
let bool_ty = this.tcx.types.bool;
let minval = this.minval_literal(expr_span, expr.ty);
expr_span,
);
}
- block.and(Rvalue::UnaryOp(*op, arg))
+ block.and(Rvalue::UnaryOp(op, arg))
}
ExprKind::Box { value } => {
// The `Box<T>` temporary created here is not a part of the HIR,
block = this.expr_into_dest(
this.tcx.mk_place_deref(Place::from(result)),
block,
- &value
+ value
)
);
block.and(Rvalue::Use(Operand::Move(Place::from(result))))
}
ExprKind::Cast { source } => {
- let source = unpack!(block = this.as_operand(block, scope, &source));
+ let source = unpack!(block = this.as_operand(block, scope, source));
block.and(Rvalue::Cast(CastKind::Misc, source, expr.ty))
}
ExprKind::Pointer { cast, source } => {
- let source = unpack!(block = this.as_operand(block, scope, &source));
- block.and(Rvalue::Cast(CastKind::Pointer(*cast), source, expr.ty))
+ let source = unpack!(block = this.as_operand(block, scope, source));
+ block.and(Rvalue::Cast(CastKind::Pointer(cast), source, expr.ty))
}
ExprKind::Array { fields } => {
// (*) We would (maybe) be closer to codegen if we
let el_ty = expr.ty.sequence_element_type(this.tcx);
let fields: Vec<_> = fields
.into_iter()
- .map(|f| unpack!(block = this.as_operand(block, scope, &f)))
+ .map(|f| unpack!(block = this.as_operand(block, scope, f)))
.collect();
block.and(Rvalue::Aggregate(box AggregateKind::Array(el_ty), fields))
// first process the set of fields
let fields: Vec<_> = fields
.into_iter()
- .map(|f| unpack!(block = this.as_operand(block, scope, &f)))
+ .map(|f| unpack!(block = this.as_operand(block, scope, f)))
.collect();
block.and(Rvalue::Aggregate(box AggregateKind::Tuple, fields))
// This occurs when capturing by copy/move, while
// by reference captures use as_operand
Some(Category::Place) => {
- let place = unpack!(block = this.as_place(block, &upvar));
+ let place = unpack!(block = this.as_place(block, upvar));
this.consume_by_copy_or_move(place)
}
_ => {
// borrow captures when capturing an immutable
// variable. This is sound because the mutation
// that caused the capture will cause an error.
- match &upvar.kind {
+ match upvar.kind {
ExprKind::Borrow {
borrow_kind:
BorrowKind::Mut { allow_two_phase_borrow: false },
arg,
} => unpack!(
block = this.limit_capture_mutability(
- upvar.span, upvar.ty, scope, block, &arg,
+ upvar.span, upvar.ty, scope, block, arg,
)
),
- _ => unpack!(block = this.as_operand(block, scope, &upvar)),
+ _ => unpack!(block = this.as_operand(block, scope, upvar)),
}
}
}
// We implicitly set the discriminant to 0. See
// librustc_mir/transform/deaggregator.rs for details.
let movability = movability.unwrap();
- box AggregateKind::Generator(*closure_id, substs, movability)
+ box AggregateKind::Generator(closure_id, substs, movability)
}
- UpvarSubsts::Closure(substs) => box AggregateKind::Closure(*closure_id, substs),
+ UpvarSubsts::Closure(substs) => box AggregateKind::Closure(closure_id, substs),
};
block.and(Rvalue::Aggregate(result, operands))
}
let expr_span = expr.span;
let source_info = this.source_info(expr_span);
- if let ExprKind::Scope { region_scope, lint_level, value } = &expr.kind {
- return this.in_scope((*region_scope, source_info), *lint_level, |this| {
+ if let ExprKind::Scope { region_scope, lint_level, value } = expr.kind {
+ return this.in_scope((region_scope, source_info), lint_level, |this| {
this.as_temp(block, temp_lifetime, value, mutability)
});
}
this.block_context.push(BlockFrame::SubExpr);
}
- let block_and = match &expr.kind {
+ let block_and = match expr.kind {
ExprKind::Scope { region_scope, lint_level, value } => {
- let region_scope = (*region_scope, source_info);
+ let region_scope = (region_scope, source_info);
ensure_sufficient_stack(|| {
- this.in_scope(region_scope, *lint_level, |this| {
- this.expr_into_dest(destination, block, &value)
+ this.in_scope(region_scope, lint_level, |this| {
+ this.expr_into_dest(destination, block, value)
})
})
}
- ExprKind::Block { body: ast_block } => {
- this.ast_block(destination, block, &ast_block, source_info)
+ ExprKind::Block { body: ref ast_block } => {
+ this.ast_block(destination, block, ast_block, source_info)
}
ExprKind::Match { scrutinee, arms } => {
- this.match_expr(destination, expr_span, block, &scrutinee, &arms)
+ this.match_expr(destination, expr_span, block, scrutinee, arms)
}
ExprKind::If { cond, then, else_opt } => {
let place = unpack!(
- block = this.as_temp(block, Some(this.local_scope()), &cond, Mutability::Mut)
+ block = this.as_temp(block, Some(this.local_scope()), cond, Mutability::Mut)
);
let operand = Operand::Move(Place::from(place));
let term = TerminatorKind::if_(this.tcx, operand, then_block, else_block);
this.cfg.terminate(block, source_info, term);
- unpack!(then_block = this.expr_into_dest(destination, then_block, &then));
+ unpack!(then_block = this.expr_into_dest(destination, then_block, then));
else_block = if let Some(else_opt) = else_opt {
- unpack!(this.expr_into_dest(destination, else_block, &else_opt))
+ unpack!(this.expr_into_dest(destination, else_block, else_opt))
} else {
// Body of the `if` expression without an `else` clause must return `()`, thus
// we implicitly generate a `else {}` if it is not specified.
// (#66975) Source could be a const of type `!`, so has to
// exist in the generated MIR.
unpack!(
- block =
- this.as_temp(block, Some(this.local_scope()), &source, Mutability::Mut,)
+ block = this.as_temp(block, Some(this.local_scope()), source, Mutability::Mut,)
);
// This is an optimization. If the expression was a call then we already have an
this.cfg.start_new_block(),
);
- let lhs = unpack!(block = this.as_local_operand(block, &lhs));
+ let lhs = unpack!(block = this.as_local_operand(block, lhs));
let blocks = match op {
LogicalOp::And => (else_block, false_block),
LogicalOp::Or => (true_block, else_block),
let term = TerminatorKind::if_(this.tcx, lhs, blocks.0, blocks.1);
this.cfg.terminate(block, source_info, term);
- let rhs = unpack!(else_block = this.as_local_operand(else_block, &rhs));
+ let rhs = unpack!(else_block = this.as_local_operand(else_block, rhs));
let term = TerminatorKind::if_(this.tcx, rhs, true_block, false_block);
this.cfg.terminate(else_block, source_info, term);
// introduce a unit temporary as the destination for the loop body.
let tmp = this.get_unit_temp();
// Execute the body, branching back to the test.
- let body_block_end = unpack!(this.expr_into_dest(tmp, body_block, &body));
+ let body_block_end = unpack!(this.expr_into_dest(tmp, body_block, body));
this.cfg.goto(body_block_end, source_info, loop_block);
// Loops are only exited by `break` expressions.
})
}
ExprKind::Call { ty: _, fun, args, from_hir_call, fn_span } => {
- let fun = unpack!(block = this.as_local_operand(block, &fun));
+ let fun = unpack!(block = this.as_local_operand(block, fun));
let args: Vec<_> = args
.into_iter()
- .map(|arg| unpack!(block = this.as_local_call_operand(block, &arg)))
+ .map(|arg| unpack!(block = this.as_local_call_operand(block, arg)))
.collect();
let success = this.cfg.start_new_block();
} else {
Some((destination, success))
},
- from_hir_call: *from_hir_call,
- fn_span: *fn_span,
+ from_hir_call,
+ fn_span,
},
);
this.diverge_from(block);
success.unit()
}
- ExprKind::Use { source } => this.expr_into_dest(destination, block, &source),
+ ExprKind::Use { source } => this.expr_into_dest(destination, block, source),
ExprKind::Borrow { arg, borrow_kind } => {
// We don't do this in `as_rvalue` because we use `as_place`
// for borrow expressions, so we cannot create an `RValue` that
// by this method anyway, so this shouldn't cause too many
// unnecessary temporaries.
let arg_place = match borrow_kind {
- BorrowKind::Shared => unpack!(block = this.as_read_only_place(block, &arg)),
- _ => unpack!(block = this.as_place(block, &arg)),
+ BorrowKind::Shared => unpack!(block = this.as_read_only_place(block, arg)),
+ _ => unpack!(block = this.as_place(block, arg)),
};
- let borrow = Rvalue::Ref(this.tcx.lifetimes.re_erased, *borrow_kind, arg_place);
+ let borrow = Rvalue::Ref(this.tcx.lifetimes.re_erased, borrow_kind, arg_place);
this.cfg.push_assign(block, source_info, destination, borrow);
block.unit()
}
ExprKind::AddressOf { mutability, arg } => {
let place = match mutability {
- hir::Mutability::Not => this.as_read_only_place(block, &arg),
- hir::Mutability::Mut => this.as_place(block, &arg),
+ hir::Mutability::Not => this.as_read_only_place(block, arg),
+ hir::Mutability::Mut => this.as_place(block, arg),
};
- let address_of = Rvalue::AddressOf(*mutability, unpack!(block = place));
+ let address_of = Rvalue::AddressOf(mutability, unpack!(block = place));
this.cfg.push_assign(block, source_info, destination, address_of);
block.unit()
}
- ExprKind::Adt { adt_def, variant_index, substs, user_ty, fields, base } => {
+ ExprKind::Adt { adt_def, variant_index, substs, user_ty, fields, ref base } => {
// See the notes for `ExprKind::Array` in `as_rvalue` and for
// `ExprKind::Borrow` above.
let is_union = adt_def.is_union();
// (evaluating them in order given by user)
let fields_map: FxHashMap<_, _> = fields
.into_iter()
- .map(|f| {
- (f.name, unpack!(block = this.as_operand(block, Some(scope), &f.expr)))
- })
+ .map(|f| (f.name, unpack!(block = this.as_operand(block, Some(scope), f.expr))))
.collect();
let field_names: Vec<_> =
- (0..adt_def.variants[*variant_index].fields.len()).map(Field::new).collect();
+ (0..adt_def.variants[variant_index].fields.len()).map(Field::new).collect();
let fields: Vec<_> = if let Some(FruInfo { base, field_types }) = base {
- let place_builder = unpack!(block = this.as_place_builder(block, &base));
+ let place_builder = unpack!(block = this.as_place_builder(block, base));
// MIR does not natively support FRU, so for each
// base-supplied field, generate an operand that
});
let adt = box AggregateKind::Adt(
adt_def,
- *variant_index,
+ variant_index,
substs,
user_ty,
active_field_index,
use rustc_middle::mir;
let operands = operands
.into_iter()
- .map(|op| match op {
+ .map(|op| match *op {
thir::InlineAsmOperand::In { reg, expr } => mir::InlineAsmOperand::In {
- reg: *reg,
- value: unpack!(block = this.as_local_operand(block, &expr)),
+ reg,
+ value: unpack!(block = this.as_local_operand(block, expr)),
},
thir::InlineAsmOperand::Out { reg, late, expr } => {
mir::InlineAsmOperand::Out {
- reg: *reg,
- late: *late,
+ reg,
+ late,
place: expr
.as_ref()
.map(|expr| unpack!(block = this.as_place(block, expr))),
}
}
thir::InlineAsmOperand::InOut { reg, late, expr } => {
- let place = unpack!(block = this.as_place(block, &expr));
+ let place = unpack!(block = this.as_place(block, expr));
mir::InlineAsmOperand::InOut {
- reg: *reg,
- late: *late,
+ reg,
+ late,
// This works because asm operands must be Copy
in_value: Operand::Copy(place),
out_place: Some(place),
}
thir::InlineAsmOperand::SplitInOut { reg, late, in_expr, out_expr } => {
mir::InlineAsmOperand::InOut {
- reg: *reg,
- late: *late,
- in_value: unpack!(block = this.as_local_operand(block, &in_expr)),
+ reg,
+ late,
+ in_value: unpack!(block = this.as_local_operand(block, in_expr)),
out_place: out_expr.as_ref().map(|out_expr| {
unpack!(block = this.as_place(block, out_expr))
}),
}
}
thir::InlineAsmOperand::Const { expr } => mir::InlineAsmOperand::Const {
- value: unpack!(block = this.as_local_operand(block, &expr)),
+ value: unpack!(block = this.as_local_operand(block, expr)),
},
thir::InlineAsmOperand::SymFn { expr } => {
- mir::InlineAsmOperand::SymFn { value: box this.as_constant(&expr) }
+ mir::InlineAsmOperand::SymFn { value: box this.as_constant(expr) }
}
thir::InlineAsmOperand::SymStatic { def_id } => {
- mir::InlineAsmOperand::SymStatic { def_id: *def_id }
+ mir::InlineAsmOperand::SymStatic { def_id }
}
})
.collect();
TerminatorKind::InlineAsm {
template,
operands,
- options: *options,
+ options,
line_spans,
destination: if options.contains(InlineAsmOptions::NORETURN) {
None
ExprKind::Yield { value } => {
let scope = this.local_scope();
- let value = unpack!(block = this.as_operand(block, Some(scope), &value));
+ let value = unpack!(block = this.as_operand(block, Some(scope), value));
let resume = this.cfg.start_new_block();
this.cfg.terminate(
block,
let source_info = this.source_info(expr.span);
// Handle a number of expressions that don't need a destination at all. This
// avoids needing a mountain of temporary `()` variables.
- match &expr.kind {
+ match expr.kind {
ExprKind::Scope { region_scope, lint_level, value } => {
- this.in_scope((*region_scope, source_info), *lint_level, |this| {
- this.stmt_expr(block, &value, statement_scope)
+ this.in_scope((region_scope, source_info), lint_level, |this| {
+ this.stmt_expr(block, value, statement_scope)
})
}
ExprKind::Assign { lhs, rhs } => {
// Generate better code for things that don't need to be
// dropped.
if lhs.ty.needs_drop(this.tcx, this.param_env) {
- let rhs = unpack!(block = this.as_local_operand(block, &rhs));
- let lhs = unpack!(block = this.as_place(block, &lhs));
+ let rhs = unpack!(block = this.as_local_operand(block, rhs));
+ let lhs = unpack!(block = this.as_place(block, lhs));
unpack!(block = this.build_drop_and_replace(block, lhs_span, lhs, rhs));
} else {
- let rhs = unpack!(block = this.as_local_rvalue(block, &rhs));
- let lhs = unpack!(block = this.as_place(block, &lhs));
+ let rhs = unpack!(block = this.as_local_rvalue(block, rhs));
+ let lhs = unpack!(block = this.as_place(block, lhs));
this.cfg.push_assign(block, source_info, lhs, rhs);
}
this.block_context.push(BlockFrame::SubExpr);
// As above, RTL.
- let rhs = unpack!(block = this.as_local_operand(block, &rhs));
- let lhs = unpack!(block = this.as_place(block, &lhs));
+ let rhs = unpack!(block = this.as_local_operand(block, rhs));
+ let lhs = unpack!(block = this.as_place(block, lhs));
// we don't have to drop prior contents or anything
// because AssignOp is only legal for Copy types
// (overloaded ops should be desugared into a call).
let result = unpack!(
- block = this.build_binary_op(
- block,
- *op,
- expr_span,
- lhs_ty,
- Operand::Copy(lhs),
- rhs
- )
+ block =
+ this.build_binary_op(block, op, expr_span, lhs_ty, Operand::Copy(lhs), rhs)
);
this.cfg.push_assign(block, source_info, lhs, result);
block.unit()
}
ExprKind::Continue { label } => {
- this.break_scope(block, None, BreakableTarget::Continue(*label), source_info)
+ this.break_scope(block, None, BreakableTarget::Continue(label), source_info)
}
ExprKind::Break { label, value } => this.break_scope(
block,
value.as_deref(),
- BreakableTarget::Break(*label),
+ BreakableTarget::Break(label),
source_info,
),
ExprKind::Return { value } => {
Statement {
source_info,
kind: StatementKind::LlvmInlineAsm(box LlvmInlineAsm {
- asm: (*asm).clone(),
+ asm: asm.clone(),
outputs,
inputs,
}),
Guard::IfLet(pat, scrutinee) => {
let scrutinee_span = scrutinee.span;
let scrutinee_place =
- unpack!(block = self.lower_scrutinee(block, &scrutinee, scrutinee_span));
+ unpack!(block = self.lower_scrutinee(block, scrutinee, scrutinee_span));
let mut guard_candidate = Candidate::new(scrutinee_place, &pat, false);
let wildcard = Pat::wildcard_from_ty(pat.ty);
let mut otherwise_candidate = Candidate::new(scrutinee_place, &wildcard, false);
fn_def.did.to_def_id(),
&arguments,
arg_scope,
- &expr,
+ expr,
)
}))
}));
crate fn mirror_block(&mut self, block: &'tcx hir::Block<'tcx>) -> Block<'thir, 'tcx> {
// We have to eagerly lower the "spine" of the statements
// in order to get the lexical scoping correctly.
- let stmts = self.mirror_stmts(block.hir_id.local_id, &*block.stmts);
+ let stmts = self.mirror_stmts(block.hir_id.local_id, block.stmts);
let opt_destruction_scope =
self.region_scope_tree.opt_destruction_scope(block.hir_id.local_id);
Block {
opt_destruction_scope,
span: block.span,
stmts,
- expr: block.expr.as_ref().map(|expr| self.mirror_expr(expr)),
+ expr: block.expr.map(|expr| self.mirror_expr(expr)),
safety_mode: match block.rules {
hir::BlockCheckMode::DefaultBlock => BlockSafety::Safe,
hir::BlockCheckMode::UnsafeBlock(..) => BlockSafety::ExplicitUnsafe(block.hir_id),
data: region::ScopeData::Remainder(region::FirstStatementIndex::new(index)),
};
- let mut pattern = self.pattern_from_hir(&local.pat);
+ let mut pattern = self.pattern_from_hir(local.pat);
if let Some(ty) = &local.ty {
if let Some(&user_ty) =
ExprKind::Call {
ty: method.ty,
fun: self.arena.alloc(method),
- args: &*self
+ args: self
.arena
.alloc_from_iter(vec![self.mirror_expr_inner(fun), tupled_args]),
from_hir_call: true,
adt_def,
substs,
variant_index: index,
- fields: &*field_refs,
+ fields: field_refs,
user_ty,
base: None,
}
if self.typeck_results().is_method_call(expr) {
let lhs = self.mirror_expr_inner(lhs);
let rhs = self.mirror_expr_inner(rhs);
- self.overloaded_operator(expr, &*self.arena.alloc_from_iter(vec![lhs, rhs]))
+ self.overloaded_operator(expr, self.arena.alloc_from_iter(vec![lhs, rhs]))
} else {
ExprKind::AssignOp {
op: bin_op(op.node),
if self.typeck_results().is_method_call(expr) {
let lhs = self.mirror_expr_inner(lhs);
let rhs = self.mirror_expr_inner(rhs);
- self.overloaded_operator(expr, &*self.arena.alloc_from_iter(vec![lhs, rhs]))
+ self.overloaded_operator(expr, self.arena.alloc_from_iter(vec![lhs, rhs]))
} else {
// FIXME overflow
match op.node {
expr,
expr_ty,
None,
- &*self.arena.alloc_from_iter(vec![lhs, index]),
+ self.arena.alloc_from_iter(vec![lhs, index]),
expr.span,
)
} else {
expr,
expr_ty,
None,
- &*self.arena.alloc_from_iter(iter::once(arg)),
+ self.arena.alloc_from_iter(iter::once(arg)),
expr.span,
)
} else {
hir::ExprKind::Unary(hir::UnOp::Not, ref arg) => {
if self.typeck_results().is_method_call(expr) {
let arg = self.mirror_expr_inner(arg);
- self.overloaded_operator(expr, &*self.arena.alloc_from_iter(iter::once(arg)))
+ self.overloaded_operator(expr, self.arena.alloc_from_iter(iter::once(arg)))
} else {
ExprKind::Unary { op: UnOp::Not, arg: self.mirror_expr(arg) }
}
hir::ExprKind::Unary(hir::UnOp::Neg, ref arg) => {
if self.typeck_results().is_method_call(expr) {
let arg = self.mirror_expr_inner(arg);
- self.overloaded_operator(expr, &*self.arena.alloc_from_iter(iter::once(arg)))
+ self.overloaded_operator(expr, self.arena.alloc_from_iter(iter::once(arg)))
} else if let hir::ExprKind::Lit(ref lit) = arg.kind {
ExprKind::Literal {
literal: self.const_eval_literal(&lit.node, expr_ty, lit.span, true),