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:
Vadim Zeitlin
2002-02-06 01:38:48 +00:00
parent f98bd52a3e
commit 1f42894286
2 changed files with 23 additions and 6 deletions

View File

@@ -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
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -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());
} }
} }