[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdevelop/lib/sourceinfo [POSSIBLY UNSAFE]
From:       Harald Fernengel <harald () trolltech ! com>
Date:       2003-01-07 1:55:08
[Download RAW message or body]

CVS commit by harald: 

invented a guardeditem class so the ClassListView won't crash on dangling pointers.
Also fixed duplicated entries for global variables after saving a file.


  A            guardeditem.h   1.1 [POSSIBLY UNSAFE: gets]
  M +6 -2      classstore.cpp   1.21
  M +29 -0     parsedcontainer.cpp   1.15
  M +1 -1      parseditem.cpp   1.9
  M +3 -1      parseditem.h   1.15


--- kdevelop/lib/sourceinfo/classstore.cpp  #1.20:1.21
@@ -483,7 +483,11 @@ void ClassStore::removeWithReferences(co
 void ClassStore::removeWithReferences(const QString &fileName)
 {
-    QMap<QString, ParsedScopeContainer*>::Iterator it;
-    for (it = m_allScopes.begin(); it != m_allScopes.end(); ++it)
+    for (QMap<QString, ParsedScopeContainer*>::Iterator it = m_allScopes.begin(); it \
!= m_allScopes.end(); ++it)  removeWithReferences(fileName, *it);
+//    for (QMap<QString, ParsedClass*>::Iterator it = m_allClasses.begin(); it != \
m_allClasses.end(); ++it) +//        (*it)->removeWithReferences(fileName);
+//    for (QMap<QString, ParsedStruct*>::Iterator it = m_allStructs.begin(); it != \
m_allStructs.end(); ++it) +//        (*it)->removeWithReferences(fileName);
+    m_globalScope->removeWithReferences(fileName);
 }
 

--- kdevelop/lib/sourceinfo/parsedcontainer.cpp  #1.14:1.15
@@ -109,4 +109,6 @@ void ParsedContainer::addAttribute( Pars
         anAttribute->setDeclaredInScope( path() );
 
+    //qDebug( "ParsedContainer::addAttribute: " + anAttribute->asString() );
+
     attributes.insert( anAttribute->name(),  anAttribute );
 }
@@ -363,4 +365,31 @@ void ParsedContainer::removeWithReferenc
 {
     REQUIRE( "Valid filename length", aFile.length() > 0 );
+
+    ParsedMethod *method = methodIterator.toFirst();
+    while ( method ) {
+        if ( method->declaredInFile() == aFile )
+            removeMethod( method );
+        else
+            ++methodIterator;
+        method = methodIterator.current();
+    }
+
+    ParsedAttribute *attr = attributeIterator.toFirst();
+    while (attr) {
+        if ( attr->declaredInFile() == aFile )
+            removeAttribute( attributeIterator.currentKey() );
+        else
+            ++attributeIterator;
+        attr = attributeIterator.current();
+    }
+
+    ParsedStruct *str = structIterator.toFirst();
+    while ( str ) {
+        if ( str->declaredInFile() == aFile )
+            removeStruct( structIterator.currentKey() );
+        else
+            ++structIterator;
+        str = structIterator.current();
+    }
 }
 

--- kdevelop/lib/sourceinfo/parseditem.cpp  #1.8:1.9
@@ -29,5 +29,5 @@
  *   Constructor.
  *-----------------------------------------------------------------*/
-ParsedItem::ParsedItem()
+ParsedItem::ParsedItem(): GuardedItem()
 { 
     _itemType = PIT_UNKNOWN;

--- kdevelop/lib/sourceinfo/parseditem.h  #1.14:1.15
@@ -23,4 +23,6 @@
 #include <qtextstream.h>
 
+#include "guardeditem.h"
+
 /** The type of a ParsedItem. */
 enum PIType { 
@@ -45,5 +47,5 @@ enum PIAccess { 
  * @author Jonas Nordin
  */
-class ParsedItem
+class ParsedItem: public GuardedItem
 {
 public:


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic