From 4c9ecbf3d1a0fdac1d97c77783685c6281136c0b Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Mon, 3 Jun 2019 16:10:03 +1000 Subject: [PATCH] Add `modernize_and_adjust` methods. These combine two `HygieneData::with` calls into one. --- src/librustc/ty/mod.rs | 6 ++---- src/librustc_resolve/lib.rs | 6 ++---- src/libsyntax_pos/hygiene.rs | 8 ++++++++ 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 @@ fn expansion_that_defined(self, scope: DefId) -> Mark { } 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 @@ fn resolve_ident_in_module_ext( 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 @@ pub fn adjust(&mut self, expansion: Mark) -> Option { HygieneData::with(|data| data.adjust(self, expansion)) } + /// Like `SyntaxContext::adjust`, but also modernizes `self`. + pub fn modernize_and_adjust(&mut self, expansion: Mark) -> Option { + 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 @@ -534,6 +534,14 @@ pub fn adjust(&mut self, expansion: Mark) -> Option { mark } + #[inline] + pub fn modernize_and_adjust(&mut self, expansion: Mark) -> Option { + 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> { let mut span = self.data(); -- 2.44.0