Preserve original tokens of Signature
diff --git a/syntax/impls.rs b/syntax/impls.rs
index 57b42d1..27aa43a 100644
--- a/syntax/impls.rs
+++ b/syntax/impls.rs
@@ -116,6 +116,7 @@
args,
ret,
throws,
+ tokens: _,
} = self;
let Signature {
fn_token: _,
@@ -123,6 +124,7 @@
args: args2,
ret: ret2,
throws: throws2,
+ tokens: _,
} = other;
receiver == receiver2 && args == args2 && ret == ret2 && throws == throws2
}
@@ -136,6 +138,7 @@
args,
ret,
throws,
+ tokens: _,
} = self;
receiver.hash(state);
args.hash(state);
diff --git a/syntax/mod.rs b/syntax/mod.rs
index 6274cf1..7d2ca19 100644
--- a/syntax/mod.rs
+++ b/syntax/mod.rs
@@ -12,7 +12,7 @@
mod tokens;
pub mod types;
-use proc_macro2::{Ident, Span};
+use proc_macro2::{Ident, Span, TokenStream};
use syn::{LitStr, Token};
pub use self::atom::Atom;
@@ -57,6 +57,7 @@
pub args: Vec<Var>,
pub ret: Option<Type>,
pub throws: bool,
+ pub tokens: TokenStream,
}
#[derive(Eq, PartialEq, Hash)]
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 10db16e..58237f3 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -205,7 +205,11 @@
let doc = attrs::parse_doc(&foreign_fn.attrs)?;
let fn_token = foreign_fn.sig.fn_token;
let ident = foreign_fn.sig.ident.clone();
+ let mut foreign_fn2 = foreign_fn.clone();
+ foreign_fn2.attrs.clear();
+ let tokens = quote!(#foreign_fn2);
let semi_token = foreign_fn.semi_token;
+
Ok(ExternFn {
lang,
doc,
@@ -216,6 +220,7 @@
args,
ret,
throws,
+ tokens,
},
semi_token,
})
diff --git a/syntax/tokens.rs b/syntax/tokens.rs
index 3bbe872..ed5b315 100644
--- a/syntax/tokens.rs
+++ b/syntax/tokens.rs
@@ -77,8 +77,6 @@
impl ToTokens for ExternFn {
fn to_tokens(&self, tokens: &mut TokenStream) {
- self.fn_token.to_tokens(tokens);
- self.ident.to_tokens(tokens);
- self.semi_token.to_tokens(tokens);
+ self.sig.tokens.to_tokens(tokens);
}
}