@@ -56,7 +56,7 @@ use rustc::util::nodemap::{NodeMap, NodeSet, FnvHashMap, FnvHashSet};
56
56
use syntax:: ext:: base:: MultiItemModifier ;
57
57
use syntax:: ext:: hygiene:: Mark ;
58
58
use syntax:: ast:: { self , FloatTy } ;
59
- use syntax:: ast:: { CRATE_NODE_ID , Name , NodeId , IntTy , UintTy } ;
59
+ use syntax:: ast:: { CRATE_NODE_ID , Name , NodeId , SpannedIdent , IntTy , UintTy } ;
60
60
use syntax:: parse:: token:: { self , keywords} ;
61
61
use syntax:: util:: lev_distance:: find_best_match_for_name;
62
62
@@ -2237,7 +2237,7 @@ impl<'a> Resolver<'a> {
2237
2237
}
2238
2238
2239
2239
fn fresh_binding ( & mut self ,
2240
- ident : & ast :: SpannedIdent ,
2240
+ ident : & SpannedIdent ,
2241
2241
pat_id : NodeId ,
2242
2242
outer_pat_id : NodeId ,
2243
2243
pat_src : PatternSource ,
@@ -2803,11 +2803,11 @@ impl<'a> Resolver<'a> {
2803
2803
} SuggestionType :: NotFound
2804
2804
}
2805
2805
2806
- fn resolve_labeled_block ( & mut self , label : Option < ast :: Ident > , id : NodeId , block : & Block ) {
2806
+ fn resolve_labeled_block ( & mut self , label : Option < SpannedIdent > , id : NodeId , block : & Block ) {
2807
2807
if let Some ( label) = label {
2808
2808
let def = Def :: Label ( id) ;
2809
2809
self . with_label_rib ( |this| {
2810
- this. label_ribs . last_mut ( ) . unwrap ( ) . bindings . insert ( label, def) ;
2810
+ this. label_ribs . last_mut ( ) . unwrap ( ) . bindings . insert ( label. node , def) ;
2811
2811
this. visit_block ( block) ;
2812
2812
} ) ;
2813
2813
} else {
@@ -3006,19 +3006,6 @@ impl<'a> Resolver<'a> {
3006
3006
visit:: walk_expr ( self , expr) ;
3007
3007
}
3008
3008
3009
- ExprKind :: Loop ( _, Some ( label) ) | ExprKind :: While ( .., Some ( label) ) => {
3010
- self . with_label_rib ( |this| {
3011
- let def = Def :: Label ( expr. id ) ;
3012
-
3013
- {
3014
- let rib = this. label_ribs . last_mut ( ) . unwrap ( ) ;
3015
- rib. bindings . insert ( label. node , def) ;
3016
- }
3017
-
3018
- visit:: walk_expr ( this, expr) ;
3019
- } )
3020
- }
3021
-
3022
3009
ExprKind :: Break ( Some ( label) ) | ExprKind :: Continue ( Some ( label) ) => {
3023
3010
match self . search_label ( label. node ) {
3024
3011
None => {
@@ -3048,12 +3035,19 @@ impl<'a> Resolver<'a> {
3048
3035
optional_else. as_ref ( ) . map ( |expr| self . visit_expr ( expr) ) ;
3049
3036
}
3050
3037
3038
+ ExprKind :: Loop ( ref block, label) => self . resolve_labeled_block ( label, expr. id , & block) ,
3039
+
3040
+ ExprKind :: While ( ref subexpression, ref block, label) => {
3041
+ self . visit_expr ( subexpression) ;
3042
+ self . resolve_labeled_block ( label, expr. id , & block) ;
3043
+ }
3044
+
3051
3045
ExprKind :: WhileLet ( ref pattern, ref subexpression, ref block, label) => {
3052
3046
self . visit_expr ( subexpression) ;
3053
3047
self . value_ribs . push ( Rib :: new ( NormalRibKind ) ) ;
3054
3048
self . resolve_pattern ( pattern, PatternSource :: WhileLet , & mut FnvHashMap ( ) ) ;
3055
3049
3056
- self . resolve_labeled_block ( label. map ( |l| l . node ) , expr. id , block) ;
3050
+ self . resolve_labeled_block ( label, expr. id , block) ;
3057
3051
3058
3052
self . value_ribs . pop ( ) ;
3059
3053
}
@@ -3063,7 +3057,7 @@ impl<'a> Resolver<'a> {
3063
3057
self . value_ribs . push ( Rib :: new ( NormalRibKind ) ) ;
3064
3058
self . resolve_pattern ( pattern, PatternSource :: For , & mut FnvHashMap ( ) ) ;
3065
3059
3066
- self . resolve_labeled_block ( label. map ( |l| l . node ) , expr. id , block) ;
3060
+ self . resolve_labeled_block ( label, expr. id , block) ;
3067
3061
3068
3062
self . value_ribs . pop ( ) ;
3069
3063
}
0 commit comments