assert when a base class of a class in wxRTTI system is not found
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14024 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -122,12 +122,17 @@ public:
|
|||||||
static wxClassInfo *sm_first;
|
static wxClassInfo *sm_first;
|
||||||
wxClassInfo *m_next;
|
wxClassInfo *m_next;
|
||||||
|
|
||||||
|
// FIXME: this should be private (currently used directly by way too
|
||||||
|
// many clients)
|
||||||
static wxHashTable *sm_classTable;
|
static wxHashTable *sm_classTable;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// InitializeClasses() helper
|
||||||
|
static wxClassInfo *GetBaseByName(const wxChar *name);
|
||||||
};
|
};
|
||||||
|
|
||||||
WXDLLEXPORT wxObject *wxCreateDynamicObject(const wxChar *name);
|
WXDLLEXPORT wxObject *wxCreateDynamicObject(const wxChar *name);
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Dynamic class macros
|
// Dynamic class macros
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -151,8 +151,22 @@ wxClassInfo *wxClassInfo::FindClass(const wxChar *className)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set pointers to base class(es) to speed up IsKindOf
|
// a tiny InitializeClasses() helper
|
||||||
|
/* static */
|
||||||
|
inline wxClassInfo *wxClassInfo::GetBaseByName(const wxChar *name)
|
||||||
|
{
|
||||||
|
if ( !name )
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
wxClassInfo *classInfo = (wxClassInfo *)sm_classTable->Get(name);
|
||||||
|
|
||||||
|
// this must be fixed, other things risk work wrongly later if you get this
|
||||||
|
wxASSERT_MSG( classInfo, _T("base class unknown to wxWindows RTTI") );
|
||||||
|
|
||||||
|
return classInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set pointers to base class(es) to speed up IsKindOf
|
||||||
void wxClassInfo::InitializeClasses()
|
void wxClassInfo::InitializeClasses()
|
||||||
{
|
{
|
||||||
// using IMPLEMENT_DYNAMIC_CLASS() macro twice (which may happen if you
|
// using IMPLEMENT_DYNAMIC_CLASS() macro twice (which may happen if you
|
||||||
@@ -185,10 +199,8 @@ void wxClassInfo::InitializeClasses()
|
|||||||
|
|
||||||
for(info = sm_first; info; info = info->m_next)
|
for(info = sm_first; info; info = info->m_next)
|
||||||
{
|
{
|
||||||
if (info->GetBaseClassName1())
|
info->m_baseInfo1 = GetBaseByName(info->GetBaseClassName1());
|
||||||
info->m_baseInfo1 = (wxClassInfo *)sm_classTable->Get(info->GetBaseClassName1());
|
info->m_baseInfo2 = GetBaseByName(info->GetBaseClassName2());
|
||||||
if (info->GetBaseClassName2())
|
|
||||||
info->m_baseInfo2 = (wxClassInfo *)sm_classTable->Get(info->GetBaseClassName2());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user