core: vector_to_list: Create less garbage.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 20 Apr 2018 11:22:47 +0000 (13:22 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 20 Apr 2018 11:22:47 +0000 (13:22 +0200)
* src/vector.c (vector_to_list): Create less garbage.

src/vector.c

index ad4cac916c290b4ba1864ba7b0a2aa66073c0b7a..701fd6de7a472c0fae4f82ff3fcfbc0ffaf43719 100644 (file)
@@ -23,7 +23,8 @@ make_vector__ (int k)
 {
   SCM v = alloc (k);
   SCM x = make_cell__ (TVECTOR, k, v);
-  for (int i=0; i<k; i++) g_cells[v+i] = g_cells[vector_entry (cell_unspecified)];
+  for (int i=0; i<k; i++)
+    g_cells[v+i] = g_cells[vector_entry (cell_unspecified)];
   return x;
 }
 
@@ -90,12 +91,12 @@ SCM
 vector_to_list (SCM v)
 {
   SCM x = cell_nil;
-  for (int i = 0; i < LENGTH (v); i++)
+  for (int i = LENGTH (v); i; i--)
     {
-      SCM e = VECTOR (v)+i;
+      SCM e = VECTOR (v)+i-1;
       if (TYPE (e) == TREF)
         e = REF (e);
-      x = append2 (x, cons (e, cell_nil));
+      x = cons (e, x);
     }
   return x;
 }