diff --git a/gen_extclass.py b/gen_extclass.py index ebd2fc78..2146e9c5 100644 --- a/gen_extclass.py +++ b/gen_extclass.py @@ -87,6 +87,9 @@ class ExtensionClassBase : public Class void* try_base_class_conversions(InstanceHolderBase*) const; void* try_derived_class_conversions(InstanceHolderBase*) const; + void set_attribute(const char* name, PyObject* x_); + void set_attribute(const char* name, Ptr x); + private: virtual void* extract_object_from_holder(InstanceHolderBase* v) const = 0; virtual std::vector const& base_classes() const = 0; @@ -425,7 +428,11 @@ class ExtensionClass detail::BaseClassInfo baseInfo(base, &detail::DefineConversion::downcast_ptr); ClassRegistry::register_base_class(baseInfo); - add_base(Ptr(as_object(base), Ptr::new_ref)); + + Class* target = (bases().size() == 0) + ? this + : Downcast >(bases()[0].get()).get(); + target->add_base(Ptr(as_object(base), Ptr::new_ref)); detail::DerivedClassInfo derivedInfo(this, &detail::DefineConversion::upcast_ptr); @@ -441,7 +448,11 @@ class ExtensionClass // conversion functions detail::BaseClassInfo baseInfo(base, 0); ClassRegistry::register_base_class(baseInfo); - add_base(Ptr(as_object(base), Ptr::new_ref)); + + Class* target = (bases().size() == 0) + ? this + : Downcast >(bases()[0].get()).get(); + target->add_base(Ptr(as_object(base), Ptr::new_ref)); detail::DerivedClassInfo derivedInfo(this, &detail::DefineConversion::upcast_ptr);