Attribute parser for cxx_name and rust_name attributes
diff --git a/syntax/attrs.rs b/syntax/attrs.rs
index 4c76641..4c8a3e5 100644
--- a/syntax/attrs.rs
+++ b/syntax/attrs.rs
@@ -10,6 +10,8 @@
pub doc: Option<&'a mut Doc>,
pub derives: Option<&'a mut Vec<Derive>>,
pub repr: Option<&'a mut Option<Atom>>,
+ pub cxx_name: Option<&'a mut Option<Ident>>,
+ pub rust_name: Option<&'a mut Option<Ident>>,
}
pub(super) fn parse_doc(cx: &mut Errors, attrs: &[Attribute]) -> Doc {
@@ -57,6 +59,26 @@
}
Err(err) => return cx.push(err),
}
+ } else if attr.path.is_ident("cxx_name") {
+ match parse_function_alias_attribute.parse2(attr.tokens.clone()) {
+ Ok(attr) => {
+ if let Some(cxx_name) = &mut parser.cxx_name {
+ **cxx_name = Some(attr);
+ continue;
+ }
+ }
+ Err(err) => return cx.push(err),
+ }
+ } else if attr.path.is_ident("rust_name") {
+ match parse_function_alias_attribute.parse2(attr.tokens.clone()) {
+ Ok(attr) => {
+ if let Some(rust_name) = &mut parser.rust_name {
+ **rust_name = Some(attr);
+ continue;
+ }
+ }
+ Err(err) => return cx.push(err),
+ }
}
return cx.error(attr, "unsupported attribute");
}
@@ -99,3 +121,13 @@
"unrecognized repr",
))
}
+
+fn parse_function_alias_attribute(input: ParseStream) -> Result<Ident> {
+ input.parse::<Token![=]>()?;
+ if input.peek(LitStr) {
+ let lit: LitStr = input.parse()?;
+ lit.parse()
+ } else {
+ input.parse()
+ }
+}