From 499bb7557ff2c1c7d16a35143d86a845b19edfd5 Mon Sep 17 00:00:00 2001 From: Sébastien Duquette Date: Sat, 10 Nov 2018 16:22:59 -0500 Subject: Add item_name parse callback. --- src/callbacks.rs | 5 +++++ src/ir/item.rs | 5 +++++ 2 files changed, 10 insertions(+) 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 { None } + + /// Allows to rename an item, replacing `_original_item_name`. + fn item_name(&self, _original_item_name: &str) -> Option { + 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() } -- cgit v1.2.3 From c5c13535ff058e2c0aff3d1d0b5b08ae04fdc237 Mon Sep 17 00:00:00 2001 From: Sébastien Duquette Date: Sat, 10 Nov 2018 19:16:54 -0500 Subject: Add integration tests --- bindgen-integration/build.rs | 10 ++++++++++ bindgen-integration/cpp/Test.cc | 4 ++++ bindgen-integration/cpp/Test.h | 4 ++++ bindgen-integration/src/lib.rs | 6 ++++++ 4 files changed, 24 insertions(+) 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 { + 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..03981eaf 100644 --- a/bindgen-integration/cpp/Test.cc +++ b/bindgen-integration/cpp/Test.cc @@ -130,4 +130,8 @@ Seventh::assert(bool first, this->seventh_thirty_bits == seventh; }; +int my_prefixed_function_name() { + return 4; +} + } // namespace bitfields diff --git a/bindgen-integration/cpp/Test.h b/bindgen-integration/cpp/Test.h index 8b9ad8d5..10f1b57f 100644 --- a/bindgen-integration/cpp/Test.h +++ b/bindgen-integration/cpp/Test.h @@ -178,3 +178,7 @@ struct AutoRestoreBool { struct WithWChar { wchar_t foo[30]; }; + +const int MY_PREFIXED_CONST_VALUE = 3; + +int my_prefixed_function_name(); \ No newline at end of file diff --git a/bindgen-integration/src/lib.rs b/bindgen-integration/src/lib.rs index 74b4df4f..c37ed335 100755 --- a/bindgen-integration/src/lib.rs +++ b/bindgen-integration/src/lib.rs @@ -282,3 +282,9 @@ fn test_virtual_dtor() { assert_eq!(bindings::VirtualDestructor_sDestructorCount, 1); } } + +#[test] +fn test_item_rename() { + assert_eq!(bindings::CONST_VALUE, 3); + assert_eq!(bindings::function_name(), 4); +} \ No newline at end of file -- cgit v1.2.3 From 5b741da6e9a4a0737df37cb04a8adee0d30224df Mon Sep 17 00:00:00 2001 From: Sébastien Duquette Date: Sat, 10 Nov 2018 20:32:29 -0500 Subject: Add tests for renamed structure items --- bindgen-integration/cpp/Test.cc | 6 +++--- bindgen-integration/cpp/Test.h | 11 ++++++++++- bindgen-integration/src/lib.rs | 6 +++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/bindgen-integration/cpp/Test.cc b/bindgen-integration/cpp/Test.cc index 03981eaf..c3d73411 100644 --- a/bindgen-integration/cpp/Test.cc +++ b/bindgen-integration/cpp/Test.cc @@ -130,8 +130,8 @@ Seventh::assert(bool first, this->seventh_thirty_bits == seventh; }; +} // namespace bitfields + int my_prefixed_function_name() { return 4; -} - -} // namespace bitfields +} \ No newline at end of file diff --git a/bindgen-integration/cpp/Test.h b/bindgen-integration/cpp/Test.h index 10f1b57f..fe9bf0d4 100644 --- a/bindgen-integration/cpp/Test.h +++ b/bindgen-integration/cpp/Test.h @@ -179,6 +179,15 @@ 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(); \ No newline at end of file +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 c37ed335..0e051df3 100755 --- a/bindgen-integration/src/lib.rs +++ b/bindgen-integration/src/lib.rs @@ -286,5 +286,9 @@ fn test_virtual_dtor() { #[test] fn test_item_rename() { assert_eq!(bindings::CONST_VALUE, 3); - assert_eq!(bindings::function_name(), 4); + assert_eq!(unsafe{ bindings::function_name() }, 4); + + let _foo = bindings::foo{ + member: bindings::bar{foo: 2} + }; } \ No newline at end of file -- cgit v1.2.3