Allow multiple arg refs if C++ function is unsafe extern
diff --git a/syntax/check.rs b/syntax/check.rs
index b95123d..73ce885 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -325,6 +325,10 @@
}
fn check_multiple_arg_lifetimes(cx: &mut Check, efn: &ExternFn) {
+ if efn.lang == Lang::Cxx && efn.trusted {
+ return;
+ }
+
match &efn.ret {
Some(Type::Ref(_)) => {}
_ => return,
diff --git a/syntax/mod.rs b/syntax/mod.rs
index 33ed31c..94c2cc8 100644
--- a/syntax/mod.rs
+++ b/syntax/mod.rs
@@ -98,6 +98,7 @@
pub name: Pair,
pub sig: Signature,
pub semi_token: Token![;],
+ pub trusted: bool,
}
pub struct TypeAlias {
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 34b5e1b..662b099 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -233,10 +233,12 @@
Err(err) => cx.push(err),
}
}
- ForeignItem::Fn(foreign) => match parse_extern_fn(cx, foreign, lang, &namespace) {
- Ok(efn) => items.push(efn),
- Err(err) => cx.push(err),
- },
+ ForeignItem::Fn(foreign) => {
+ match parse_extern_fn(cx, foreign, lang, trusted, &namespace) {
+ Ok(efn) => items.push(efn),
+ Err(err) => cx.push(err),
+ }
+ }
ForeignItem::Macro(foreign) if foreign.mac.path.is_ident("include") => {
match foreign.mac.parse_body_with(parse_include) {
Ok(include) => items.push(Api::Include(include)),
@@ -332,6 +334,7 @@
cx: &mut Errors,
foreign_fn: &ForeignItemFn,
lang: Lang,
+ trusted: bool,
namespace: &Namespace,
) -> Result<Api> {
let generics = &foreign_fn.sig.generics;
@@ -449,6 +452,7 @@
throws_tokens,
},
semi_token,
+ trusted,
}))
}