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