Parse unsafety on function signatures

This commit is contained in:
David Tolnay 2020-09-06 23:45:55 -07:00
parent c4f0ad9b5e
commit bdb576ca61
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
3 changed files with 10 additions and 1 deletions

View File

@ -149,6 +149,7 @@ impl Eq for Signature {}
impl PartialEq for Signature {
fn eq(&self, other: &Signature) -> bool {
let Signature {
unsafety,
fn_token: _,
receiver,
args,
@ -158,6 +159,7 @@ impl PartialEq for Signature {
throws_tokens: _,
} = self;
let Signature {
unsafety: unsafety2,
fn_token: _,
receiver: receiver2,
args: args2,
@ -166,7 +168,8 @@ impl PartialEq for Signature {
paren_token: _,
throws_tokens: _,
} = other;
receiver == receiver2
unsafety.is_some() == unsafety2.is_some()
&& receiver == receiver2
&& ret == ret2
&& throws == throws2
&& args.len() == args2.len()
@ -177,6 +180,7 @@ impl PartialEq for Signature {
impl Hash for Signature {
fn hash<H: Hasher>(&self, state: &mut H) {
let Signature {
unsafety,
fn_token: _,
receiver,
args,
@ -185,6 +189,7 @@ impl Hash for Signature {
paren_token: _,
throws_tokens: _,
} = self;
unsafety.is_some().hash(state);
receiver.hash(state);
for arg in args {
arg.hash(state);

View File

@ -87,6 +87,7 @@ pub struct TypeAlias {
}
pub struct Signature {
pub unsafety: Option<Token![unsafe]>,
pub fn_token: Token![fn],
pub receiver: Option<Receiver>,
pub args: Punctuated<Var, Token![,]>,

View File

@ -353,6 +353,7 @@ fn parse_extern_fn(cx: &mut Errors, foreign_fn: &ForeignItemFn, lang: Lang) -> R
let ret = parse_return_type(&foreign_fn.sig.output, &mut throws_tokens)?;
let throws = throws_tokens.is_some();
let doc = attrs::parse_doc(cx, &foreign_fn.attrs);
let unsafety = foreign_fn.sig.unsafety;
let fn_token = foreign_fn.sig.fn_token;
let ident = foreign_fn.sig.ident.clone();
let paren_token = foreign_fn.sig.paren_token;
@ -367,6 +368,7 @@ fn parse_extern_fn(cx: &mut Errors, foreign_fn: &ForeignItemFn, lang: Lang) -> R
doc,
ident,
sig: Signature {
unsafety,
fn_token,
receiver,
args,
@ -578,6 +580,7 @@ fn parse_type_fn(ty: &TypeBareFn) -> Result<Type> {
let ret = parse_return_type(&ty.output, &mut throws_tokens)?;
let throws = throws_tokens.is_some();
Ok(Type::Fn(Box::new(Signature {
unsafety: ty.unsafety,
fn_token: ty.fn_token,
receiver: None,
args,