@@ -2553,6 +2553,11 @@ pub struct OpaqueTy<'hir> {
25532553     pub  in_trait :  bool , 
25542554} 
25552555
2556+ #[ derive( Copy ,  Clone ,  Debug ,  HashStable_Generic ) ]  
2557+ pub  struct  AssocOpaqueTy  { 
2558+     // Add some data if necessary 
2559+ } 
2560+ 
25562561/// From whence the opaque type came. 
25572562#[ derive( Copy ,  Clone ,  PartialEq ,  Eq ,  Debug ,  HashStable_Generic ) ]  
25582563pub  enum  OpaqueTyOrigin  { 
@@ -3363,6 +3368,7 @@ pub enum OwnerNode<'hir> {
33633368    TraitItem ( & ' hir  TraitItem < ' hir > ) , 
33643369    ImplItem ( & ' hir  ImplItem < ' hir > ) , 
33653370    Crate ( & ' hir  Mod < ' hir > ) , 
3371+     AssocOpaqueTy ( & ' hir  AssocOpaqueTy ) , 
33663372} 
33673373
33683374impl < ' hir >  OwnerNode < ' hir >  { 
@@ -3372,7 +3378,7 @@ impl<'hir> OwnerNode<'hir> {
33723378            | OwnerNode :: ForeignItem ( ForeignItem  {  ident,  .. } ) 
33733379            | OwnerNode :: ImplItem ( ImplItem  {  ident,  .. } ) 
33743380            | OwnerNode :: TraitItem ( TraitItem  {  ident,  .. } )  => Some ( * ident) , 
3375-             OwnerNode :: Crate ( ..)  => None , 
3381+             OwnerNode :: Crate ( ..)  |  OwnerNode :: AssocOpaqueTy ( .. )   => None , 
33763382        } 
33773383    } 
33783384
@@ -3385,6 +3391,7 @@ impl<'hir> OwnerNode<'hir> {
33853391            | OwnerNode :: ImplItem ( ImplItem  {  span,  .. } ) 
33863392            | OwnerNode :: TraitItem ( TraitItem  {  span,  .. } )  => span, 
33873393            OwnerNode :: Crate ( Mod  {  spans :  ModSpans  {  inner_span,  .. } ,  .. } )  => inner_span, 
3394+             OwnerNode :: AssocOpaqueTy ( ..)  => unreachable ! ( ) , 
33883395        } 
33893396    } 
33903397
@@ -3443,6 +3450,7 @@ impl<'hir> OwnerNode<'hir> {
34433450            | OwnerNode :: ImplItem ( ImplItem  {  owner_id,  .. } ) 
34443451            | OwnerNode :: ForeignItem ( ForeignItem  {  owner_id,  .. } )  => * owner_id, 
34453452            OwnerNode :: Crate ( ..)  => crate :: CRATE_HIR_ID . owner , 
3453+             OwnerNode :: AssocOpaqueTy ( ..)  => unreachable ! ( ) , 
34463454        } 
34473455    } 
34483456
@@ -3486,6 +3494,7 @@ impl<'hir> Into<Node<'hir>> for OwnerNode<'hir> {
34863494            OwnerNode :: ImplItem ( n)  => Node :: ImplItem ( n) , 
34873495            OwnerNode :: TraitItem ( n)  => Node :: TraitItem ( n) , 
34883496            OwnerNode :: Crate ( n)  => Node :: Crate ( n) , 
3497+             OwnerNode :: AssocOpaqueTy ( n)  => Node :: AssocOpaqueTy ( n) , 
34893498        } 
34903499    } 
34913500} 
@@ -3523,6 +3532,7 @@ pub enum Node<'hir> {
35233532    WhereBoundPredicate ( & ' hir  WhereBoundPredicate < ' hir > ) , 
35243533    // FIXME: Merge into `Node::Infer`. 
35253534    ArrayLenInfer ( & ' hir  InferArg ) , 
3535+     AssocOpaqueTy ( & ' hir  AssocOpaqueTy ) , 
35263536    // Span by reference to minimize `Node`'s size 
35273537    #[ allow( rustc:: pass_by_value) ]  
35283538    Err ( & ' hir  Span ) , 
@@ -3573,6 +3583,7 @@ impl<'hir> Node<'hir> {
35733583            | Node :: Infer ( ..) 
35743584            | Node :: WhereBoundPredicate ( ..) 
35753585            | Node :: ArrayLenInfer ( ..) 
3586+             | Node :: AssocOpaqueTy ( ..) 
35763587            | Node :: Err ( ..)  => None , 
35773588        } 
35783589    } 
@@ -3678,6 +3689,7 @@ impl<'hir> Node<'hir> {
36783689            Node :: TraitItem ( i)  => Some ( OwnerNode :: TraitItem ( i) ) , 
36793690            Node :: ImplItem ( i)  => Some ( OwnerNode :: ImplItem ( i) ) , 
36803691            Node :: Crate ( i)  => Some ( OwnerNode :: Crate ( i) ) , 
3692+             Node :: AssocOpaqueTy ( i)  => Some ( OwnerNode :: AssocOpaqueTy ( i) ) , 
36813693            _ => None , 
36823694        } 
36833695    } 
0 commit comments