Unnamed repository; edit this file 'description' to name the repository.
rebased changes
bit-aloo 3 months ago
parent c618908 · commit d379776
-rw-r--r--crates/proc-macro-api/src/lib.rs26
-rw-r--r--crates/proc-macro-api/src/process.rs13
2 files changed, 25 insertions, 14 deletions
diff --git a/crates/proc-macro-api/src/lib.rs b/crates/proc-macro-api/src/lib.rs
index 2c0008ae1d..3acd0b292a 100644
--- a/crates/proc-macro-api/src/lib.rs
+++ b/crates/proc-macro-api/src/lib.rs
@@ -155,8 +155,15 @@ impl ProcMacroClient {
version: Option<&Version>,
num_process: usize,
) -> io::Result<ProcMacroClient> {
- let process = ProcMacroServerProcess::spawn(process_path, env, version)?;
- Ok(ProcMacroClient { process: Arc::new(process), path: process_path.to_owned() })
+ let pool_size = num_process;
+ let mut workers = Vec::with_capacity(pool_size);
+ for _ in 0..pool_size {
+ let worker = ProcMacroServerProcess::spawn(process_path, env.clone(), version)?;
+ workers.push(worker);
+ }
+
+ let pool = ProcMacroServerPool::new(workers);
+ Ok(ProcMacroClient { pool: Arc::new(pool), path: process_path.to_owned() })
}
/// Invokes `spawn` and returns a client connected to the resulting read and write handles.
@@ -170,11 +177,20 @@ impl ProcMacroClient {
Box<dyn process::ProcessExit>,
Box<dyn io::Write + Send + Sync>,
Box<dyn io::BufRead + Send + Sync>,
- )>,
+ )> + Clone,
version: Option<&Version>,
+ num_process: usize,
) -> io::Result<ProcMacroClient> {
- let process = ProcMacroServerProcess::run(spawn, version, || "<unknown>".to_owned())?;
- Ok(ProcMacroClient { worker: Arc::new(process), path: process_path.to_owned() })
+ let pool_size = num_process;
+ let mut workers = Vec::with_capacity(pool_size);
+ for _ in 0..pool_size {
+ let worker =
+ ProcMacroServerProcess::run(spawn.clone(), version, || "<unknown>".to_owned())?;
+ workers.push(worker);
+ }
+
+ let pool = ProcMacroServerPool::new(workers);
+ Ok(ProcMacroClient { pool: Arc::new(pool), path: process_path.to_owned() })
}
/// Returns the absolute path to the proc-macro server.
diff --git a/crates/proc-macro-api/src/process.rs b/crates/proc-macro-api/src/process.rs
index c1b95fa7f1..2f5bef69ab 100644
--- a/crates/proc-macro-api/src/process.rs
+++ b/crates/proc-macro-api/src/process.rs
@@ -210,9 +210,8 @@ impl ProcMacroServerProcess {
callback: Option<SubCallback<'_>>,
) -> Result<Result<Vec<(String, ProcMacroKind)>, String>, ServerError> {
match self.protocol {
- Protocol::LegacyJson { .. } | Protocol::LegacyPostcard { .. } => {
- legacy_protocol::find_proc_macros(self, dylib_path)
- }
+ Protocol::LegacyJson { .. } => legacy_protocol::find_proc_macros(self, dylib_path),
+
Protocol::BidirectionalPostcardPrototype { .. } => {
let cb = callback.expect("callback required for bidirectional protocol");
bidirectional_protocol::find_proc_macros(self, dylib_path, cb)
@@ -279,7 +278,7 @@ impl ProcMacroServerProcess {
let result = match self.protocol {
Protocol::LegacyJson { .. } => legacy_protocol::expand(
proc_macro,
- self,
+ self,
subtree,
attr,
env,
@@ -344,11 +343,7 @@ impl ProcMacroServerProcess {
match state.process.exit_err() {
None => e,
Some(server_error) => {
- proc_macro_worker
- .get_exited()
- .get_or_init(|| AssertUnwindSafe(server_error))
- .0
- .clone()
+ self.exited.get_or_init(|| AssertUnwindSafe(server_error)).0.clone()
}
}
} else {