diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-08-28 12:41:29 +0300 |
|---|---|---|
| committer | Matthew Jasper <mjjasper1@gmail.com> | 2019-09-05 15:07:17 +0100 |
| commit | c8cf9f5a025bb475804b5a90f54aca310b952526 (patch) | |
| tree | 1c456dab13065396aa1ee1ac79a9574143b82663 /src/libsyntax_ext | |
| parent | 0b86782058c27ba694ec81ebe7108dceb0968a2b (diff) | |
| download | rust-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.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax_ext/standard_library_imports.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax_ext/test_harness.rs | 10 |
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); |
