X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ecf9e593f8f77a9105bfaf6c94aae1baa84020da..4a377e137527eb7f4a26b9e3bc1cd88e8c108676:/src/common/list.cpp diff --git a/src/common/list.cpp b/src/common/list.cpp index 9d88dea967..fc55b174fa 100644 --- a/src/common/list.cpp +++ b/src/common/list.cpp @@ -16,8 +16,9 @@ // ----------------------------------------------------------------------------- // headers // ----------------------------------------------------------------------------- + #ifdef __GNUG__ -#pragma implementation "list.h" + #pragma implementation "list.h" #endif // For compilers that support precompilation, includes "wx.h". @@ -165,17 +166,16 @@ void wxListBase::DoCopy(const wxListBase& list) wxASSERT_MSG( !list.m_destroy, wxT("copying list which owns it's elements is a bad idea") ); - m_count = list.m_count; m_destroy = list.m_destroy; m_keyType = list.m_keyType; m_nodeFirst = m_nodeLast = (wxNodeBase *) NULL; switch (m_keyType) { - + case wxKEY_INTEGER: { - long key; + long key; for ( wxNodeBase *node = list.GetFirst(); node; node = node->GetNext() ) { key = node->GetKeyInteger(); @@ -186,7 +186,7 @@ void wxListBase::DoCopy(const wxListBase& list) case wxKEY_STRING: { - const wxChar *key; + const wxChar *key; for ( wxNodeBase *node = list.GetFirst(); node; node = node->GetNext() ) { key = node->GetKeyString(); @@ -204,6 +204,8 @@ void wxListBase::DoCopy(const wxListBase& list) break; } } + + wxASSERT_MSG( m_count == list.m_count, _T("logic error in wxList::DoCopy") ); } wxListBase::~wxListBase() @@ -241,7 +243,10 @@ wxNodeBase *wxListBase::Append(void *object) wxCHECK_MSG( m_keyType == wxKEY_NONE, (wxNodeBase *)NULL, wxT("need a key for the object to append") ); - wxNodeBase *node = CreateNode(m_nodeLast, (wxNodeBase *)NULL, object); + // we use wxDefaultListKey even though it is the default parameter value + // because gcc under Mac OS X seems to miscompile this call otherwise + wxNodeBase *node = CreateNode(m_nodeLast, (wxNodeBase *)NULL, object, + wxDefaultListKey); return AppendCommon(node); } @@ -291,7 +296,8 @@ wxNodeBase *wxListBase::Insert(wxNodeBase *position, void *object) next = m_nodeFirst; } - wxNodeBase *node = CreateNode(prev, next, object); + // wxDefaultListKey: see comment in Append() above + wxNodeBase *node = CreateNode(prev, next, object, wxDefaultListKey); if ( !m_nodeFirst ) { m_nodeLast = node; @@ -578,6 +584,7 @@ void wxStringList::DoCopy(const wxStringList& other) // Makes new storage for the strings wxStringList::wxStringList (const wxChar *first, ...) { + DeleteContents(TRUE); if ( !first ) return;