Unnamed repository; edit this file 'description' to name the repository.
rebased changes
| -rw-r--r-- | crates/proc-macro-api/src/lib.rs | 26 | ||||
| -rw-r--r-- | crates/proc-macro-api/src/process.rs | 13 |
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 { |