From 2ae3c2ceb794708165644ddc94911d24aad19ffb Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Thu, 3 Jun 2021 22:12:12 -0700 Subject: [PATCH] Experiment: restoring original smart_holder_type_casters.h from smart_holder branch. --- .../detail/smart_holder_type_casters.h | 61 ++----------------- 1 file changed, 6 insertions(+), 55 deletions(-) diff --git a/include/pybind11/detail/smart_holder_type_casters.h b/include/pybind11/detail/smart_holder_type_casters.h index de16cdf36..b61d0a999 100644 --- a/include/pybind11/detail/smart_holder_type_casters.h +++ b/include/pybind11/detail/smart_holder_type_casters.h @@ -26,11 +26,6 @@ #include #include -#ifdef JUNK -# include -inline void to_cout(std::string msg) { std::cout << msg << std::endl; } -#endif - PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE) using pybindit::memory::smart_holder; @@ -275,31 +270,6 @@ struct smart_holder_type_caster_class_hooks : smart_holder_type_caster_base_tag return &modified_type_caster_generic_load_impl::local_load; } - using holder_type = pybindit::memory::smart_holder; - -#ifdef JUNK - template - static bool try_initialization_using_shared_from_this(holder_type *, WrappedType *, ...) { - return false; - } -#endif - -#ifdef JUNK - template - static bool try_initialization_using_shared_from_this( - holder_type *uninitialized_location, - WrappedType *value_ptr_w_t, - const std::enable_shared_from_this *) { - auto shd_ptr = std::dynamic_pointer_cast( - detail::try_get_shared_from_this(value_ptr_w_t)); - if (!shd_ptr) - return false; - // Note: inst->owned ignored. - new (uninitialized_location) holder_type(holder_type::from_shared_ptr(shd_ptr)); - return true; - } -#endif - template static void init_instance_for_type(detail::instance *inst, const void *holder_const_void_ptr) { // Need for const_cast is a consequence of the type_info::init_instance type: @@ -311,27 +281,17 @@ struct smart_holder_type_caster_class_hooks : smart_holder_type_caster_base_tag register_instance(inst, v_h.value_ptr(), v_h.type); v_h.set_instance_registered(); } + using holder_type = pybindit::memory::smart_holder; if (holder_void_ptr) { // Note: inst->owned ignored. auto holder_ptr = static_cast(holder_void_ptr); new (std::addressof(v_h.holder())) holder_type(std::move(*holder_ptr)); + } else if (inst->owned) { + new (std::addressof(v_h.holder())) holder_type( + holder_type::from_raw_ptr_take_ownership(v_h.value_ptr())); } else { -#ifdef JUNK - if (!try_initialization_using_shared_from_this( - std::addressof(v_h.holder()), - v_h.value_ptr(), - v_h.value_ptr())) { -#endif - if (inst->owned) { - new (std::addressof(v_h.holder())) holder_type( - holder_type::from_raw_ptr_take_ownership(v_h.value_ptr())); - } else { - new (std::addressof(v_h.holder())) holder_type( - holder_type::from_raw_ptr_unowned(v_h.value_ptr())); - } -#ifdef JUNK - } -#endif + new (std::addressof(v_h.holder())) + holder_type(holder_type::from_raw_ptr_unowned(v_h.value_ptr())); } v_h.holder().pointee_depends_on_holder_owner = dynamic_raw_ptr_cast_if_possible(v_h.value_ptr()) != nullptr; @@ -404,20 +364,11 @@ struct smart_holder_type_caster_load { auto type_raw_ptr = convert_type(void_raw_ptr); if (holder().pointee_depends_on_holder_owner) { // Tie lifetime of trampoline Python part to C++ part (PR #2839). -#ifdef JUNK - to_cout(""); - to_cout("LOOOK " + std::to_string(__LINE__) + " " + __FILE__); -#endif return std::shared_ptr( type_raw_ptr, shared_ptr_dec_ref_deleter{ handle((PyObject *) load_impl.loaded_v_h.inst).inc_ref()}); } -#ifdef JUNK - if (holder().vptr_is_using_noop_deleter) { - throw std::runtime_error("Non-owning holder (loaded_as_shared_ptr)."); - } -#endif std::shared_ptr void_shd_ptr = holder().template as_shared_ptr(); return std::shared_ptr(void_shd_ptr, type_raw_ptr); }