about summary refs log tree commit diff
path: root/src/libsyntax_ext
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-08-28 12:41:29 +0300
committerMatthew Jasper <mjjasper1@gmail.com>2019-09-05 15:07:17 +0100
commitc8cf9f5a025bb475804b5a90f54aca310b952526 (patch)
tree1c456dab13065396aa1ee1ac79a9574143b82663 /src/libsyntax_ext
parent0b86782058c27ba694ec81ebe7108dceb0968a2b (diff)
downloadrust-c8cf9f5a025bb475804b5a90f54aca310b952526.tar.gz
rust-c8cf9f5a025bb475804b5a90f54aca310b952526.zip
Add `with_{def_site,call_site,legacy}_ctxt,` methods to `Span`
Use these to create call-site spans for AST passes when needed.
Diffstat (limited to 'src/libsyntax_ext')
-rw-r--r--src/libsyntax_ext/proc_macro_harness.rs3
-rw-r--r--src/libsyntax_ext/standard_library_imports.rs8
-rw-r--r--src/libsyntax_ext/test_harness.rs10
3 files changed, 13 insertions, 8 deletions
diff --git a/src/libsyntax_ext/proc_macro_harness.rs b/src/libsyntax_ext/proc_macro_harness.rs
index 1cdaa1190fa..8a4b78a3efa 100644
--- a/src/libsyntax_ext/proc_macro_harness.rs
+++ b/src/libsyntax_ext/proc_macro_harness.rs
@@ -326,12 +326,13 @@ fn mk_decls(
     custom_attrs: &[ProcMacroDef],
     custom_macros: &[ProcMacroDef],
 ) -> P<ast::Item> {
-    let span = cx.resolver.span_for_ast_pass(
+    let expn_id = cx.resolver.expansion_for_ast_pass(
         DUMMY_SP,
         AstPass::ProcMacroHarness,
         &[sym::rustc_attrs, sym::proc_macro_internals],
         None,
     );
+    let span = DUMMY_SP.with_def_site_ctxt(expn_id);
 
     let proc_macro = Ident::new(sym::proc_macro, span);
     let krate = cx.item(span,
diff --git a/src/libsyntax_ext/standard_library_imports.rs b/src/libsyntax_ext/standard_library_imports.rs
index 61e423266fa..e5dded9ea53 100644
--- a/src/libsyntax_ext/standard_library_imports.rs
+++ b/src/libsyntax_ext/standard_library_imports.rs
@@ -28,19 +28,21 @@ pub fn inject(
         &[sym::std]
     };
 
-    let span = resolver.span_for_ast_pass(
+    let expn_id = resolver.expansion_for_ast_pass(
         DUMMY_SP,
         AstPass::StdImports,
         &[sym::prelude_import],
         None,
     );
+    let span = DUMMY_SP.with_def_site_ctxt(expn_id);
+    let call_site = DUMMY_SP.with_call_site_ctxt(expn_id);
 
     // .rev() to preserve ordering above in combination with insert(0, ...)
     for &orig_name_sym in names.iter().rev() {
         let (rename, orig_name) = if rust_2018 {
             (Ident::new(kw::Underscore, span), Some(orig_name_sym))
         } else {
-            (Ident::with_dummy_span(orig_name_sym), None)
+            (Ident::new(orig_name_sym, call_site), None)
         };
         krate.module.items.insert(0, P(ast::Item {
             attrs: vec![attr::mk_attr_outer(
@@ -65,7 +67,7 @@ pub fn inject(
             .collect()
     } else {
         [kw::PathRoot, name, sym::prelude, sym::v1].iter()
-            .map(|symbol| ast::PathSegment::from_ident(ast::Ident::with_dummy_span(*symbol)))
+            .map(|symbol| ast::PathSegment::from_ident(ast::Ident::new(*symbol, call_site)))
             .collect()
     };
 
diff --git a/src/libsyntax_ext/test_harness.rs b/src/libsyntax_ext/test_harness.rs
index 6eb132979df..eedd7fbee38 100644
--- a/src/libsyntax_ext/test_harness.rs
+++ b/src/libsyntax_ext/test_harness.rs
@@ -97,15 +97,16 @@ impl<'a> MutVisitor for TestHarnessGenerator<'a> {
                 };
                 // Create an identifier that will hygienically resolve the test
                 // case name, even in another module.
-                let sp = self.cx.ext_cx.resolver.span_for_ast_pass(
+                let expn_id = self.cx.ext_cx.resolver.expansion_for_ast_pass(
                     module.inner,
                     AstPass::TestHarness,
                     &[],
                     Some(parent),
                 );
-                let expn = sp.ctxt().outer_expn();
                 for test in &mut tests {
-                    test.ident.span = test.ident.span.apply_mark(expn, Transparency::Opaque);
+                    // See the comment on `mk_main` for why we're using
+                    // `apply_mark` directly.
+                    test.ident.span = test.ident.span.apply_mark(expn_id, Transparency::Opaque);
                 }
                 self.cx.test_cases.extend(tests);
             }
@@ -207,12 +208,13 @@ fn mk_main(cx: &mut TestCtxt<'_>) -> P<ast::Item> {
     //            #![main]
     //            test::test_main_static(&[..tests]);
     //        }
-    let sp = cx.ext_cx.resolver.span_for_ast_pass(
+    let expn_id = cx.ext_cx.resolver.expansion_for_ast_pass(
         DUMMY_SP,
         AstPass::TestHarness,
         &[sym::main, sym::test, sym::rustc_attrs],
         None,
     );
+    let sp = DUMMY_SP.with_def_site_ctxt(expn_id);
     let ecx = &cx.ext_cx;
     let test_id = Ident::new(sym::test, sp);