Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-api/src/pool.rs')
-rw-r--r--crates/proc-macro-api/src/pool.rs28
1 files changed, 13 insertions, 15 deletions
diff --git a/crates/proc-macro-api/src/pool.rs b/crates/proc-macro-api/src/pool.rs
index a637bc0e48..e6541823da 100644
--- a/crates/proc-macro-api/src/pool.rs
+++ b/crates/proc-macro-api/src/pool.rs
@@ -1,10 +1,9 @@
//! A pool of proc-macro server processes
use std::sync::Arc;
-use crate::{
- MacroDylib, ProcMacro, ServerError, bidirectional_protocol::SubCallback,
- process::ProcMacroServerProcess,
-};
+use rayon::iter::{IntoParallelIterator, ParallelIterator};
+
+use crate::{MacroDylib, ProcMacro, ServerError, process::ProcMacroServerProcess};
#[derive(Debug, Clone)]
pub(crate) struct ProcMacroServerPool {
@@ -50,11 +49,7 @@ impl ProcMacroServerPool {
})
}
- pub(crate) fn load_dylib(
- &self,
- dylib: &MacroDylib,
- callback: Option<SubCallback<'_>>,
- ) -> Result<Vec<ProcMacro>, ServerError> {
+ pub(crate) fn load_dylib(&self, dylib: &MacroDylib) -> Result<Vec<ProcMacro>, ServerError> {
let _span = tracing::info_span!("ProcMacroServer::load_dylib").entered();
let dylib_path = Arc::new(dylib.path.clone());
@@ -64,14 +59,17 @@ impl ProcMacroServerPool {
let (first, rest) = self.workers.split_first().expect("worker pool must not be empty");
let macros = first
- .find_proc_macros(&dylib.path, callback)?
+ .find_proc_macros(&dylib.path)?
.map_err(|e| ServerError { message: e, io: None })?;
- for worker in rest {
- worker
- .find_proc_macros(&dylib.path, callback)?
- .map_err(|e| ServerError { message: e, io: None })?;
- }
+ rest.into_par_iter()
+ .map(|worker| {
+ worker
+ .find_proc_macros(&dylib.path)?
+ .map(|_| ())
+ .map_err(|e| ServerError { message: e, io: None })
+ })
+ .collect::<Result<(), _>>()?;
Ok(macros
.into_iter()