diff options
author | David Tolnay <dtolnay@gmail.com> | 2023-08-29 15:32:43 -0700 |
---|---|---|
committer | David Tolnay <dtolnay@gmail.com> | 2023-08-29 15:39:22 -0700 |
commit | 2ff5e37af4b8dcd6a2b743736b4f7b8d2e3f8088 (patch) | |
tree | 22260bc5ded02ead0efec8ce6632384dfd8598c0 /src | |
parent | 4213e928ffcae9d458fb9ac651edaa7fd25c285d (diff) | |
download | cxx-2ff5e37af4b8dcd6a2b743736b4f7b8d2e3f8088.tar.gz |
Remove unique_ptr from name of std::vector<>::new symbol
Diffstat (limited to 'src')
-rw-r--r-- | src/cxx.cc | 7 | ||||
-rw-r--r-- | src/cxx_vector.rs | 24 |
2 files changed, 15 insertions, 16 deletions
@@ -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! { |