@@ -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