diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-06-24 19:12:00 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-06-30 01:53:32 +0300 |
| commit | 1328bdeef8451779831d3ddc26e16ee64c3d65b5 (patch) | |
| tree | 9dd1e46f1b836c15f5d48d9e2bced0bef09afcfe | |
| parent | 1029775ad5f15d2200e087ebb4a867cf30dbbb25 (diff) | |
| download | rust-1328bdeef8451779831d3ddc26e16ee64c3d65b5.tar.gz rust-1328bdeef8451779831d3ddc26e16ee64c3d65b5.zip | |
resolve: Cleanup `resolve_crate_root`
| -rw-r--r-- | src/librustc_resolve/build_reduced_graph.rs | 2 | ||||
| -rw-r--r-- | src/librustc_resolve/lib.rs | 14 | ||||
| -rw-r--r-- | src/librustc_resolve/macros.rs | 5 | ||||
| -rw-r--r-- | src/librustc_resolve/resolve_imports.rs | 2 |
4 files changed, 10 insertions, 13 deletions
diff --git a/src/librustc_resolve/build_reduced_graph.rs b/src/librustc_resolve/build_reduced_graph.rs index af7678aa06f..a770f078404 100644 --- a/src/librustc_resolve/build_reduced_graph.rs +++ b/src/librustc_resolve/build_reduced_graph.rs @@ -156,7 +156,7 @@ impl<'a> Resolver<'a> { // Disallow `use $crate;` if source.name == keywords::DollarCrate.name() && path.segments.len() == 1 { - let crate_root = self.resolve_crate_root(source.span.ctxt(), true); + let crate_root = self.resolve_crate_root(source); let crate_name = match crate_root.kind { ModuleKind::Def(_, name) => name, ModuleKind::Block(..) => unreachable!(), diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 464356eb5d2..7771bc9b1cb 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1981,8 +1981,9 @@ impl<'a> Resolver<'a> { result } - fn resolve_crate_root(&mut self, mut ctxt: SyntaxContext, legacy: bool) -> Module<'a> { - let mark = if legacy { + fn resolve_crate_root(&mut self, ident: Ident) -> Module<'a> { + let mut ctxt = ident.span.ctxt(); + let mark = if ident.name == keywords::DollarCrate.name() { // When resolving `$crate` from a `macro_rules!` invoked in a `macro`, // we don't want to pretend that the `macro_rules!` definition is in the `macro` // as described in `SyntaxContext::apply_mark`, so we ignore prepended modern marks. @@ -3345,14 +3346,11 @@ impl<'a> Resolver<'a> { if ns == TypeNS { if (i == 0 && name == keywords::CrateRoot.name()) || (i == 0 && name == keywords::Crate.name()) || + (i == 0 && name == keywords::DollarCrate.name()) || (i == 1 && name == keywords::Crate.name() && path[0].name == keywords::CrateRoot.name()) { - // `::a::b` or `::crate::a::b` - module = Some(self.resolve_crate_root(ident.span.ctxt(), false)); - continue - } else if i == 0 && name == keywords::DollarCrate.name() { - // `$crate::a::b` - module = Some(self.resolve_crate_root(ident.span.ctxt(), true)); + // `::a::b`, `crate::a::b`, `::crate::a::b` or `$crate::a::b` + module = Some(self.resolve_crate_root(ident)); continue } else if i == 1 && !ident.is_path_segment_keyword() { let prev_name = path[0].name; diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index c9d00f80b0b..1dd7daf8302 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -155,10 +155,9 @@ impl<'a> base::Resolver for Resolver<'a> { } }); - let ident = path.segments[0].ident; - if ident.name == keywords::DollarCrate.name() { + if path.segments[0].ident.name == keywords::DollarCrate.name() { + let module = self.0.resolve_crate_root(path.segments[0].ident); path.segments[0].ident.name = keywords::CrateRoot.name(); - let module = self.0.resolve_crate_root(ident.span.ctxt(), true); if !module.is_local() { let span = path.segments[0].ident.span; path.segments.insert(1, match module.kind { diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index 8ac5e248dad..0ee17ebc487 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -698,7 +698,7 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> { "crate root imports need to be explicitly named: \ `use crate as name;`".to_string())); } else { - Some(self.resolve_crate_root(source.span.ctxt().modern(), false)) + Some(self.resolve_crate_root(source)) } } else if is_extern && !source.is_path_segment_keyword() { let crate_id = |
