use a more efficient datastructure in lisp_free
authorMatthias Braun <matze@braunis.de>
Tue, 29 Jun 2004 12:12:24 +0000 (12:12 +0000)
committerMatthias Braun <matze@braunis.de>
Tue, 29 Jun 2004 12:12:24 +0000 (12:12 +0000)
SVN-Revision: 1519

src/lispreader.cpp

index 83b4fbf..3750b1c 100644 (file)
@@ -21,7 +21,7 @@
  * Boston, MA 02111-1307, USA.
  */
 #include <iostream>
-#include <queue>
+#include <vector>
 #include <string>
 #include <cctype>
 #include <cstdlib>
@@ -509,12 +509,12 @@ lisp_free (lisp_object_t *obj)
   /** We have to use this iterative code, because the recursive function
    * produces a stack overflow and crashs on OSX 10.2
    */
-  std::queue<lisp_object_t*> objs;
-  objs.push(obj);
+  std::vector<lisp_object_t*> objs;
+  objs.push_back(obj);
 
   while(!objs.empty()) {
-    lisp_object_t* obj = objs.front();
-    objs.pop();
+    lisp_object_t* obj = objs.back();
+    objs.pop_back();
         
     switch (obj->type) {
       case LISP_TYPE_INTERNAL :
@@ -530,14 +530,14 @@ lisp_free (lisp_object_t *obj)
       case LISP_TYPE_CONS :
       case LISP_TYPE_PATTERN_CONS :
         if(obj->v.cons.car)
-          objs.push(obj->v.cons.car);
+          objs.push_back(obj->v.cons.car);
         if(obj->v.cons.cdr)
-          objs.push(obj->v.cons.cdr);
+          objs.push_back(obj->v.cons.cdr);
         break;
 
       case LISP_TYPE_PATTERN_VAR :
         if(obj->v.pattern.sub)
-          objs.push(obj->v.pattern.sub);
+          objs.push_back(obj->v.pattern.sub);
         break;
     }