diff --git a/bindgen/callbacks.rs b/bindgen/callbacks.rs index d58c502255..2fb58e7b04 100644 --- a/bindgen/callbacks.rs +++ b/bindgen/callbacks.rs @@ -1,7 +1,7 @@ //! A public API for more fine-grained customization of bindgen behavior. pub use crate::ir::analysis::DeriveTrait; -pub use crate::ir::comp::MethodKind as AttributeMethodKind; +pub use crate::ir::function::FunctionKind; pub use crate::ir::derive::CanDerive as ImplementsTrait; pub use crate::ir::enum_ty::{EnumVariantCustomBehavior, EnumVariantValue}; pub use crate::ir::int::IntKind; @@ -242,7 +242,7 @@ pub struct AttributeInfo<'a> { /// The kind of the item. pub kind: AttributeItemKind, /// The kind of a method item. - pub method_kind: Option, + pub fn_kind: Option, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] diff --git a/bindgen/codegen/mod.rs b/bindgen/codegen/mod.rs index bcf701818a..890b249609 100644 --- a/bindgen/codegen/mod.rs +++ b/bindgen/codegen/mod.rs @@ -1071,7 +1071,7 @@ impl CodeGenerator for Type { cb.add_attributes(&AttributeInfo { name: &name, kind: AttributeItemKind::Struct, - method_kind: None, + fn_kind: None, }) }); attributes.extend( @@ -2538,7 +2538,7 @@ impl CodeGenerator for CompInfo { } else { AttributeItemKind::Struct }, - method_kind: None, + fn_kind: None, }) }); attributes.extend(custom_attributes.iter().map(|s| s.parse().unwrap())); @@ -3154,7 +3154,7 @@ impl Method { cb.add_attributes(&AttributeInfo { name: &canonical_name, kind: AttributeItemKind::Function, - method_kind: Some(self.kind()), + fn_kind: Some(FunctionKind::Method(self.kind())), }) }); attrs.extend(custom_attributes.iter().map(|s| s.parse().unwrap())); @@ -3740,7 +3740,7 @@ impl CodeGenerator for Enum { cb.add_attributes(&AttributeInfo { name: &name, kind: AttributeItemKind::Enum, - method_kind: None, + fn_kind: None, }) }); attrs.extend(custom_attributes.iter().map(|s| s.parse().unwrap())); @@ -4605,6 +4605,15 @@ impl CodeGenerator for Function { let mut attributes = vec![]; + let custom_attributes = ctx.options().all_callbacks(|cb| { + cb.add_attributes(&AttributeInfo { + name: &canonical_name, + kind: AttributeItemKind::Function, + fn_kind: Some(self.kind()), + }) + }); + attributes.extend(custom_attributes.iter().map(|s| s.parse().unwrap())); + if true { let must_use = signature.must_use() || { let ret_ty = signature diff --git a/bindgen/ir/function.rs b/bindgen/ir/function.rs index 2474ea839a..6f59ae2ea7 100644 --- a/bindgen/ir/function.rs +++ b/bindgen/ir/function.rs @@ -19,7 +19,7 @@ const RUST_DERIVE_FUNPTR_LIMIT: usize = 12; /// What kind of function are we looking at? #[derive(Debug, Copy, Clone, PartialEq, Eq)] -pub(crate) enum FunctionKind { +pub enum FunctionKind { /// A plain, free function. Function, /// A method of some kind.