aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Tolnay <dtolnay@gmail.com>2023-08-29 15:32:43 -0700
committerDavid Tolnay <dtolnay@gmail.com>2023-08-29 15:39:22 -0700
commit2ff5e37af4b8dcd6a2b743736b4f7b8d2e3f8088 (patch)
tree22260bc5ded02ead0efec8ce6632384dfd8598c0 /src
parent4213e928ffcae9d458fb9ac651edaa7fd25c285d (diff)
downloadcxx-2ff5e37af4b8dcd6a2b743736b4f7b8d2e3f8088.tar.gz
Remove unique_ptr from name of std::vector<>::new symbol
Diffstat (limited to 'src')
-rw-r--r--src/cxx.cc7
-rw-r--r--src/cxx_vector.rs24
2 files changed, 15 insertions, 16 deletions
diff --git a/src/cxx.cc b/src/cxx.cc
index 8c361c08..2522d61a 100644
--- a/src/cxx.cc
+++ b/src/cxx.cc
@@ -593,6 +593,9 @@ static_assert(sizeof(std::string) <= kMaxExpectedWordsInString * sizeof(void *),
} // namespace
#define STD_VECTOR_OPS(RUST_TYPE, CXX_TYPE) \
+ std::vector<CXX_TYPE> *cxxbridge1$std$vector$##RUST_TYPE##$new() noexcept { \
+ return new std::vector<CXX_TYPE>(); \
+ } \
std::size_t cxxbridge1$std$vector$##RUST_TYPE##$size( \
const std::vector<CXX_TYPE> &s) noexcept { \
return s.size(); \
@@ -605,10 +608,6 @@ static_assert(sizeof(std::string) <= kMaxExpectedWordsInString * sizeof(void *),
std::unique_ptr<std::vector<CXX_TYPE>> *ptr) noexcept { \
new (ptr) std::unique_ptr<std::vector<CXX_TYPE>>(); \
} \
- std::vector<CXX_TYPE> \
- *cxxbridge1$unique_ptr$std$vector$##RUST_TYPE##$new() noexcept { \
- return new std::vector<CXX_TYPE>(); \
- } \
void cxxbridge1$unique_ptr$std$vector$##RUST_TYPE##$raw( \
std::unique_ptr<std::vector<CXX_TYPE>> *ptr, \
std::vector<CXX_TYPE> *raw) noexcept { \
diff --git a/src/cxx_vector.rs b/src/cxx_vector.rs
index 9587a751..2f8a280e 100644
--- a/src/cxx_vector.rs
+++ b/src/cxx_vector.rs
@@ -41,7 +41,7 @@ where
///
/// The C++ vector is default constructed.
pub fn new() -> UniquePtr<Self> {
- unsafe { UniquePtr::from_raw(T::__unique_ptr_new()) }
+ unsafe { UniquePtr::from_raw(T::__vector_new()) }
}
/// Returns the number of elements in the vector.
@@ -342,6 +342,8 @@ pub unsafe trait VectorElement: Sized {
#[doc(hidden)]
fn __typename(f: &mut fmt::Formatter) -> fmt::Result;
#[doc(hidden)]
+ fn __vector_new() -> *mut CxxVector<Self>;
+ #[doc(hidden)]
fn __vector_size(v: &CxxVector<Self>) -> usize;
#[doc(hidden)]
unsafe fn __get_unchecked(v: *mut CxxVector<Self>, pos: usize) -> *mut Self;
@@ -364,8 +366,6 @@ pub unsafe trait VectorElement: Sized {
#[doc(hidden)]
fn __unique_ptr_null() -> MaybeUninit<*mut c_void>;
#[doc(hidden)]
- fn __unique_ptr_new() -> *mut CxxVector<Self>;
- #[doc(hidden)]
unsafe fn __unique_ptr_raw(raw: *mut CxxVector<Self>) -> MaybeUninit<*mut c_void>;
#[doc(hidden)]
unsafe fn __unique_ptr_get(repr: MaybeUninit<*mut c_void>) -> *const CxxVector<Self>;
@@ -408,6 +408,15 @@ macro_rules! impl_vector_element {
fn __typename(f: &mut fmt::Formatter) -> fmt::Result {
f.write_str($name)
}
+ fn __vector_new() -> *mut CxxVector<Self> {
+ extern "C" {
+ attr! {
+ #[link_name = concat!("cxxbridge1$std$vector$", $segment, "$new")]
+ fn __vector_new() -> *mut CxxVector<$ty>;
+ }
+ }
+ unsafe { __vector_new() }
+ }
fn __vector_size(v: &CxxVector<$ty>) -> usize {
extern "C" {
attr! {
@@ -438,15 +447,6 @@ macro_rules! impl_vector_element {
unsafe { __unique_ptr_null(&mut repr) }
repr
}
- fn __unique_ptr_new() -> *mut CxxVector<Self> {
- extern "C" {
- attr! {
- #[link_name = concat!("cxxbridge1$unique_ptr$std$vector$", $segment, "$new")]
- fn __unique_ptr_new() -> *mut CxxVector<$ty>;
- }
- }
- unsafe { __unique_ptr_new() }
- }
unsafe fn __unique_ptr_raw(raw: *mut CxxVector<Self>) -> MaybeUninit<*mut c_void> {
extern "C" {
attr! {