@@ -2548,6 +2548,11 @@ pub struct OpaqueTy<'hir> {
25482548 pub in_trait : bool ,
25492549}
25502550
2551+ #[ derive( Copy , Clone , Debug , HashStable_Generic ) ]
2552+ pub struct AssocOpaqueTy {
2553+ // Maybe add some data if necessary
2554+ }
2555+
25512556/// From whence the opaque type came.
25522557#[ derive( Copy , Clone , PartialEq , Eq , Debug , HashStable_Generic ) ]
25532558pub enum OpaqueTyOrigin {
@@ -3331,6 +3336,7 @@ pub enum OwnerNode<'hir> {
33313336 TraitItem ( & ' hir TraitItem < ' hir > ) ,
33323337 ImplItem ( & ' hir ImplItem < ' hir > ) ,
33333338 Crate ( & ' hir Mod < ' hir > ) ,
3339+ AssocOpaqueTy ( & ' hir AssocOpaqueTy ) ,
33343340}
33353341
33363342impl < ' hir > OwnerNode < ' hir > {
@@ -3340,7 +3346,7 @@ impl<'hir> OwnerNode<'hir> {
33403346 | OwnerNode :: ForeignItem ( ForeignItem { ident, .. } )
33413347 | OwnerNode :: ImplItem ( ImplItem { ident, .. } )
33423348 | OwnerNode :: TraitItem ( TraitItem { ident, .. } ) => Some ( * ident) ,
3343- OwnerNode :: Crate ( ..) => None ,
3349+ OwnerNode :: Crate ( ..) | OwnerNode :: AssocOpaqueTy ( .. ) => None ,
33443350 }
33453351 }
33463352
@@ -3353,6 +3359,7 @@ impl<'hir> OwnerNode<'hir> {
33533359 | OwnerNode :: ImplItem ( ImplItem { span, .. } )
33543360 | OwnerNode :: TraitItem ( TraitItem { span, .. } ) => span,
33553361 OwnerNode :: Crate ( Mod { spans : ModSpans { inner_span, .. } , .. } ) => inner_span,
3362+ OwnerNode :: AssocOpaqueTy ( ..) => unreachable ! ( ) ,
33563363 }
33573364 }
33583365
@@ -3411,6 +3418,7 @@ impl<'hir> OwnerNode<'hir> {
34113418 | OwnerNode :: ImplItem ( ImplItem { owner_id, .. } )
34123419 | OwnerNode :: ForeignItem ( ForeignItem { owner_id, .. } ) => * owner_id,
34133420 OwnerNode :: Crate ( ..) => crate :: CRATE_HIR_ID . owner ,
3421+ OwnerNode :: AssocOpaqueTy ( ..) => unreachable ! ( ) ,
34143422 }
34153423 }
34163424
@@ -3454,6 +3462,7 @@ impl<'hir> Into<Node<'hir>> for OwnerNode<'hir> {
34543462 OwnerNode :: ImplItem ( n) => Node :: ImplItem ( n) ,
34553463 OwnerNode :: TraitItem ( n) => Node :: TraitItem ( n) ,
34563464 OwnerNode :: Crate ( n) => Node :: Crate ( n) ,
3465+ OwnerNode :: AssocOpaqueTy ( n) => Node :: AssocOpaqueTy ( n) ,
34573466 }
34583467 }
34593468}
@@ -3491,6 +3500,7 @@ pub enum Node<'hir> {
34913500 WhereBoundPredicate ( & ' hir WhereBoundPredicate < ' hir > ) ,
34923501 // FIXME: Merge into `Node::Infer`.
34933502 ArrayLenInfer ( & ' hir InferArg ) ,
3503+ AssocOpaqueTy ( & ' hir AssocOpaqueTy ) ,
34943504 // Span by reference to minimize `Node`'s size
34953505 #[ allow( rustc:: pass_by_value) ]
34963506 Err ( & ' hir Span ) ,
@@ -3541,6 +3551,7 @@ impl<'hir> Node<'hir> {
35413551 | Node :: Infer ( ..)
35423552 | Node :: WhereBoundPredicate ( ..)
35433553 | Node :: ArrayLenInfer ( ..)
3554+ | Node :: AssocOpaqueTy ( ..)
35443555 | Node :: Err ( ..) => None ,
35453556 }
35463557 }
@@ -3646,6 +3657,7 @@ impl<'hir> Node<'hir> {
36463657 Node :: TraitItem ( i) => Some ( OwnerNode :: TraitItem ( i) ) ,
36473658 Node :: ImplItem ( i) => Some ( OwnerNode :: ImplItem ( i) ) ,
36483659 Node :: Crate ( i) => Some ( OwnerNode :: Crate ( i) ) ,
3660+ Node :: AssocOpaqueTy ( i) => Some ( OwnerNode :: AssocOpaqueTy ( i) ) ,
36493661 _ => None ,
36503662 }
36513663 }
0 commit comments