summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bindgen-integration/build.rs10
-rw-r--r--bindgen-integration/cpp/Test.cc4
-rw-r--r--bindgen-integration/cpp/Test.h13
-rwxr-xr-xbindgen-integration/src/lib.rs10
-rw-r--r--src/callbacks.rs5
-rw-r--r--src/ir/item.rs5
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()
}