diff options
-rw-r--r-- | bindgen-integration/build.rs | 10 | ||||
-rw-r--r-- | bindgen-integration/cpp/Test.cc | 4 | ||||
-rw-r--r-- | bindgen-integration/cpp/Test.h | 13 | ||||
-rwxr-xr-x | bindgen-integration/src/lib.rs | 10 | ||||
-rw-r--r-- | src/callbacks.rs | 5 | ||||
-rw-r--r-- | src/ir/item.rs | 5 |
6 files changed, 47 insertions, 0 deletions
diff --git a/bindgen-integration/build.rs b/bindgen-integration/build.rs index f7e8b4eb..1a86add1 100644 --- a/bindgen-integration/build.rs +++ b/bindgen-integration/build.rs @@ -23,6 +23,16 @@ impl ParseCallbacks for MacroCallback { MacroParsingBehavior::Default } + + fn item_name(&self, original_item_name: &str) -> Option<String> { + if original_item_name.starts_with("my_prefixed_") { + Some(original_item_name.trim_start_matches("my_prefixed_").to_string()) + } else if original_item_name.starts_with("MY_PREFIXED_") { + Some(original_item_name.trim_start_matches("MY_PREFIXED_").to_string()) + } else { + None + } + } } fn main() { diff --git a/bindgen-integration/cpp/Test.cc b/bindgen-integration/cpp/Test.cc index 80ae0239..c3d73411 100644 --- a/bindgen-integration/cpp/Test.cc +++ b/bindgen-integration/cpp/Test.cc @@ -131,3 +131,7 @@ Seventh::assert(bool first, }; } // namespace bitfields + +int my_prefixed_function_name() { + return 4; +}
\ No newline at end of file diff --git a/bindgen-integration/cpp/Test.h b/bindgen-integration/cpp/Test.h index 8b9ad8d5..fe9bf0d4 100644 --- a/bindgen-integration/cpp/Test.h +++ b/bindgen-integration/cpp/Test.h @@ -178,3 +178,16 @@ struct AutoRestoreBool { struct WithWChar { wchar_t foo[30]; }; + +// The names of the following items are unprefixed by the parse callbacks. +const int MY_PREFIXED_CONST_VALUE = 3; + +int my_prefixed_function_name(); + +struct my_prefixed_bar { + int foo; +}; + +struct my_prefixed_foo { + my_prefixed_bar member; +}; diff --git a/bindgen-integration/src/lib.rs b/bindgen-integration/src/lib.rs index 74b4df4f..0e051df3 100755 --- a/bindgen-integration/src/lib.rs +++ b/bindgen-integration/src/lib.rs @@ -282,3 +282,13 @@ fn test_virtual_dtor() { assert_eq!(bindings::VirtualDestructor_sDestructorCount, 1); } } + +#[test] +fn test_item_rename() { + assert_eq!(bindings::CONST_VALUE, 3); + assert_eq!(unsafe{ bindings::function_name() }, 4); + + let _foo = bindings::foo{ + member: bindings::bar{foo: 2} + }; +}
\ No newline at end of file diff --git a/src/callbacks.rs b/src/callbacks.rs index 71b98fc9..26f77338 100644 --- a/src/callbacks.rs +++ b/src/callbacks.rs @@ -55,4 +55,9 @@ pub trait ParseCallbacks: fmt::Debug + UnwindSafe { ) -> Option<String> { None } + + /// Allows to rename an item, replacing `_original_item_name`. + fn item_name(&self, _original_item_name: &str) -> Option<String> { + None + } } diff --git a/src/ir/item.rs b/src/ir/item.rs index 5f0ccc0b..a6ee4ff3 100644 --- a/src/ir/item.rs +++ b/src/ir/item.rs @@ -875,6 +875,11 @@ impl Item { let name = names.join("_"); + let name = ctx + .parse_callbacks() + .and_then(|callbacks| callbacks.item_name(&name)) + .unwrap_or(name); + ctx.rust_mangle(&name).into_owned() } |