@@ -2553,6 +2553,11 @@ pub struct OpaqueTy<'hir> {
2553
2553
pub in_trait : bool ,
2554
2554
}
2555
2555
2556
+ #[ derive( Copy , Clone , Debug , HashStable_Generic ) ]
2557
+ pub struct AssocOpaqueTy {
2558
+ // Add some data if necessary
2559
+ }
2560
+
2556
2561
/// From whence the opaque type came.
2557
2562
#[ derive( Copy , Clone , PartialEq , Eq , Debug , HashStable_Generic ) ]
2558
2563
pub enum OpaqueTyOrigin {
@@ -3363,6 +3368,7 @@ pub enum OwnerNode<'hir> {
3363
3368
TraitItem ( & ' hir TraitItem < ' hir > ) ,
3364
3369
ImplItem ( & ' hir ImplItem < ' hir > ) ,
3365
3370
Crate ( & ' hir Mod < ' hir > ) ,
3371
+ AssocOpaqueTy ( & ' hir AssocOpaqueTy ) ,
3366
3372
}
3367
3373
3368
3374
impl < ' hir > OwnerNode < ' hir > {
@@ -3372,7 +3378,7 @@ impl<'hir> OwnerNode<'hir> {
3372
3378
| OwnerNode :: ForeignItem ( ForeignItem { ident, .. } )
3373
3379
| OwnerNode :: ImplItem ( ImplItem { ident, .. } )
3374
3380
| OwnerNode :: TraitItem ( TraitItem { ident, .. } ) => Some ( * ident) ,
3375
- OwnerNode :: Crate ( ..) => None ,
3381
+ OwnerNode :: Crate ( ..) | OwnerNode :: AssocOpaqueTy ( .. ) => None ,
3376
3382
}
3377
3383
}
3378
3384
@@ -3385,6 +3391,7 @@ impl<'hir> OwnerNode<'hir> {
3385
3391
| OwnerNode :: ImplItem ( ImplItem { span, .. } )
3386
3392
| OwnerNode :: TraitItem ( TraitItem { span, .. } ) => span,
3387
3393
OwnerNode :: Crate ( Mod { spans : ModSpans { inner_span, .. } , .. } ) => inner_span,
3394
+ OwnerNode :: AssocOpaqueTy ( ..) => unreachable ! ( ) ,
3388
3395
}
3389
3396
}
3390
3397
@@ -3443,6 +3450,7 @@ impl<'hir> OwnerNode<'hir> {
3443
3450
| OwnerNode :: ImplItem ( ImplItem { owner_id, .. } )
3444
3451
| OwnerNode :: ForeignItem ( ForeignItem { owner_id, .. } ) => * owner_id,
3445
3452
OwnerNode :: Crate ( ..) => crate :: CRATE_HIR_ID . owner ,
3453
+ OwnerNode :: AssocOpaqueTy ( ..) => unreachable ! ( ) ,
3446
3454
}
3447
3455
}
3448
3456
@@ -3486,6 +3494,7 @@ impl<'hir> Into<Node<'hir>> for OwnerNode<'hir> {
3486
3494
OwnerNode :: ImplItem ( n) => Node :: ImplItem ( n) ,
3487
3495
OwnerNode :: TraitItem ( n) => Node :: TraitItem ( n) ,
3488
3496
OwnerNode :: Crate ( n) => Node :: Crate ( n) ,
3497
+ OwnerNode :: AssocOpaqueTy ( n) => Node :: AssocOpaqueTy ( n) ,
3489
3498
}
3490
3499
}
3491
3500
}
@@ -3523,6 +3532,7 @@ pub enum Node<'hir> {
3523
3532
WhereBoundPredicate ( & ' hir WhereBoundPredicate < ' hir > ) ,
3524
3533
// FIXME: Merge into `Node::Infer`.
3525
3534
ArrayLenInfer ( & ' hir InferArg ) ,
3535
+ AssocOpaqueTy ( & ' hir AssocOpaqueTy ) ,
3526
3536
// Span by reference to minimize `Node`'s size
3527
3537
#[ allow( rustc:: pass_by_value) ]
3528
3538
Err ( & ' hir Span ) ,
@@ -3573,6 +3583,7 @@ impl<'hir> Node<'hir> {
3573
3583
| Node :: Infer ( ..)
3574
3584
| Node :: WhereBoundPredicate ( ..)
3575
3585
| Node :: ArrayLenInfer ( ..)
3586
+ | Node :: AssocOpaqueTy ( ..)
3576
3587
| Node :: Err ( ..) => None ,
3577
3588
}
3578
3589
}
@@ -3678,6 +3689,7 @@ impl<'hir> Node<'hir> {
3678
3689
Node :: TraitItem ( i) => Some ( OwnerNode :: TraitItem ( i) ) ,
3679
3690
Node :: ImplItem ( i) => Some ( OwnerNode :: ImplItem ( i) ) ,
3680
3691
Node :: Crate ( i) => Some ( OwnerNode :: Crate ( i) ) ,
3692
+ Node :: AssocOpaqueTy ( i) => Some ( OwnerNode :: AssocOpaqueTy ( i) ) ,
3681
3693
_ => None ,
3682
3694
}
3683
3695
}
0 commit comments