diff options
| author | Nicholas Nethercote <nnethercote@mozilla.com> | 2019-06-03 16:10:03 +1000 |
|---|---|---|
| committer | Nicholas Nethercote <nnethercote@mozilla.com> | 2019-06-05 09:09:35 +1000 |
| commit | 4c9ecbf3d1a0fdac1d97c77783685c6281136c0b (patch) | |
| tree | f4f6536f0c6201c6f45dc99593151a6bf0da996b | |
| parent | ab9bbf48db3ef8cd83bbcc4dfd40f0308a738cc1 (diff) | |
| download | rust-4c9ecbf3d1a0fdac1d97c77783685c6281136c0b.tar.gz rust-4c9ecbf3d1a0fdac1d97c77783685c6281136c0b.zip | |
Add `modernize_and_adjust` methods.
These combine two `HygieneData::with` calls into one.
| -rw-r--r-- | src/librustc/ty/mod.rs | 6 | ||||
| -rw-r--r-- | src/librustc_resolve/lib.rs | 6 | ||||
| -rw-r--r-- | src/libsyntax_pos/hygiene.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax_pos/lib.rs | 8 |
4 files changed, 20 insertions, 8 deletions
diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs index 408f2d9f249..e585f9939a0 100644 --- a/src/librustc/ty/mod.rs +++ b/src/librustc/ty/mod.rs @@ -3101,15 +3101,13 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { } pub fn adjust_ident(self, mut ident: Ident, scope: DefId) -> Ident { - ident = ident.modern(); - ident.span.adjust(self.expansion_that_defined(scope)); + ident.span.modernize_and_adjust(self.expansion_that_defined(scope)); ident } pub fn adjust_ident_and_get_scope(self, mut ident: Ident, scope: DefId, block: hir::HirId) -> (Ident, DefId) { - ident = ident.modern(); - let scope = match ident.span.adjust(self.expansion_that_defined(scope)) { + let scope = match ident.span.modernize_and_adjust(self.expansion_that_defined(scope)) { Some(actual_expansion) => self.hir().definitions().parent_module_of_macro_def(actual_expansion), None => self.hir().get_module_parent_by_hir_id(block), diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 5f076d16bed..9b9cf80f822 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -2330,14 +2330,12 @@ impl<'a> Resolver<'a> { let orig_current_module = self.current_module; match module { ModuleOrUniformRoot::Module(module) => { - ident.span = ident.span.modern(); - if let Some(def) = ident.span.adjust(module.expansion) { + if let Some(def) = ident.span.modernize_and_adjust(module.expansion) { self.current_module = self.macro_def_scope(def); } } ModuleOrUniformRoot::ExternPrelude => { - ident.span = ident.span.modern(); - ident.span.adjust(Mark::root()); + ident.span.modernize_and_adjust(Mark::root()); } ModuleOrUniformRoot::CrateRootAndExternPrelude | ModuleOrUniformRoot::CurrentScope => { diff --git a/src/libsyntax_pos/hygiene.rs b/src/libsyntax_pos/hygiene.rs index 62a2d93a52e..213993996a6 100644 --- a/src/libsyntax_pos/hygiene.rs +++ b/src/libsyntax_pos/hygiene.rs @@ -508,6 +508,14 @@ impl SyntaxContext { HygieneData::with(|data| data.adjust(self, expansion)) } + /// Like `SyntaxContext::adjust`, but also modernizes `self`. + pub fn modernize_and_adjust(&mut self, expansion: Mark) -> Option<Mark> { + HygieneData::with(|data| { + *self = data.modern(*self); + data.adjust(self, expansion) + }) + } + /// Adjust this context for resolution in a scope created by the given expansion /// via a glob import with the given `SyntaxContext`. /// For example: diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs index 9bab95efd1b..24aa82184ce 100644 --- a/src/libsyntax_pos/lib.rs +++ b/src/libsyntax_pos/lib.rs @@ -535,6 +535,14 @@ impl Span { } #[inline] + pub fn modernize_and_adjust(&mut self, expansion: Mark) -> Option<Mark> { + let mut span = self.data(); + let mark = span.ctxt.modernize_and_adjust(expansion); + *self = Span::new(span.lo, span.hi, span.ctxt); + mark + } + + #[inline] pub fn glob_adjust(&mut self, expansion: Mark, glob_span: Span) -> Option<Option<Mark>> { let mut span = self.data(); let mark = span.ctxt.glob_adjust(expansion, glob_span); |
