@@ -22,7 +22,7 @@ pub struct Const {
2222
2323type Ident = Opaque ;
2424pub ( crate ) type Region = Opaque ;
25- type Span = Opaque ;
25+ pub type Span = Opaque ;
2626
2727#[ derive( Clone , Debug ) ]
2828pub enum TyKind {
@@ -87,34 +87,37 @@ pub enum Movability {
8787 Movable ,
8888}
8989
90- #[ derive( Clone , PartialEq , Eq , Debug ) ]
90+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
9191pub struct ForeignDef ( pub ( crate ) DefId ) ;
9292
93- #[ derive( Clone , PartialEq , Eq , Debug ) ]
93+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
9494pub struct FnDef ( pub ( crate ) DefId ) ;
9595
96- #[ derive( Clone , PartialEq , Eq , Debug ) ]
96+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
9797pub struct ClosureDef ( pub ( crate ) DefId ) ;
9898
99- #[ derive( Clone , PartialEq , Eq , Debug ) ]
99+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
100100pub struct GeneratorDef ( pub ( crate ) DefId ) ;
101101
102- #[ derive( Clone , PartialEq , Eq , Debug ) ]
102+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
103103pub struct ParamDef ( pub ( crate ) DefId ) ;
104104
105- #[ derive( Clone , PartialEq , Eq , Debug ) ]
105+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
106106pub struct BrNamedDef ( pub ( crate ) DefId ) ;
107107
108- #[ derive( Clone , PartialEq , Eq , Debug ) ]
108+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
109109pub struct AdtDef ( pub ( crate ) DefId ) ;
110110
111- #[ derive( Clone , PartialEq , Eq , Debug ) ]
111+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
112112pub struct AliasDef ( pub ( crate ) DefId ) ;
113113
114- #[ derive( Clone , PartialEq , Eq , Debug ) ]
114+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
115115pub struct TraitDef ( pub ( crate ) DefId ) ;
116116
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 ) ]
118121pub struct ConstDef ( pub ( crate ) DefId ) ;
119122
120123impl TraitDef {
@@ -132,6 +135,12 @@ impl ImplDef {
132135 }
133136}
134137
138+ impl GenericDef {
139+ pub fn generics_of ( & self ) -> Generics {
140+ with ( |tcx| tcx. generics_of ( self ) )
141+ }
142+ }
143+
135144#[ derive( Clone , Debug ) ]
136145pub struct GenericArgs ( pub Vec < GenericArgKind > ) ;
137146
@@ -461,3 +470,30 @@ pub struct TraitRef {
461470 pub def_id : TraitDef ,
462471 pub args : GenericArgs ,
463472}
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