mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 16:13:53 +00:00
Merge branch 'smart_holder' of https://github.com/pybind/pybind11 into smart_holder
This commit is contained in:
commit
a6b2aadf45
@ -624,15 +624,18 @@ struct smart_holder_type_caster<std::shared_ptr<T>> : smart_holder_type_caster_l
|
|||||||
|
|
||||||
static handle cast(const std::shared_ptr<T> &src, return_value_policy policy, handle parent) {
|
static handle cast(const std::shared_ptr<T> &src, return_value_policy policy, handle parent) {
|
||||||
if (policy != return_value_policy::automatic
|
if (policy != return_value_policy::automatic
|
||||||
&& policy != return_value_policy::reference_internal) {
|
&& policy != return_value_policy::reference_internal
|
||||||
|
&& policy != return_value_policy::automatic_reference) {
|
||||||
// SMART_HOLDER_WIP: IMPROVABLE: Error message.
|
// SMART_HOLDER_WIP: IMPROVABLE: Error message.
|
||||||
throw cast_error("Invalid return_value_policy for shared_ptr.");
|
throw cast_error("Invalid return_value_policy for shared_ptr.");
|
||||||
}
|
}
|
||||||
|
if (!src)
|
||||||
|
return none().release();
|
||||||
|
|
||||||
auto src_raw_ptr = src.get();
|
auto src_raw_ptr = src.get();
|
||||||
auto st = type_caster_base<T>::src_and_type(src_raw_ptr);
|
auto st = type_caster_base<T>::src_and_type(src_raw_ptr);
|
||||||
if (st.first == nullptr)
|
if (st.second == nullptr)
|
||||||
return none().release(); // PyErr was set already.
|
return handle(); // no type info: error will be set already
|
||||||
|
|
||||||
void *src_raw_void_ptr = static_cast<void *>(src_raw_ptr);
|
void *src_raw_void_ptr = static_cast<void *>(src_raw_ptr);
|
||||||
const detail::type_info *tinfo = st.second;
|
const detail::type_info *tinfo = st.second;
|
||||||
@ -693,11 +696,13 @@ struct smart_holder_type_caster<std::unique_ptr<T, D>> : smart_holder_type_caste
|
|||||||
// SMART_HOLDER_WIP: IMPROVABLE: Error message.
|
// SMART_HOLDER_WIP: IMPROVABLE: Error message.
|
||||||
throw cast_error("Invalid return_value_policy for unique_ptr.");
|
throw cast_error("Invalid return_value_policy for unique_ptr.");
|
||||||
}
|
}
|
||||||
|
if (!src)
|
||||||
|
return none().release();
|
||||||
|
|
||||||
auto src_raw_ptr = src.get();
|
auto src_raw_ptr = src.get();
|
||||||
auto st = type_caster_base<T>::src_and_type(src_raw_ptr);
|
auto st = type_caster_base<T>::src_and_type(src_raw_ptr);
|
||||||
if (st.first == nullptr)
|
if (st.second == nullptr)
|
||||||
return none().release(); // PyErr was set already.
|
return handle(); // no type info: error will be set already
|
||||||
|
|
||||||
void *src_raw_void_ptr = static_cast<void *>(src_raw_ptr);
|
void *src_raw_void_ptr = static_cast<void *>(src_raw_ptr);
|
||||||
const detail::type_info *tinfo = st.second;
|
const detail::type_info *tinfo = st.second;
|
||||||
|
Loading…
Reference in New Issue
Block a user