@@ -6,8 +6,8 @@ use std::marker::PhantomData;
66use super :: * ;
77
88pub ( 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
1313impl < 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}
8280with_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-
11682struct 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
319289fn 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}
0 commit comments