@@ -1241,11 +1241,21 @@ impl Parser {
12411241
12421242 let previous_key_slot = self . replace_current_local_binding ( & key_name, key_slot) ;
12431243 let previous_value_slot = self . replace_current_local_binding ( & value_name, value_slot) ;
1244+ let previous_key_schema = self . local_schemas . get ( & key_slot) . cloned ( ) ;
1245+ let previous_value_schema = self . local_schemas . get ( & value_slot) . cloned ( ) ;
1246+ if let Some ( schema) = key_schema. as_ref ( ) {
1247+ self . local_schemas . insert ( key_slot, schema. clone ( ) ) ;
1248+ }
1249+ if let Some ( schema) = value_schema. as_ref ( ) {
1250+ self . local_schemas . insert ( value_slot, schema. clone ( ) ) ;
1251+ }
12441252 self . borrowed_map_iter_locals . push ( map_slot) ;
12451253 self . loop_depth += 1 ;
12461254 let body_result = self . parse_block ( "expected '{' after borrowed map" ) ;
12471255 self . loop_depth -= 1 ;
12481256 self . borrowed_map_iter_locals . pop ( ) ;
1257+ self . restore_local_schema ( value_slot, previous_value_schema) ;
1258+ self . restore_local_schema ( key_slot, previous_key_schema) ;
12491259 self . restore_current_local_binding ( & value_name, previous_value_slot) ;
12501260 self . restore_current_local_binding ( & key_name, previous_key_slot) ;
12511261 let mut body = body_result?;
@@ -1328,6 +1338,14 @@ impl Parser {
13281338 }
13291339 }
13301340
1341+ fn restore_local_schema ( & mut self , slot : LocalSlot , previous : Option < TypeSchema > ) {
1342+ if let Some ( schema) = previous {
1343+ self . local_schemas . insert ( slot, schema) ;
1344+ } else {
1345+ self . local_schemas . remove ( & slot) ;
1346+ }
1347+ }
1348+
13311349 fn bind_for_loop_local ( & mut self , name : & str ) -> Result < ( LocalSlot , bool ) , ParseError > {
13321350 if !self . closure_scopes . is_empty ( ) {
13331351 if let Some ( index) = self
0 commit comments