Skip to content

Commit a59bb6d

Browse files
committed
Move counters into server.rs.
This simplifies things considerably.
1 parent 0d7dfae commit a59bb6d

File tree

2 files changed

+18
-34
lines changed

2 files changed

+18
-34
lines changed

library/proc_macro/src/bridge/client.rs

-25
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,6 @@ macro_rules! define_handles {
99
'owned: $($oty:ident,)*
1010
'interned: $($ity:ident,)*
1111
) => {
12-
#[repr(C)]
13-
#[allow(non_snake_case)]
14-
pub(super) struct HandleCounters {
15-
$(pub(super) $oty: AtomicUsize,)*
16-
$(pub(super) $ity: AtomicUsize,)*
17-
}
18-
19-
impl HandleCounters {
20-
// FIXME(eddyb) use a reference to the `static COUNTERS`, instead of
21-
// a wrapper `fn` pointer, once `const fn` can reference `static`s.
22-
extern "C" fn get() -> &'static Self {
23-
static COUNTERS: HandleCounters = HandleCounters {
24-
$($oty: AtomicUsize::new(1),)*
25-
$($ity: AtomicUsize::new(1),)*
26-
};
27-
&COUNTERS
28-
}
29-
}
30-
3112
$(
3213
#[repr(C)]
3314
pub(crate) struct $oty {
@@ -265,10 +246,6 @@ impl Bridge<'_> {
265246
/// and forcing the use of APIs that take/return `S::TokenStream`, server-side.
266247
#[repr(C)]
267248
pub struct Client<I, O> {
268-
// FIXME(eddyb) use a reference to the `static COUNTERS`, instead of
269-
// a wrapper `fn` pointer, once `const fn` can reference `static`s.
270-
pub(super) get_handle_counters: extern "C" fn() -> &'static HandleCounters,
271-
272249
pub(super) run: extern "C" fn(Bridge<'_>) -> Buffer,
273250

274251
pub(super) _marker: PhantomData<fn(I) -> O>,
@@ -346,7 +323,6 @@ fn run_client<A: for<'a, 's> DecodeMut<'a, 's, ()>, R: Encode<()>>(
346323
impl Client<crate::TokenStream, crate::TokenStream> {
347324
pub const fn expand1(f: impl Fn(crate::TokenStream) -> crate::TokenStream + Copy) -> Self {
348325
Client {
349-
get_handle_counters: HandleCounters::get,
350326
run: super::selfless_reify::reify_to_extern_c_fn_hrt_bridge(move |bridge| {
351327
run_client(bridge, |input| f(crate::TokenStream(input)).0)
352328
}),
@@ -360,7 +336,6 @@ impl Client<(crate::TokenStream, crate::TokenStream), crate::TokenStream> {
360336
f: impl Fn(crate::TokenStream, crate::TokenStream) -> crate::TokenStream + Copy,
361337
) -> Self {
362338
Client {
363-
get_handle_counters: HandleCounters::get,
364339
run: super::selfless_reify::reify_to_extern_c_fn_hrt_bridge(move |bridge| {
365340
run_client(bridge, |(input, input2)| {
366341
f(crate::TokenStream(input), crate::TokenStream(input2)).0

library/proc_macro/src/bridge/server.rs

+18-9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ macro_rules! define_handles {
77
'owned: $($oty:ident,)*
88
'interned: $($ity:ident,)*
99
) => {
10+
static COUNTERS: HandleCounters = HandleCounters {
11+
$($oty: AtomicUsize::new(1),)*
12+
$($ity: AtomicUsize::new(1),)*
13+
};
14+
15+
#[repr(C)]
16+
#[allow(non_snake_case)]
17+
struct HandleCounters {
18+
$($oty: AtomicUsize,)*
19+
$($ity: AtomicUsize,)*
20+
}
21+
1022
#[repr(C)]
1123
#[allow(non_snake_case)]
1224
struct HandleStore<S: Types> {
@@ -15,10 +27,10 @@ macro_rules! define_handles {
1527
}
1628

1729
impl<S: Types> HandleStore<S> {
18-
fn new(handle_counters: &'static client::HandleCounters) -> Self {
30+
fn new() -> Self {
1931
HandleStore {
20-
$($oty: handle::OwnedStore::new(&handle_counters.$oty),)*
21-
$($ity: handle::InternedStore::new(&handle_counters.$ity),)*
32+
$($oty: handle::OwnedStore::new(&COUNTERS.$oty),)*
33+
$($ity: handle::InternedStore::new(&COUNTERS.$ity),)*
2234
}
2335
}
2436
}
@@ -330,14 +342,13 @@ fn run_server<
330342
O: for<'a, 's> DecodeMut<'a, 's, HandleStore<MarkedTypes<S>>>,
331343
>(
332344
strategy: &impl ExecutionStrategy,
333-
handle_counters: &'static client::HandleCounters,
334345
server: S,
335346
input: I,
336347
run_client: extern "C" fn(Bridge<'_>) -> Buffer,
337348
force_show_panics: bool,
338349
) -> Result<O, PanicMessage> {
339350
let mut dispatcher =
340-
Dispatcher { handle_store: HandleStore::new(handle_counters), server: MarkedTypes(server) };
351+
Dispatcher { handle_store: HandleStore::new(), server: MarkedTypes(server) };
341352

342353
let mut buf = Buffer::new();
343354
input.encode(&mut buf, &mut dispatcher.handle_store);
@@ -355,10 +366,9 @@ impl client::Client<crate::TokenStream, crate::TokenStream> {
355366
input: S::TokenStream,
356367
force_show_panics: bool,
357368
) -> Result<S::TokenStream, PanicMessage> {
358-
let client::Client { get_handle_counters, run, _marker } = *self;
369+
let client::Client { run, _marker } = *self;
359370
run_server(
360371
strategy,
361-
get_handle_counters(),
362372
server,
363373
<MarkedTypes<S> as Types>::TokenStream::mark(input),
364374
run,
@@ -377,10 +387,9 @@ impl client::Client<(crate::TokenStream, crate::TokenStream), crate::TokenStream
377387
input2: S::TokenStream,
378388
force_show_panics: bool,
379389
) -> Result<S::TokenStream, PanicMessage> {
380-
let client::Client { get_handle_counters, run, _marker } = *self;
390+
let client::Client { run, _marker } = *self;
381391
run_server(
382392
strategy,
383-
get_handle_counters(),
384393
server,
385394
(
386395
<MarkedTypes<S> as Types>::TokenStream::mark(input),

0 commit comments

Comments
 (0)