mescc: Fix by value assignment from array-of struct entry.
[mes.git] / gc.c
diff --git a/gc.c b/gc.c
index 54c2351a9d2c654a28ed4a7b974d79d48ad32880..6aba0d3fcbc074c15ff6724cfb358baed4cf79a6 100644 (file)
--- a/gc.c
+++ b/gc.c
@@ -53,11 +53,11 @@ gc_flip () ///((internal))
   g_cells = g_news;
   g_news = cells;
 #if _POSIX_SOURCE
-  if (g_debug) fprintf (stderr, " => jam[%d]\n", g_free);
+  if (g_debug) fprintf (stderr, ";;;   => jam[%d]\n", g_free);
 #else
   if (g_debug)
     {
-      eputs (" => jam[");
+      eputs (";;;   => jam[");
       eputs (itoa (g_free));
       eputs ("]\n");
     }
@@ -70,39 +70,17 @@ gc_copy (SCM old) ///((internal))
 {
   if (TYPE (old) == TBROKEN_HEART) return g_cells[old].car;
   SCM new = g_free++;
-#if 0
   g_news[new] = g_cells[old];
-#else
-  SCM y = new;
-  SCM z = old;
-  SCM zz = TYPE (z);
-  NTYPE (y) = zz;
-  zz = CAR (z);
-  NCAR (y) = zz;
-  zz = CDR (z);
-  NCDR (y) = zz;
-#endif
   if (NTYPE (new) == TVECTOR)
     {
       NVECTOR (new) = g_free;
       for (int i=0; i<LENGTH (old); i++)
-#if 0
-        //__GNUC__
+#if __GNUC__
         g_news[g_free++] = g_cells[VECTOR (old)+i];
 #else
       {
-        //eputs ("gc_copy\n");
-        y = g_free;
-        g_free++;
-        z = VECTOR (old);
-        z = z + i;
-        //z = g_cells[z];
-        zz = TYPE (z);
-        NTYPE (y) = zz;
-        zz = CAR (z);
-        NCAR (y) = zz;
-        zz = CDR (z);
-        NCDR (y) = zz;
+        SCM b = VECTOR (old)+i;
+        g_news[g_free++] = g_cells[b];
       }
 #endif
     }
@@ -164,12 +142,14 @@ SCM
 gc ()
 {
 #if _POSIX_SOURCE
-  if (g_debug) fprintf (stderr, "***gc[%d]...", g_free);
+  if (g_debug) fprintf (stderr, ";;; gc[%d:%d]...", g_free, ARENA_SIZE - g_free);
 #else
   if (g_debug)
     {
-      eputs ("***gc[");
+      eputs (";;; gc[");
       eputs (itoa (g_free));
+      eputs (":");
+      eputs (itoa (ARENA_SIZE - g_free));
       eputs ("]...");
     }
 #endif