Skip to content

Commit d9ec1ae

Browse files
committed
Get rid of MarkedTypes
1 parent 8a119c3 commit d9ec1ae

2 files changed

Lines changed: 38 additions & 68 deletions

File tree

library/proc_macro/src/bridge/server.rs

Lines changed: 34 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use std::marker::PhantomData;
66
use super::*;
77

88
pub(super) struct HandleStore<S: Types> {
9-
token_stream: handle::OwnedStore<S::TokenStream>,
10-
span: handle::InternedStore<S::Span>,
9+
token_stream: handle::OwnedStore<Marked<S::TokenStream, client::TokenStream>>,
10+
span: handle::InternedStore<Marked<S::Span, client::Span>>,
1111
}
1212

1313
impl<S: Types> HandleStore<S> {
@@ -19,36 +19,34 @@ impl<S: Types> HandleStore<S> {
1919
}
2020
}
2121

22-
impl<S: Types> Encode<HandleStore<MarkedTypes<S>>> for Marked<S::TokenStream, client::TokenStream> {
23-
fn encode(self, w: &mut Writer, s: &mut HandleStore<MarkedTypes<S>>) {
22+
impl<S: Types> Encode<HandleStore<S>> for Marked<S::TokenStream, client::TokenStream> {
23+
fn encode(self, w: &mut Writer, s: &mut HandleStore<S>) {
2424
s.token_stream.alloc(self).encode(w, s);
2525
}
2626
}
2727

28-
impl<S: Types> Decode<'_, '_, HandleStore<MarkedTypes<S>>>
29-
for Marked<S::TokenStream, client::TokenStream>
30-
{
31-
fn decode(r: &mut Reader<'_>, s: &mut HandleStore<MarkedTypes<S>>) -> Self {
28+
impl<S: Types> Decode<'_, '_, HandleStore<S>> for Marked<S::TokenStream, client::TokenStream> {
29+
fn decode(r: &mut Reader<'_>, s: &mut HandleStore<S>) -> Self {
3230
s.token_stream.take(handle::Handle::decode(r, &mut ()))
3331
}
3432
}
3533

36-
impl<'s, S: Types> Decode<'_, 's, HandleStore<MarkedTypes<S>>>
34+
impl<'s, S: Types> Decode<'_, 's, HandleStore<S>>
3735
for &'s Marked<S::TokenStream, client::TokenStream>
3836
{
39-
fn decode(r: &mut Reader<'_>, s: &'s mut HandleStore<MarkedTypes<S>>) -> Self {
37+
fn decode(r: &mut Reader<'_>, s: &'s mut HandleStore<S>) -> Self {
4038
&s.token_stream[handle::Handle::decode(r, &mut ())]
4139
}
4240
}
4341

44-
impl<S: Types> Encode<HandleStore<MarkedTypes<S>>> for Marked<S::Span, client::Span> {
45-
fn encode(self, w: &mut Writer, s: &mut HandleStore<MarkedTypes<S>>) {
42+
impl<S: Types> Encode<HandleStore<S>> for Marked<S::Span, client::Span> {
43+
fn encode(self, w: &mut Writer, s: &mut HandleStore<S>) {
4644
s.span.alloc(self).encode(w, s);
4745
}
4846
}
4947

50-
impl<S: Types> Decode<'_, '_, HandleStore<MarkedTypes<S>>> for Marked<S::Span, client::Span> {
51-
fn decode(r: &mut Reader<'_>, s: &mut HandleStore<MarkedTypes<S>>) -> Self {
48+
impl<S: Types> Decode<'_, '_, HandleStore<S>> for Marked<S::Span, client::Span> {
49+
fn decode(r: &mut Reader<'_>, s: &mut HandleStore<S>) -> Self {
5250
s.span.copy(handle::Handle::decode(r, &mut ()))
5351
}
5452
}
@@ -81,38 +79,6 @@ macro_rules! declare_server_traits {
8179
}
8280
with_api!(Self, self_, declare_server_traits);
8381

84-
pub(super) struct MarkedTypes<S: Types>(S);
85-
86-
macro_rules! define_mark_types_impls {
87-
(
88-
Methods {
89-
$(fn $method:ident($($arg:ident: $arg_ty:ty),* $(,)?) $(-> $ret_ty:ty)*;)*
90-
},
91-
$($name:ident),* $(,)?
92-
) => {
93-
impl<S: Types> Types for MarkedTypes<S> {
94-
$(type $name = Marked<S::$name, client::$name>;)*
95-
}
96-
97-
impl<S: Server> Server for MarkedTypes<S> {
98-
fn globals(&mut self) -> ExpnGlobals<Self::Span> {
99-
<_>::mark(Server::globals(&mut self.0))
100-
}
101-
fn intern_symbol(ident: &str) -> Self::Symbol {
102-
<_>::mark(S::intern_symbol(ident))
103-
}
104-
fn with_symbol_string(symbol: &Self::Symbol, f: impl FnOnce(&str)) {
105-
S::with_symbol_string(symbol.unmark(), f)
106-
}
107-
108-
$(fn $method(&mut self, $($arg: $arg_ty),*) $(-> $ret_ty)? {
109-
<_>::mark(S::$method(&mut self.0, $($arg.unmark()),*))
110-
})*
111-
}
112-
}
113-
}
114-
with_api!(Self, self_, define_mark_types_impls);
115-
11682
struct Dispatcher<S: Types> {
11783
handle_store: HandleStore<S>,
11884
server: S,
@@ -133,8 +99,8 @@ macro_rules! define_dispatcher_impl {
13399
fn dispatch(&mut self, buf: Buffer) -> Buffer;
134100
}
135101

136-
impl<S: Server> DispatcherTrait for Dispatcher<MarkedTypes<S>> {
137-
$(type $name = <MarkedTypes<S> as Types>::$name;)*
102+
impl<S: Server> DispatcherTrait for Dispatcher<S> {
103+
$(type $name = Marked<S::$name, client::$name>;)*
138104

139105
fn dispatch(&mut self, mut buf: Buffer) -> Buffer {
140106
let Dispatcher { handle_store, server } = self;
@@ -143,8 +109,12 @@ macro_rules! define_dispatcher_impl {
143109
match api_tags::Method::decode(&mut reader, &mut ()) {
144110
$(api_tags::Method::$method => {
145111
let mut call_method = || {
146-
$(let $arg = <$arg_ty>::decode(&mut reader, handle_store);)*
147-
server.$method($($arg),*)
112+
$(let $arg = <$arg_ty>::decode(&mut reader, handle_store).unmark();)*
113+
let r = server.$method($($arg),*);
114+
$(
115+
let r: $ret_ty = Mark::mark(r);
116+
)*
117+
r
148118
};
149119
// HACK(eddyb) don't use `panic::catch_unwind` in a panic.
150120
// If client and server happen to use the same `std`,
@@ -318,8 +288,8 @@ pub trait MessagePipe<T>: Sized {
318288

319289
fn run_server<
320290
S: Server,
321-
I: Encode<HandleStore<MarkedTypes<S>>>,
322-
O: for<'a, 's> Decode<'a, 's, HandleStore<MarkedTypes<S>>>,
291+
I: Encode<HandleStore<S>>,
292+
O: for<'a, 's> Decode<'a, 's, HandleStore<S>>,
323293
>(
324294
strategy: &impl ExecutionStrategy,
325295
handle_counters: &'static client::HandleCounters,
@@ -328,13 +298,13 @@ fn run_server<
328298
run_client: extern "C" fn(BridgeConfig<'_>) -> Buffer,
329299
force_show_panics: bool,
330300
) -> Result<O, PanicMessage> {
331-
let mut dispatcher =
332-
Dispatcher { handle_store: HandleStore::new(handle_counters), server: MarkedTypes(server) };
301+
let mut dispatcher = Dispatcher { handle_store: HandleStore::new(handle_counters), server };
333302

334303
let globals = dispatcher.server.globals();
335304

336305
let mut buf = Buffer::new();
337-
(globals, input).encode(&mut buf, &mut dispatcher.handle_store);
306+
(<ExpnGlobals<Marked<S::Span, client::Span>> as Mark>::mark(globals), input)
307+
.encode(&mut buf, &mut dispatcher.handle_store);
338308

339309
buf = strategy.run_bridge_and_client(&mut dispatcher, buf, run_client, force_show_panics);
340310

@@ -358,11 +328,13 @@ impl client::Client<crate::TokenStream, crate::TokenStream> {
358328
strategy,
359329
handle_counters,
360330
server,
361-
<MarkedTypes<S> as Types>::TokenStream::mark(input),
331+
<Marked<S::TokenStream, client::TokenStream>>::mark(input),
362332
run,
363333
force_show_panics,
364334
)
365-
.map(|s| <Option<<MarkedTypes<S> as Types>::TokenStream>>::unmark(s).unwrap_or_default())
335+
.map(|s| {
336+
<Option<Marked<S::TokenStream, client::TokenStream>>>::unmark(s).unwrap_or_default()
337+
})
366338
}
367339
}
368340

@@ -385,12 +357,14 @@ impl client::Client<(crate::TokenStream, crate::TokenStream), crate::TokenStream
385357
handle_counters,
386358
server,
387359
(
388-
<MarkedTypes<S> as Types>::TokenStream::mark(input),
389-
<MarkedTypes<S> as Types>::TokenStream::mark(input2),
360+
<Marked<S::TokenStream, client::TokenStream>>::mark(input),
361+
<Marked<S::TokenStream, client::TokenStream>>::mark(input2),
390362
),
391363
run,
392364
force_show_panics,
393365
)
394-
.map(|s| <Option<<MarkedTypes<S> as Types>::TokenStream>>::unmark(s).unwrap_or_default())
366+
.map(|s| {
367+
<Option<Marked<S::TokenStream, client::TokenStream>>>::unmark(s).unwrap_or_default()
368+
})
395369
}
396370
}

library/proc_macro/src/bridge/symbol.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,14 @@ impl<S> Encode<S> for Symbol {
9999
}
100100
}
101101

102-
impl<S: server::Server> Decode<'_, '_, server::HandleStore<server::MarkedTypes<S>>>
103-
for Marked<S::Symbol, Symbol>
104-
{
105-
fn decode(r: &mut Reader<'_>, s: &mut server::HandleStore<server::MarkedTypes<S>>) -> Self {
102+
impl<S: server::Server> Decode<'_, '_, server::HandleStore<S>> for Marked<S::Symbol, Symbol> {
103+
fn decode(r: &mut Reader<'_>, s: &mut server::HandleStore<S>) -> Self {
106104
Mark::mark(S::intern_symbol(<&str>::decode(r, s)))
107105
}
108106
}
109107

110-
impl<S: server::Server> Encode<server::HandleStore<server::MarkedTypes<S>>>
111-
for Marked<S::Symbol, Symbol>
112-
{
113-
fn encode(self, w: &mut Writer, s: &mut server::HandleStore<server::MarkedTypes<S>>) {
108+
impl<S: server::Server> Encode<server::HandleStore<S>> for Marked<S::Symbol, Symbol> {
109+
fn encode(self, w: &mut Writer, s: &mut server::HandleStore<S>) {
114110
S::with_symbol_string(&self.unmark(), |sym| sym.encode(w, s))
115111
}
116112
}

0 commit comments

Comments
 (0)