core: Prepare gc.c for mescc, non-POSIX_SOURCE.
[mes.git] / gc.c
diff --git a/gc.c b/gc.c
index d257541d1a0b51bfad21b4c9a03033b5f6ec770e..2f197eda4d16b949027b07e030403ad3a0def1ce 100644 (file)
--- a/gc.c
+++ b/gc.c
 SCM
 gc_up_arena () ///((internal))
 {
+#if _POSIX_SOURCE
   ARENA_SIZE *= 2;
   void *p = realloc (g_cells-1, 2*ARENA_SIZE*sizeof(struct scm));
+#else
+  ARENA_SIZE = ARENA_SIZE * 2;
+  //p = realloc (g_cells-1, 2*ARENA_SIZE*sizeof(struct scm));
+  int size = ARENA_SIZE * 2;
+  size = size * 12;
+  char *p = size;
+  p = realloc (g_cells-1, size);
+  g_cells = p;
+#endif
+
+#if _POSIX_SOURCE
   if (!p) error (cell_symbol_system_error, cons (MAKE_STRING (cstring_to_list (strerror (errno))), MAKE_NUMBER (g_free)));
   g_cells = (struct scm*)p;
   g_cells++;
+#else
+  //assert (p);
+  //g_cells = (struct scm*)p;
+#endif
   gc_init_news ();
+  return 0;
 }
 
 SCM
@@ -35,7 +52,16 @@ gc_flip () ///((internal))
   struct scm *cells = g_cells;
   g_cells = g_news;
   g_news = cells;
+#if _POSIX_SOURCE
   if (g_debug) fprintf (stderr, " => jam[%d]\n", g_free);
+#else
+  if (g_debug)
+    {
+      eputs (" => jam[");
+      eputs (itoa (g_free));
+      eputs ("]\n");
+    }
+#endif
   return g_stack;
 }
 
@@ -47,12 +73,12 @@ gc_copy (SCM old) ///((internal))
   g_news[new] = g_cells[old];
   if (NTYPE (new) == TVECTOR)
     {
-      g_news[new].vector = g_free;
+      NVECTOR (new) = g_free;
       for (int i=0; i<LENGTH (old); i++)
         g_news[g_free++] = g_cells[VECTOR (old)+i];
     }
-  g_cells[old].type = TBROKEN_HEART;
-  g_cells[old].car = new;
+  TYPE (old) = TBROKEN_HEART;
+  CAR (old) = new;
   return new;
 }
 
@@ -108,7 +134,16 @@ gc_loop (SCM scan) ///((internal))
 SCM
 gc ()
 {
+#if _POSIX_SOURCE
   if (g_debug) fprintf (stderr, "***gc[%d]...", g_free);
+#else
+  if (g_debug)
+    {
+      eputs ("***gc[");
+      eputs (itoa (g_free));
+      eputs ("]...");
+    }
+#endif
   g_free = 1;
   if (g_cells < g_news && ARENA_SIZE < MAX_ARENA_SIZE) gc_up_arena ();
   for (int i=g_free; i<g_symbol_max; i++)
@@ -116,7 +151,16 @@ gc ()
   make_tmps (g_news);
   g_symbols = gc_copy (g_symbols);
   SCM new = gc_copy (g_stack);
-  if (g_debug) fprintf (stderr, "new=%d\n", new, g_stack);
+#if _POSIX_SOURCE
+  if (g_debug) fprintf (stderr, "new=%d\n", new);
+#else
+  if (g_debug)
+    {
+      eputs ("new=");
+      eputs (itoa (new));
+      eputs ("\n");
+    }
+#endif
   g_stack = new;
   return gc_loop (1);
 }