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);
     }
 }