@@ -356,6 +356,8 @@ struct smart_holder_type_caster_class_hooks : smart_holder_type_caster_base_tag
356
356
auto *holder_void_ptr = const_cast <void *>(holder_const_void_ptr);
357
357
358
358
auto v_h = inst->get_value_and_holder (detail::get_type_info (typeid (WrappedType)));
359
+ printf (" \n LOOOK [%lu] %s:%d\n " , (std::size_t ) v_h.value_ptr (), __FILE__, __LINE__); fflush (stdout);
360
+ // long *BAD = nullptr; *BAD = 101;
359
361
if (!v_h.instance_registered ()) {
360
362
register_instance (inst, v_h.value_ptr (), v_h.type );
361
363
v_h.set_instance_registered ();
@@ -642,6 +644,7 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>,
642
644
}
643
645
644
646
static handle cast (T const *src, return_value_policy policy, handle parent) {
647
+ printf (" \n LOOOK [%lu] IsBase0Still %s:%d\n " , (std::size_t ) src, __FILE__, __LINE__); fflush (stdout);
645
648
auto st = type_caster_base<T>::src_and_type (src);
646
649
return cast_const_raw_ptr ( // Originally type_caster_generic::cast.
647
650
st.first ,
@@ -688,6 +691,7 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>,
688
691
void *(*copy_constructor)(const void *),
689
692
void *(*move_constructor)(const void *),
690
693
const void *existing_holder = nullptr) {
694
+ printf (" \n LOOOK [%lu] IsDerivedAlready %s:%d\n " , (std::size_t ) _src, __FILE__, __LINE__); fflush (stdout);
691
695
if (!tinfo) { // no type info: error will be set already
692
696
return handle ();
693
697
}
@@ -780,6 +784,7 @@ struct smart_holder_type_caster<std::shared_ptr<T>> : smart_holder_type_caster_l
780
784
static constexpr auto name = const_name<T>();
781
785
782
786
static handle cast (const std::shared_ptr<T> &src, return_value_policy policy, handle parent) {
787
+ printf (" \n LOOOK [%lu] %s:%d\n " , (std::size_t ) src.get (), __FILE__, __LINE__); fflush (stdout);
783
788
switch (policy) {
784
789
case return_value_policy::automatic:
785
790
case return_value_policy::automatic_reference:
@@ -821,8 +826,10 @@ struct smart_holder_type_caster<std::shared_ptr<T>> : smart_holder_type_caster_l
821
826
inst_raw_ptr->owned = true ;
822
827
void *&valueptr = values_and_holders (inst_raw_ptr).begin ()->value_ptr ();
823
828
valueptr = src_raw_void_ptr;
829
+ printf (" \n LOOOK [%lu] IsBase0 %s:%d\n " , (std::size_t ) valueptr, __FILE__, __LINE__); fflush (stdout);
830
+ printf (" \n LOOOK [%lu] IsDerived %s:%d\n " , (std::size_t ) st.first , __FILE__, __LINE__); fflush (stdout);
824
831
825
- auto smhldr = pybindit::memory::smart_holder::from_shared_ptr (src);
832
+ auto smhldr = pybindit::memory::smart_holder::from_shared_ptr (std::shared_ptr< void >( src, const_cast < void *>(st. first )) );
826
833
tinfo->init_instance (inst_raw_ptr, static_cast <const void *>(&smhldr));
827
834
828
835
if (policy == return_value_policy::reference_internal) {
0 commit comments