mirror of
https://github.com/topjohnwu/cxx.git
synced 2025-02-20 08:03:28 +00:00
Parse unsafety on function signatures
This commit is contained in:
parent
c4f0ad9b5e
commit
bdb576ca61
@ -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);
|
||||
|
@ -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![,]>,
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user