| 
5 | 5 | //! unexpanded macros in the fragment are visited and registered.  | 
6 | 6 | //! Imports are also considered items and placed into modules here, but not resolved yet.  | 
7 | 7 | 
  | 
8 |  | -use std::cell::Cell;  | 
9 | 8 | use std::sync::Arc;  | 
10 | 9 | 
 
  | 
11 | 10 | use rustc_ast::visit::{self, AssocCtxt, Visitor, WalkItemKind};  | 
@@ -35,6 +34,7 @@ use crate::Namespace::{MacroNS, TypeNS, ValueNS};  | 
35 | 34 | use crate::def_collector::collect_definitions;  | 
36 | 35 | use crate::imports::{ImportData, ImportKind};  | 
37 | 36 | use crate::macros::{MacroRulesBinding, MacroRulesScope, MacroRulesScopeRef};  | 
 | 37 | +use crate::ref_mut::CmCell;  | 
38 | 38 | use crate::{  | 
39 | 39 |     BindingKey, ExternPreludeEntry, Finalize, MacroData, Module, ModuleKind, ModuleOrUniformRoot,  | 
40 | 40 |     NameBinding, ParentScope, PathResult, ResolutionError, Resolver, Segment, Used,  | 
@@ -87,7 +87,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {  | 
87 | 87 |         // because they can be fetched by glob imports from those modules, and bring traits  | 
88 | 88 |         // into scope both directly and through glob imports.  | 
89 | 89 |         let key = BindingKey::new_disambiguated(ident, ns, || {  | 
90 |  | -            parent.underscore_disambiguator.update(|d| d + 1);  | 
 | 90 | +            // FIXME(batched): Will be fixed in batched resolution.  | 
 | 91 | +            parent.underscore_disambiguator.update_unchecked(|d| d + 1);  | 
91 | 92 |             parent.underscore_disambiguator.get()  | 
92 | 93 |         });  | 
93 | 94 |         if self  | 
@@ -477,7 +478,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {  | 
477 | 478 |             kind,  | 
478 | 479 |             parent_scope: self.parent_scope,  | 
479 | 480 |             module_path,  | 
480 |  | -            imported_module: Cell::new(None),  | 
 | 481 | +            imported_module: CmCell::new(None),  | 
481 | 482 |             span,  | 
482 | 483 |             use_span: item.span,  | 
483 | 484 |             use_span_with_attributes: item.span_with_attributes(),  | 
@@ -505,7 +506,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {  | 
505 | 506 |                     });  | 
506 | 507 |                 }  | 
507 | 508 |             }  | 
508 |  | -            ImportKind::Glob { .. } => current_module.globs.borrow_mut().push(import),  | 
 | 509 | +            ImportKind::Glob { .. } => current_module.globs.borrow_mut(self.r).push(import),  | 
509 | 510 |             _ => unreachable!(),  | 
510 | 511 |         }  | 
511 | 512 |     }  | 
@@ -668,7 +669,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {  | 
668 | 669 |             }  | 
669 | 670 |             ast::UseTreeKind::Glob => {  | 
670 | 671 |                 if !ast::attr::contains_name(&item.attrs, sym::prelude_import) {  | 
671 |  | -                    let kind = ImportKind::Glob { max_vis: Cell::new(None), id };  | 
 | 672 | +                    let kind = ImportKind::Glob { max_vis: CmCell::new(None), id };  | 
672 | 673 |                     self.add_import(prefix, kind, use_tree.span, item, root_span, item.id, vis);  | 
673 | 674 |                 } else {  | 
674 | 675 |                     // Resolve the prelude import early.  | 
@@ -971,7 +972,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {  | 
971 | 972 |             kind: ImportKind::ExternCrate { source: orig_name, target: ident, id: item.id },  | 
972 | 973 |             root_id: item.id,  | 
973 | 974 |             parent_scope: self.parent_scope,  | 
974 |  | -            imported_module: Cell::new(module),  | 
 | 975 | +            imported_module: CmCell::new(module),  | 
975 | 976 |             has_attributes: !item.attrs.is_empty(),  | 
976 | 977 |             use_span_with_attributes: item.span_with_attributes(),  | 
977 | 978 |             use_span: item.span,  | 
@@ -1103,7 +1104,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {  | 
1103 | 1104 |                 kind: ImportKind::MacroUse { warn_private },  | 
1104 | 1105 |                 root_id: item.id,  | 
1105 | 1106 |                 parent_scope: this.parent_scope,  | 
1106 |  | -                imported_module: Cell::new(Some(ModuleOrUniformRoot::Module(module))),  | 
 | 1107 | +                imported_module: CmCell::new(Some(ModuleOrUniformRoot::Module(module))),  | 
1107 | 1108 |                 use_span_with_attributes: item.span_with_attributes(),  | 
1108 | 1109 |                 has_attributes: !item.attrs.is_empty(),  | 
1109 | 1110 |                 use_span: item.span,  | 
@@ -1196,7 +1197,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {  | 
1196 | 1197 |     /// directly into its parent scope's module.  | 
1197 | 1198 |     fn visit_invoc_in_module(&mut self, id: NodeId) -> MacroRulesScopeRef<'ra> {  | 
1198 | 1199 |         let invoc_id = self.visit_invoc(id);  | 
1199 |  | -        self.parent_scope.module.unexpanded_invocations.borrow_mut().insert(invoc_id);  | 
 | 1200 | +        self.parent_scope.module.unexpanded_invocations.borrow_mut(self.r).insert(invoc_id);  | 
1200 | 1201 |         self.r.arenas.alloc_macro_rules_scope(MacroRulesScope::Invocation(invoc_id))  | 
1201 | 1202 |     }  | 
1202 | 1203 | 
 
  | 
@@ -1274,7 +1275,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {  | 
1274 | 1275 |                     kind: ImportKind::MacroExport,  | 
1275 | 1276 |                     root_id: item.id,  | 
1276 | 1277 |                     parent_scope: self.parent_scope,  | 
1277 |  | -                    imported_module: Cell::new(None),  | 
 | 1278 | +                    imported_module: CmCell::new(None),  | 
1278 | 1279 |                     has_attributes: false,  | 
1279 | 1280 |                     use_span_with_attributes: span,  | 
1280 | 1281 |                     use_span: span,  | 
 | 
0 commit comments