rustc_expand: Remove redundant field from proc macro expander structures
This information is already available from `ExpnData`
This commit is contained in:
parent
28f4dba438
commit
de897f5205
5 changed files with 18 additions and 33 deletions
|
@ -19,7 +19,6 @@ use crate::deriving::*;
|
|||
|
||||
use rustc_expand::base::{MacroExpanderFn, ResolverExpand, SyntaxExtensionKind};
|
||||
use rustc_expand::proc_macro::BangProcMacro;
|
||||
use rustc_span::def_id::LOCAL_CRATE;
|
||||
use rustc_span::symbol::sym;
|
||||
|
||||
mod asm;
|
||||
|
@ -113,8 +112,5 @@ pub fn register_builtin_macros(resolver: &mut dyn ResolverExpand) {
|
|||
}
|
||||
|
||||
let client = proc_macro::bridge::client::Client::expand1(proc_macro::quote);
|
||||
register(
|
||||
sym::quote,
|
||||
SyntaxExtensionKind::Bang(Box::new(BangProcMacro { client, krate: LOCAL_CRATE })),
|
||||
);
|
||||
register(sym::quote, SyntaxExtensionKind::Bang(Box::new(BangProcMacro { client })));
|
||||
}
|
||||
|
|
|
@ -9,14 +9,12 @@ use rustc_data_structures::sync::Lrc;
|
|||
use rustc_errors::ErrorReported;
|
||||
use rustc_parse::nt_to_tokenstream;
|
||||
use rustc_parse::parser::ForceCollect;
|
||||
use rustc_span::def_id::CrateNum;
|
||||
use rustc_span::{Span, DUMMY_SP};
|
||||
|
||||
const EXEC_STRATEGY: pm::bridge::server::SameThread = pm::bridge::server::SameThread;
|
||||
|
||||
pub struct BangProcMacro {
|
||||
pub client: pm::bridge::client::Client<fn(pm::TokenStream) -> pm::TokenStream>,
|
||||
pub krate: CrateNum,
|
||||
}
|
||||
|
||||
impl base::ProcMacro for BangProcMacro {
|
||||
|
@ -26,7 +24,7 @@ impl base::ProcMacro for BangProcMacro {
|
|||
span: Span,
|
||||
input: TokenStream,
|
||||
) -> Result<TokenStream, ErrorReported> {
|
||||
let server = proc_macro_server::Rustc::new(ecx, self.krate);
|
||||
let server = proc_macro_server::Rustc::new(ecx);
|
||||
self.client.run(&EXEC_STRATEGY, server, input, ecx.ecfg.proc_macro_backtrace).map_err(|e| {
|
||||
let mut err = ecx.struct_span_err(span, "proc macro panicked");
|
||||
if let Some(s) = e.as_str() {
|
||||
|
@ -40,7 +38,6 @@ impl base::ProcMacro for BangProcMacro {
|
|||
|
||||
pub struct AttrProcMacro {
|
||||
pub client: pm::bridge::client::Client<fn(pm::TokenStream, pm::TokenStream) -> pm::TokenStream>,
|
||||
pub krate: CrateNum,
|
||||
}
|
||||
|
||||
impl base::AttrProcMacro for AttrProcMacro {
|
||||
|
@ -51,7 +48,7 @@ impl base::AttrProcMacro for AttrProcMacro {
|
|||
annotation: TokenStream,
|
||||
annotated: TokenStream,
|
||||
) -> Result<TokenStream, ErrorReported> {
|
||||
let server = proc_macro_server::Rustc::new(ecx, self.krate);
|
||||
let server = proc_macro_server::Rustc::new(ecx);
|
||||
self.client
|
||||
.run(&EXEC_STRATEGY, server, annotation, annotated, ecx.ecfg.proc_macro_backtrace)
|
||||
.map_err(|e| {
|
||||
|
@ -67,7 +64,6 @@ impl base::AttrProcMacro for AttrProcMacro {
|
|||
|
||||
pub struct ProcMacroDerive {
|
||||
pub client: pm::bridge::client::Client<fn(pm::TokenStream) -> pm::TokenStream>,
|
||||
pub krate: CrateNum,
|
||||
}
|
||||
|
||||
impl MultiItemModifier for ProcMacroDerive {
|
||||
|
@ -101,7 +97,7 @@ impl MultiItemModifier for ProcMacroDerive {
|
|||
nt_to_tokenstream(&item, &ecx.sess.parse_sess, CanSynthesizeMissingTokens::No)
|
||||
};
|
||||
|
||||
let server = proc_macro_server::Rustc::new(ecx, self.krate);
|
||||
let server = proc_macro_server::Rustc::new(ecx);
|
||||
let stream =
|
||||
match self.client.run(&EXEC_STRATEGY, server, input, ecx.ecfg.proc_macro_backtrace) {
|
||||
Ok(stream) => stream,
|
||||
|
|
|
@ -368,7 +368,7 @@ pub(crate) struct Rustc<'a> {
|
|||
}
|
||||
|
||||
impl<'a> Rustc<'a> {
|
||||
pub fn new(cx: &'a ExtCtxt<'_>, krate: CrateNum) -> Self {
|
||||
pub fn new(cx: &'a ExtCtxt<'_>) -> Self {
|
||||
let expn_data = cx.current_expansion.id.expn_data();
|
||||
let def_site = cx.with_def_site_ctxt(expn_data.def_site);
|
||||
let call_site = cx.with_call_site_ctxt(expn_data.call_site);
|
||||
|
@ -381,7 +381,7 @@ impl<'a> Rustc<'a> {
|
|||
call_site,
|
||||
mixed_site,
|
||||
span_debug: cx.ecfg.span_debug,
|
||||
krate,
|
||||
krate: expn_data.macro_def_id.unwrap().krate,
|
||||
expn_id: cx.current_expansion.id,
|
||||
rebased_spans: FxHashMap::default(),
|
||||
}
|
||||
|
|
|
@ -725,37 +725,30 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
|||
.decode((self, sess))
|
||||
}
|
||||
|
||||
fn load_proc_macro(&self, def_id: DefId, sess: &Session) -> SyntaxExtension {
|
||||
let (name, kind, helper_attrs) = match *self.raw_proc_macro(def_id.index) {
|
||||
fn load_proc_macro(&self, id: DefIndex, sess: &Session) -> SyntaxExtension {
|
||||
let (name, kind, helper_attrs) = match *self.raw_proc_macro(id) {
|
||||
ProcMacro::CustomDerive { trait_name, attributes, client } => {
|
||||
let helper_attrs =
|
||||
attributes.iter().cloned().map(Symbol::intern).collect::<Vec<_>>();
|
||||
(
|
||||
trait_name,
|
||||
SyntaxExtensionKind::Derive(Box::new(ProcMacroDerive {
|
||||
client,
|
||||
krate: def_id.krate,
|
||||
})),
|
||||
SyntaxExtensionKind::Derive(Box::new(ProcMacroDerive { client })),
|
||||
helper_attrs,
|
||||
)
|
||||
}
|
||||
ProcMacro::Attr { name, client } => (
|
||||
name,
|
||||
SyntaxExtensionKind::Attr(Box::new(AttrProcMacro { client, krate: def_id.krate })),
|
||||
Vec::new(),
|
||||
),
|
||||
ProcMacro::Bang { name, client } => (
|
||||
name,
|
||||
SyntaxExtensionKind::Bang(Box::new(BangProcMacro { client, krate: def_id.krate })),
|
||||
Vec::new(),
|
||||
),
|
||||
ProcMacro::Attr { name, client } => {
|
||||
(name, SyntaxExtensionKind::Attr(Box::new(AttrProcMacro { client })), Vec::new())
|
||||
}
|
||||
ProcMacro::Bang { name, client } => {
|
||||
(name, SyntaxExtensionKind::Bang(Box::new(BangProcMacro { client })), Vec::new())
|
||||
}
|
||||
};
|
||||
|
||||
let attrs: Vec<_> = self.get_item_attrs(def_id.index, sess).collect();
|
||||
let attrs: Vec<_> = self.get_item_attrs(id, sess).collect();
|
||||
SyntaxExtension::new(
|
||||
sess,
|
||||
kind,
|
||||
self.get_span(def_id.index, sess),
|
||||
self.get_span(id, sess),
|
||||
helper_attrs,
|
||||
self.root.edition,
|
||||
Symbol::intern(name),
|
||||
|
|
|
@ -411,7 +411,7 @@ impl CStore {
|
|||
|
||||
let data = self.get_crate_data(id.krate);
|
||||
if data.root.is_proc_macro_crate() {
|
||||
return LoadedMacro::ProcMacro(data.load_proc_macro(id, sess));
|
||||
return LoadedMacro::ProcMacro(data.load_proc_macro(id.index, sess));
|
||||
}
|
||||
|
||||
let span = data.get_span(id.index, sess);
|
||||
|
|
Loading…
Add table
Reference in a new issue