@@ -25,22 +25,32 @@ use std::usize;
25
25
use super :: dataflow:: BitDenotation ;
26
26
use super :: abs_domain:: { AbstractElem , Lift } ;
27
27
28
- /// Index into MovePathData.move_paths
29
- #[ derive( Copy , Clone , PartialEq , Eq , Debug ) ]
30
- pub struct MovePathIndex ( usize ) ;
31
-
32
- const INVALID_MOVE_PATH_INDEX : MovePathIndex = MovePathIndex ( usize:: MAX ) ;
33
-
34
- impl MovePathIndex {
35
- pub fn idx ( & self ) -> Option < usize > {
36
- if * self == INVALID_MOVE_PATH_INDEX {
37
- None
38
- } else {
39
- Some ( self . 0 )
28
+ macro_rules! new_index {
29
+ ( $Index: ident, $INVALID_INDEX: ident) => {
30
+ #[ derive( Copy , Clone , PartialEq , Eq , Debug ) ]
31
+ pub struct $Index( usize ) ;
32
+
33
+ const $INVALID_INDEX: $Index = $Index( usize :: MAX ) ;
34
+
35
+ impl $Index {
36
+ pub fn idx( & self ) -> Option <usize > {
37
+ if * self == $INVALID_INDEX {
38
+ None
39
+ } else {
40
+ Some ( self . 0 )
41
+ }
42
+ }
40
43
}
41
44
}
42
45
}
43
46
47
+ /// Index into MovePathData.move_paths
48
+ new_index ! ( MovePathIndex , INVALID_MOVE_PATH_INDEX ) ;
49
+
50
+ /// Index into MoveData.moves.
51
+ new_index ! ( MoveOutIndex , INVALID_MOVE_OUT_INDEX ) ;
52
+
53
+
44
54
/// `MovePath` is a canonicalized representation of a path that is
45
55
/// moved or assigned to.
46
56
///
@@ -99,22 +109,6 @@ impl<'tcx> fmt::Debug for MovePath<'tcx> {
99
109
}
100
110
}
101
111
102
- /// Index into MoveData.moves.
103
- #[ derive( Copy , Clone , PartialEq , Eq , Debug ) ]
104
- pub struct MoveOutIndex ( usize ) ;
105
-
106
- impl MoveOutIndex {
107
- pub fn idx ( & self ) -> Option < usize > {
108
- if * self == INVALID_MOVE_OUT_INDEX {
109
- None
110
- } else {
111
- Some ( self . 0 )
112
- }
113
- }
114
- }
115
-
116
- const INVALID_MOVE_OUT_INDEX : MoveOutIndex = MoveOutIndex ( usize:: MAX ) ;
117
-
118
112
pub struct MoveData < ' tcx > {
119
113
pub move_paths : MovePathData < ' tcx > ,
120
114
pub moves : Vec < MoveOut > ,
0 commit comments