diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-10-01 04:21:10 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-10-02 04:25:31 +0000 |
| commit | 797eb57aa8a82716dc493a98e0ba595da0253001 (patch) | |
| tree | 8be2933e2f288b0429eb3f5cc8e55d4ba3380ff0 /src | |
| parent | 5c2d76d23e9bea237748c01ff27e77d400611437 (diff) | |
| download | rust-797eb57aa8a82716dc493a98e0ba595da0253001.tar.gz rust-797eb57aa8a82716dc493a98e0ba595da0253001.zip | |
Refactor field `expansion_data` of `Resolver` to use a `Mark` instead of a `u32`.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/hir/map/def_collector.rs | 5 | ||||
| -rw-r--r-- | src/librustc_resolve/build_reduced_graph.rs | 2 | ||||
| -rw-r--r-- | src/librustc_resolve/lib.rs | 4 | ||||
| -rw-r--r-- | src/librustc_resolve/macros.rs | 14 | ||||
| -rw-r--r-- | src/libsyntax/ext/hygiene.rs | 5 |
5 files changed, 18 insertions, 12 deletions
diff --git a/src/librustc/hir/map/def_collector.rs b/src/librustc/hir/map/def_collector.rs index c0f38061a0d..0941af0b811 100644 --- a/src/librustc/hir/map/def_collector.rs +++ b/src/librustc/hir/map/def_collector.rs @@ -17,6 +17,7 @@ use hir::def_id::{CRATE_DEF_INDEX, DefId, DefIndex}; use middle::cstore::InlinedItem; use syntax::ast::*; +use syntax::ext::hygiene::Mark; use syntax::visit; use syntax::parse::token::{self, keywords}; @@ -31,7 +32,7 @@ pub struct DefCollector<'a> { } pub struct MacroInvocationData { - pub id: NodeId, + pub mark: Mark, pub def_index: DefIndex, pub const_integer: bool, } @@ -126,7 +127,7 @@ impl<'a> DefCollector<'a> { fn visit_macro_invoc(&mut self, id: NodeId, const_integer: bool) { if let Some(ref mut visit) = self.visit_macro_invoc { visit(MacroInvocationData { - id: id, + mark: Mark::from_placeholder_id(id), const_integer: const_integer, def_index: self.parent_def.unwrap(), }) diff --git a/src/librustc_resolve/build_reduced_graph.rs b/src/librustc_resolve/build_reduced_graph.rs index 55bf5dcf1cf..4d431824114 100644 --- a/src/librustc_resolve/build_reduced_graph.rs +++ b/src/librustc_resolve/build_reduced_graph.rs @@ -531,7 +531,7 @@ pub struct BuildReducedGraphVisitor<'a, 'b: 'a> { impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> { fn visit_invoc(&mut self, id: ast::NodeId) { - self.resolver.expansion_data.get_mut(&id.as_u32()).unwrap().module = + self.resolver.expansion_data.get_mut(&Mark::from_placeholder_id(id)).unwrap().module = self.resolver.current_module; } } diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 3db4be02cae..1ddd53d9c1b 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1084,7 +1084,7 @@ pub struct Resolver<'a> { macro_names: FnvHashSet<Name>, // Maps the `Mark` of an expansion to its containing module or block. - expansion_data: FnvHashMap<u32, macros::ExpansionData<'a>>, + expansion_data: FnvHashMap<Mark, macros::ExpansionData<'a>>, } pub struct ResolverArenas<'a> { @@ -1202,7 +1202,7 @@ impl<'a> Resolver<'a> { DefCollector::new(&mut definitions).collect_root(); let mut expansion_data = FnvHashMap(); - expansion_data.insert(0, macros::ExpansionData::root(graph_root)); // Crate root expansion + expansion_data.insert(Mark::root(), macros::ExpansionData::root(graph_root)); Resolver { session: session, diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index f120700fd33..b8999426904 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -55,7 +55,7 @@ impl<'a> base::Resolver for Resolver<'a> { fn get_module_scope(&mut self, id: ast::NodeId) -> Mark { let mark = Mark::fresh(); let module = self.module_map[&id]; - self.expansion_data.insert(mark.as_u32(), ExpansionData { + self.expansion_data.insert(mark, ExpansionData { module: module, def_index: module.def_id().unwrap().index, const_integer: false, @@ -65,7 +65,7 @@ impl<'a> base::Resolver for Resolver<'a> { fn visit_expansion(&mut self, mark: Mark, expansion: &Expansion) { self.collect_def_ids(mark, expansion); - self.current_module = self.expansion_data[&mark.as_u32()].module; + self.current_module = self.expansion_data[&mark].module; expansion.visit_with(&mut BuildReducedGraphVisitor { resolver: self }); } @@ -88,7 +88,7 @@ impl<'a> base::Resolver for Resolver<'a> { self.macro_names.insert(ident.name); } - let mut module = self.expansion_data[&scope.as_u32()].module; + let mut module = self.expansion_data[&scope].module; while module.macros_escape { module = module.parent.unwrap(); } @@ -104,7 +104,7 @@ impl<'a> base::Resolver for Resolver<'a> { fn find_attr_invoc(&mut self, attrs: &mut Vec<ast::Attribute>) -> Option<ast::Attribute> { for i in 0..attrs.len() { let name = intern(&attrs[i].name()); - match self.expansion_data[&0].module.macros.borrow().get(&name) { + match self.expansion_data[&Mark::root()].module.macros.borrow().get(&name) { Some(binding) => match *binding.ext { MultiModifier(..) | MultiDecorator(..) | SyntaxExtension::AttrProcMacro(..) => { return Some(attrs.remove(i)) @@ -132,7 +132,7 @@ impl<'a> base::Resolver for Resolver<'a> { InvocationKind::Attr { ref attr, .. } => (intern(&*attr.name()), attr.span), }; - let mut module = self.expansion_data[&scope.as_u32()].module; + let mut module = self.expansion_data[&scope].module; loop { if let Some(binding) = module.macros.borrow().get(&name) { return Some(binding.ext.clone()); @@ -168,9 +168,9 @@ impl<'a> Resolver<'a> { fn collect_def_ids(&mut self, mark: Mark, expansion: &Expansion) { let expansion_data = &mut self.expansion_data; - let ExpansionData { def_index, const_integer, module } = expansion_data[&mark.as_u32()]; + let ExpansionData { def_index, const_integer, module } = expansion_data[&mark]; let visit_macro_invoc = &mut |invoc: map::MacroInvocationData| { - expansion_data.entry(invoc.id.as_u32()).or_insert(ExpansionData { + expansion_data.entry(invoc.mark).or_insert(ExpansionData { def_index: invoc.def_index, const_integer: invoc.const_integer, module: module, diff --git a/src/libsyntax/ext/hygiene.rs b/src/libsyntax/ext/hygiene.rs index 34126fac4ac..0fd72277cca 100644 --- a/src/libsyntax/ext/hygiene.rs +++ b/src/libsyntax/ext/hygiene.rs @@ -15,6 +15,7 @@ //! and definition contexts*. J. Funct. Program. 22, 2 (March 2012), 181-216. //! DOI=10.1017/S0956796812000093 http://dx.doi.org/10.1017/S0956796812000093 +use ast::NodeId; use std::cell::RefCell; use std::collections::HashMap; use std::fmt; @@ -46,6 +47,10 @@ impl Mark { Mark(0) } + pub fn from_placeholder_id(id: NodeId) -> Self { + Mark(id.as_u32()) + } + pub fn as_u32(&self) -> u32 { self.0 } |
