@@ -22,7 +22,7 @@ pub struct Const {
22
22
23
23
type Ident = Opaque ;
24
24
pub ( crate ) type Region = Opaque ;
25
- type Span = Opaque ;
25
+ pub type Span = Opaque ;
26
26
27
27
#[ derive( Clone , Debug ) ]
28
28
pub enum TyKind {
@@ -87,34 +87,37 @@ pub enum Movability {
87
87
Movable ,
88
88
}
89
89
90
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
90
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
91
91
pub struct ForeignDef ( pub ( crate ) DefId ) ;
92
92
93
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
93
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
94
94
pub struct FnDef ( pub ( crate ) DefId ) ;
95
95
96
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
96
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
97
97
pub struct ClosureDef ( pub ( crate ) DefId ) ;
98
98
99
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
99
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
100
100
pub struct GeneratorDef ( pub ( crate ) DefId ) ;
101
101
102
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
102
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
103
103
pub struct ParamDef ( pub ( crate ) DefId ) ;
104
104
105
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
105
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
106
106
pub struct BrNamedDef ( pub ( crate ) DefId ) ;
107
107
108
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
108
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
109
109
pub struct AdtDef ( pub ( crate ) DefId ) ;
110
110
111
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
111
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
112
112
pub struct AliasDef ( pub ( crate ) DefId ) ;
113
113
114
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
114
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
115
115
pub struct TraitDef ( pub ( crate ) DefId ) ;
116
116
117
- #[ derive( Clone , PartialEq , Eq , Debug ) ]
117
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
118
+ pub struct GenericDef ( pub ( crate ) DefId ) ;
119
+
120
+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
118
121
pub struct ConstDef ( pub ( crate ) DefId ) ;
119
122
120
123
impl TraitDef {
@@ -132,6 +135,12 @@ impl ImplDef {
132
135
}
133
136
}
134
137
138
+ impl GenericDef {
139
+ pub fn generics_of ( & self ) -> Generics {
140
+ with ( |tcx| tcx. generics_of ( self ) )
141
+ }
142
+ }
143
+
135
144
#[ derive( Clone , Debug ) ]
136
145
pub struct GenericArgs ( pub Vec < GenericArgKind > ) ;
137
146
@@ -461,3 +470,30 @@ pub struct TraitRef {
461
470
pub def_id : TraitDef ,
462
471
pub args : GenericArgs ,
463
472
}
473
+
474
+ #[ derive( Clone , Debug ) ]
475
+ pub struct Generics {
476
+ pub parent : Option < GenericDef > ,
477
+ pub parent_count : usize ,
478
+ pub params : Vec < GenericParamDef > ,
479
+ pub param_def_id_to_index : Vec < ( GenericDef , u32 ) > ,
480
+ pub has_self : bool ,
481
+ pub has_late_bound_regions : Option < Span > ,
482
+ pub host_effect_index : Option < usize > ,
483
+ }
484
+
485
+ #[ derive( Clone , Debug ) ]
486
+ pub enum GenericParamDefKind {
487
+ Lifetime ,
488
+ Type { has_default : bool , synthetic : bool } ,
489
+ Const { has_default : bool } ,
490
+ }
491
+
492
+ #[ derive( Clone , Debug ) ]
493
+ pub struct GenericParamDef {
494
+ pub name : super :: Symbol ,
495
+ pub def_id : GenericDef ,
496
+ pub index : u32 ,
497
+ pub pure_wrt_drop : bool ,
498
+ pub kind : GenericParamDefKind ,
499
+ }
0 commit comments