Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-srv/src/dylib/proc_macros.rs')
-rw-r--r--crates/proc-macro-srv/src/dylib/proc_macros.rs80
1 files changed, 5 insertions, 75 deletions
diff --git a/crates/proc-macro-srv/src/dylib/proc_macros.rs b/crates/proc-macro-srv/src/dylib/proc_macros.rs
index 5b6f1cf2f3..6f6bd086de 100644
--- a/crates/proc-macro-srv/src/dylib/proc_macros.rs
+++ b/crates/proc-macro-srv/src/dylib/proc_macros.rs
@@ -1,8 +1,7 @@
//! Proc macro ABI
+use crate::{ProcMacroKind, ProcMacroSrvSpan, SubCallback, token_stream::TokenStream};
use proc_macro::bridge;
-use crate::{ProcMacroKind, ProcMacroSrvSpan, token_stream::TokenStream};
-
#[repr(transparent)]
pub(crate) struct ProcMacros([bridge::client::ProcMacro]);
@@ -21,6 +20,7 @@ impl ProcMacros {
def_site: S,
call_site: S,
mixed_site: S,
+ callback: Option<SubCallback>,
) -> Result<TokenStream<S>, crate::PanicMessage> {
let parsed_attributes = attribute.unwrap_or_default();
@@ -31,65 +31,7 @@ impl ProcMacros {
{
let res = client.run(
&bridge::server::SameThread,
- S::make_server(call_site, def_site, mixed_site, None, None),
- macro_body,
- cfg!(debug_assertions),
- );
- return res.map_err(crate::PanicMessage::from);
- }
- bridge::client::ProcMacro::Bang { name, client } if *name == macro_name => {
- let res = client.run(
- &bridge::server::SameThread,
- S::make_server(call_site, def_site, mixed_site, None, None),
- macro_body,
- cfg!(debug_assertions),
- );
- return res.map_err(crate::PanicMessage::from);
- }
- bridge::client::ProcMacro::Attr { name, client } if *name == macro_name => {
- let res = client.run(
- &bridge::server::SameThread,
- S::make_server(call_site, def_site, mixed_site, None, None),
- parsed_attributes,
- macro_body,
- cfg!(debug_assertions),
- );
- return res.map_err(crate::PanicMessage::from);
- }
- _ => continue,
- }
- }
-
- Err(bridge::PanicMessage::String(format!("proc-macro `{macro_name}` is missing")).into())
- }
-
- pub(crate) fn expand_with_channels<S: ProcMacroSrvSpan>(
- &self,
- macro_name: &str,
- macro_body: TokenStream<S>,
- attribute: Option<TokenStream<S>>,
- def_site: S,
- call_site: S,
- mixed_site: S,
- cli_to_server: crossbeam_channel::Receiver<crate::SubResponse>,
- server_to_cli: crossbeam_channel::Sender<crate::SubRequest>,
- ) -> Result<TokenStream<S>, crate::PanicMessage> {
- let parsed_attributes = attribute.unwrap_or_default();
-
- for proc_macro in &self.0 {
- match proc_macro {
- bridge::client::ProcMacro::CustomDerive { trait_name, client, .. }
- if *trait_name == macro_name =>
- {
- let res = client.run(
- &bridge::server::SameThread,
- S::make_server(
- call_site,
- def_site,
- mixed_site,
- Some(cli_to_server),
- Some(server_to_cli),
- ),
+ S::make_server(call_site, def_site, mixed_site, callback),
macro_body,
cfg!(debug_assertions),
);
@@ -98,13 +40,7 @@ impl ProcMacros {
bridge::client::ProcMacro::Bang { name, client } if *name == macro_name => {
let res = client.run(
&bridge::server::SameThread,
- S::make_server(
- call_site,
- def_site,
- mixed_site,
- Some(cli_to_server),
- Some(server_to_cli),
- ),
+ S::make_server(call_site, def_site, mixed_site, callback),
macro_body,
cfg!(debug_assertions),
);
@@ -113,13 +49,7 @@ impl ProcMacros {
bridge::client::ProcMacro::Attr { name, client } if *name == macro_name => {
let res = client.run(
&bridge::server::SameThread,
- S::make_server(
- call_site,
- def_site,
- mixed_site,
- Some(cli_to_server),
- Some(server_to_cli),
- ),
+ S::make_server(call_site, def_site, mixed_site, callback),
parsed_attributes,
macro_body,
cfg!(debug_assertions),