Split Receiver's ToTokens into a wrapper type
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 350ee97..36f25c5 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -126,7 +126,10 @@
 
 fn expand_cxx_function_decl(namespace: &Namespace, efn: &ExternFn, types: &Types) -> TokenStream {
     let ident = &efn.ident;
-    let receiver = efn.receiver.iter().map(|receiver| quote!(_: #receiver));
+    let receiver = efn.receiver.iter().map(|receiver| {
+        let receiver_type = receiver.ty();
+        quote!(_: #receiver_type)
+    });
     let args = efn.args.iter().map(|arg| {
         let ident = &arg.ident;
         let ty = expand_extern_type(&arg.ty);
@@ -383,10 +386,10 @@
         .receiver
         .as_ref()
         .map(|receiver| quote_spanned!(receiver.var.span=> __self));
-    let receiver = sig
-        .receiver
-        .as_ref()
-        .map(|receiver| quote!(#receiver_var: #receiver));
+    let receiver = sig.receiver.as_ref().map(|receiver| {
+        let receiver_type = receiver.ty();
+        quote!(#receiver_var: #receiver_type)
+    });
     let args = sig.args.iter().map(|arg| {
         let ident = &arg.ident;
         let ty = expand_extern_type(&arg.ty);
diff --git a/syntax/tokens.rs b/syntax/tokens.rs
index 6e3db9b..08c966a 100644
--- a/syntax/tokens.rs
+++ b/syntax/tokens.rs
@@ -98,10 +98,19 @@
     }
 }
 
-impl ToTokens for Receiver {
+pub struct ReceiverType<'a>(&'a Receiver);
+
+impl Receiver {
+    // &TheType
+    pub fn ty(&self) -> ReceiverType {
+        ReceiverType(self)
+    }
+}
+
+impl ToTokens for ReceiverType<'_> {
     fn to_tokens(&self, tokens: &mut TokenStream) {
-        self.ampersand.to_tokens(tokens);
-        self.mutability.to_tokens(tokens);
-        self.ty.to_tokens(tokens);
+        self.0.ampersand.to_tokens(tokens);
+        self.0.mutability.to_tokens(tokens);
+        self.0.ty.to_tokens(tokens);
     }
 }