@@ -127,8 +127,6 @@ impl Ord for BindingError {
127
127
enum ResolutionError < ' a > {
128
128
/// error E0401: can't use type parameters from outer function
129
129
TypeParametersFromOuterFunction ,
130
- /// error E0402: cannot use an outer type parameter in this context
131
- OuterTypeParameterContext ,
132
130
/// error E0403: the name is already used for a type parameter in this type parameter list
133
131
NameAlreadyUsedInTypeParameterList ( Name , & ' a Span ) ,
134
132
/// error E0407: method is not a member of trait
@@ -187,12 +185,6 @@ fn resolve_struct_error<'sess, 'a>(resolver: &'sess Resolver,
187
185
err. span_label ( span, "use of type variable from outer function" ) ;
188
186
err
189
187
}
190
- ResolutionError :: OuterTypeParameterContext => {
191
- struct_span_err ! ( resolver. session,
192
- span,
193
- E0402 ,
194
- "cannot use an outer type parameter in this context" )
195
- }
196
188
ResolutionError :: NameAlreadyUsedInTypeParameterList ( name, first_use_span) => {
197
189
let mut err = struct_span_err ! ( resolver. session,
198
190
span,
@@ -1671,16 +1663,16 @@ impl<'a> Resolver<'a> {
1671
1663
this. check_proc_macro_attrs ( & trait_item. attrs ) ;
1672
1664
1673
1665
match trait_item. node {
1674
- TraitItemKind :: Const ( _, ref default) => {
1666
+ TraitItemKind :: Const ( ref ty, ref default) => {
1667
+ this. visit_ty ( ty) ;
1668
+
1675
1669
// Only impose the restrictions of
1676
- // ConstRibKind if there's an actual constant
1670
+ // ConstRibKind for an actual constant
1677
1671
// expression in a provided default.
1678
- if default . is_some ( ) {
1672
+ if let Some ( ref expr ) = * default {
1679
1673
this. with_constant_rib ( |this| {
1680
- visit :: walk_trait_item ( this, trait_item )
1674
+ this. visit_expr ( expr ) ;
1681
1675
} ) ;
1682
- } else {
1683
- visit:: walk_trait_item ( this, trait_item)
1684
1676
}
1685
1677
}
1686
1678
TraitItemKind :: Method ( ref sig, _) => {
@@ -1709,9 +1701,13 @@ impl<'a> Resolver<'a> {
1709
1701
} ) ;
1710
1702
}
1711
1703
1712
- ItemKind :: Const ( ..) | ItemKind :: Static ( ..) => {
1713
- self . with_constant_rib ( |this| {
1714
- visit:: walk_item ( this, item) ;
1704
+ ItemKind :: Static ( ref ty, _, ref expr) |
1705
+ ItemKind :: Const ( ref ty, ref expr) => {
1706
+ self . with_item_rib ( |this| {
1707
+ this. visit_ty ( ty) ;
1708
+ this. with_constant_rib ( |this| {
1709
+ this. visit_expr ( expr) ;
1710
+ } ) ;
1715
1711
} ) ;
1716
1712
}
1717
1713
@@ -1782,13 +1778,21 @@ impl<'a> Resolver<'a> {
1782
1778
self . label_ribs . pop ( ) ;
1783
1779
}
1784
1780
1781
+ fn with_item_rib < F > ( & mut self , f : F )
1782
+ where F : FnOnce ( & mut Resolver )
1783
+ {
1784
+ self . ribs [ ValueNS ] . push ( Rib :: new ( ItemRibKind ) ) ;
1785
+ self . ribs [ TypeNS ] . push ( Rib :: new ( ItemRibKind ) ) ;
1786
+ f ( self ) ;
1787
+ self . ribs [ TypeNS ] . pop ( ) ;
1788
+ self . ribs [ ValueNS ] . pop ( ) ;
1789
+ }
1790
+
1785
1791
fn with_constant_rib < F > ( & mut self , f : F )
1786
1792
where F : FnOnce ( & mut Resolver )
1787
1793
{
1788
1794
self . ribs [ ValueNS ] . push ( Rib :: new ( ConstantItemRibKind ) ) ;
1789
- self . ribs [ TypeNS ] . push ( Rib :: new ( ConstantItemRibKind ) ) ;
1790
1795
f ( self ) ;
1791
- self . ribs [ TypeNS ] . pop ( ) ;
1792
1796
self . ribs [ ValueNS ] . pop ( ) ;
1793
1797
}
1794
1798
@@ -2755,7 +2759,8 @@ impl<'a> Resolver<'a> {
2755
2759
for rib in ribs {
2756
2760
match rib. kind {
2757
2761
NormalRibKind | MethodRibKind ( _) | ClosureRibKind ( ..) |
2758
- ModuleRibKind ( ..) | MacroDefinition ( ..) | ForwardTyParamBanRibKind => {
2762
+ ModuleRibKind ( ..) | MacroDefinition ( ..) | ForwardTyParamBanRibKind |
2763
+ ConstantItemRibKind => {
2759
2764
// Nothing to do. Continue.
2760
2765
}
2761
2766
ItemRibKind => {
@@ -2767,14 +2772,6 @@ impl<'a> Resolver<'a> {
2767
2772
}
2768
2773
return Def :: Err ;
2769
2774
}
2770
- ConstantItemRibKind => {
2771
- // see #9186
2772
- if record_used {
2773
- resolve_error ( self , span,
2774
- ResolutionError :: OuterTypeParameterContext ) ;
2775
- }
2776
- return Def :: Err ;
2777
- }
2778
2775
}
2779
2776
}
2780
2777
}
0 commit comments