@@ -1009,7 +1009,7 @@ pub struct Resolver<'a, 'tcx: 'a> {
10091009 // The idents for the primitive types.
10101010 primitive_type_table : PrimitiveTypeTable ,
10111011
1012- def_map : RefCell < DefMap > ,
1012+ def_map : DefMap ,
10131013 freevars : FreevarMap ,
10141014 freevars_seen : NodeMap < NodeMap < usize > > ,
10151015 export_map : ExportMap ,
@@ -1133,7 +1133,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
11331133
11341134 primitive_type_table : PrimitiveTypeTable :: new ( ) ,
11351135
1136- def_map : RefCell :: new ( NodeMap ( ) ) ,
1136+ def_map : NodeMap ( ) ,
11371137 freevars : NodeMap ( ) ,
11381138 freevars_seen : NodeMap ( ) ,
11391139 export_map : NodeMap ( ) ,
@@ -2001,14 +2001,16 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
20012001 // user and one 'x' came from the macro.
20022002 fn binding_mode_map ( & mut self , pat : & Pat ) -> BindingMap {
20032003 let mut result = HashMap :: new ( ) ;
2004- pat_bindings ( & self . def_map , pat, |binding_mode, _id, sp, path1| {
2004+ let def_map = RefCell :: new ( :: std:: mem:: replace ( & mut self . def_map , NodeMap ( ) ) ) ;
2005+ pat_bindings ( & def_map, pat, |binding_mode, _id, sp, path1| {
20052006 let name = path1. node ;
20062007 result. insert ( name,
20072008 BindingInfo {
20082009 span : sp,
20092010 binding_mode : binding_mode,
20102011 } ) ;
20112012 } ) ;
2013+ self . def_map = def_map. into_inner ( ) ;
20122014 return result;
20132015 }
20142016
@@ -2799,7 +2801,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
27992801
28002802 if let Some ( node_id) = self . current_self_type . as_ref ( ) . and_then ( extract_node_id) {
28012803 // Look for a field with the same name in the current self_type.
2802- match self . def_map . borrow ( ) . get ( & node_id) . map ( |d| d. full_def ( ) ) {
2804+ match self . def_map . get ( & node_id) . map ( |d| d. full_def ( ) ) {
28032805 Some ( Def :: Enum ( did) ) |
28042806 Some ( Def :: TyAlias ( did) ) |
28052807 Some ( Def :: Struct ( did) ) |
@@ -3273,7 +3275,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
32733275
32743276 fn record_def ( & mut self , node_id : NodeId , resolution : PathResolution ) {
32753277 debug ! ( "(recording def) recording {:?} for {}" , resolution, node_id) ;
3276- if let Some ( prev_res) = self . def_map . borrow_mut ( ) . insert ( node_id, resolution) {
3278+ if let Some ( prev_res) = self . def_map . insert ( node_id, resolution) {
32773279 let span = self . ast_map . opt_span ( node_id) . unwrap_or ( codemap:: DUMMY_SP ) ;
32783280 span_bug ! ( span,
32793281 "path resolved multiple times ({:?} before, {:?} now)" ,
@@ -3314,7 +3316,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
33143316 Success ( module) => {
33153317 let def = module. def . unwrap ( ) ;
33163318 let path_resolution = PathResolution { base_def : def, depth : 0 } ;
3317- self . def_map . borrow_mut ( ) . insert ( id, path_resolution) ;
3319+ self . def_map . insert ( id, path_resolution) ;
33183320 ty:: Visibility :: Restricted ( self . ast_map . as_local_node_id ( def. def_id ( ) ) . unwrap ( ) )
33193321 }
33203322 Failed ( Some ( ( span, msg) ) ) => {
@@ -3568,7 +3570,7 @@ pub fn resolve_crate<'a, 'tcx>(session: &'a Session,
35683570 resolver. report_privacy_errors ( ) ;
35693571
35703572 CrateMap {
3571- def_map : resolver. def_map ,
3573+ def_map : RefCell :: new ( resolver. def_map ) ,
35723574 freevars : resolver. freevars ,
35733575 maybe_unused_trait_imports : resolver. maybe_unused_trait_imports ,
35743576 export_map : resolver. export_map ,
0 commit comments