pub mod move_data;
-#[deriving(Clone)]
+#[deriving(Clone, Copy)]
pub struct LoanDataFlowOperator;
-impl Copy for LoanDataFlowOperator {}
-
pub type LoanDataFlow<'a, 'tcx> = DataFlowContext<'a, 'tcx, LoanDataFlowOperator>;
impl<'a, 'tcx, 'v> Visitor<'v> for BorrowckCtxt<'a, 'tcx> {
// b2b39e8700e37ad32b486b9a8409b50a8a53aa51#commitcomment-7892003
static DOWNCAST_PRINTED_OPERATOR : &'static str = " as ";
-#[deriving(PartialEq, Eq, Hash, Show)]
+#[deriving(Copy, PartialEq, Eq, Hash, Show)]
pub enum LoanPathElem {
LpDeref(mc::PointerKind), // `*LV` in doc.rs
LpInterior(mc::InteriorKind) // `LV.f` in doc.rs
}
-impl Copy for LoanPathElem {}
-
pub fn closure_to_block(closure_id: ast::NodeId,
tcx: &ty::ctxt) -> ast::NodeId {
match tcx.map.get(closure_id) {
code: bckerr_code
}
+#[deriving(Copy)]
pub enum AliasableViolationKind {
MutabilityViolation,
BorrowViolation(euv::LoanCause)
}
-impl Copy for AliasableViolationKind {}
-
-#[deriving(Show)]
+#[deriving(Copy, Show)]
pub enum MovedValueUseKind {
MovedInUse,
MovedInCapture,
}
-impl Copy for MovedValueUseKind {}
-
///////////////////////////////////////////////////////////////////////////
// Misc
}
/// Index into `MoveData.paths`, used like a pointer
-#[deriving(PartialEq, Eq, PartialOrd, Ord, Show)]
+#[deriving(Copy, PartialEq, Eq, PartialOrd, Ord, Show)]
pub struct MovePathIndex(uint);
-impl Copy for MovePathIndex {}
-
impl MovePathIndex {
fn get(&self) -> uint {
let MovePathIndex(v) = *self; v
MovePathIndex(uint::MAX);
/// Index into `MoveData.moves`, used like a pointer
-#[deriving(PartialEq)]
+#[deriving(Copy, PartialEq)]
pub struct MoveIndex(uint);
-impl Copy for MoveIndex {}
-
impl MoveIndex {
fn get(&self) -> uint {
let MoveIndex(v) = *self; v
pub next_sibling: MovePathIndex,
}
-#[deriving(PartialEq, Show)]
+#[deriving(Copy, PartialEq, Show)]
pub enum MoveKind {
Declared, // When declared, variables start out "moved".
MoveExpr, // Expression or binding that moves a variable
Captured // Closure creation that moves a value
}
-impl Copy for MoveKind {}
-
+#[deriving(Copy)]
pub struct Move {
/// Path being moved.
pub path: MovePathIndex,
pub next_move: MoveIndex
}
-impl Copy for Move {}
-
+#[deriving(Copy)]
pub struct Assignment {
/// Path being assigned.
pub path: MovePathIndex,
pub span: Span,
}
-impl Copy for Assignment {}
-
+#[deriving(Copy)]
pub struct VariantMatch {
/// downcast to the variant.
pub path: MovePathIndex,
pub mode: euv::MatchMode
}
-impl Copy for VariantMatch {}
-
-#[deriving(Clone)]
+#[deriving(Clone, Copy)]
pub struct MoveDataFlowOperator;
-impl Copy for MoveDataFlowOperator {}
-
pub type MoveDataFlow<'a, 'tcx> = DataFlowContext<'a, 'tcx, MoveDataFlowOperator>;
-#[deriving(Clone)]
+#[deriving(Clone, Copy)]
pub struct AssignDataFlowOperator;
-impl Copy for AssignDataFlowOperator {}
-
pub type AssignDataFlow<'a, 'tcx> = DataFlowContext<'a, 'tcx, AssignDataFlowOperator>;
fn loan_path_is_precise(loan_path: &LoanPath) -> bool {