mes: Single environment lookup for variables, SICP chapter 3.
[mes.git] / src / gc.c
index 2e8fef77a184711304d09bddd774714d1d903f89..c9539b95e0fad0677981d86b4e6f23de2dd9fb52 100644 (file)
--- a/src/gc.c
+++ b/src/gc.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * Mes --- Maxwell Equations of Software
- * Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+ * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
  *
  * This file is part of Mes.
  *
@@ -18,6 +18,8 @@
  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <errno.h>
+
 SCM
 gc_up_arena () ///((internal))
 {
@@ -100,7 +102,8 @@ gc_loop (SCM scan) ///((internal))
           || scan == 1 // null
           || NTYPE (scan) == TSPECIAL
           || NTYPE (scan) == TSTRING
-          || NTYPE (scan) == TSYMBOL)
+          || NTYPE (scan) == TSYMBOL
+          || NTYPE (scan) == TVARIABLE)
         {
           SCM car = gc_copy (g_news[scan].car);
           gc_relocate_car (scan, car);
@@ -109,7 +112,8 @@ gc_loop (SCM scan) ///((internal))
            || NTYPE (scan) == TCONTINUATION
            || NTYPE (scan) == TMACRO
            || NTYPE (scan) == TPAIR
-           || NTYPE (scan) == TVALUES)
+           || NTYPE (scan) == TVALUES
+           || NTYPE (scan) == TVARIABLE)
           && g_news[scan].cdr) // allow for 0 terminated list of symbols
         {
           SCM cdr = gc_copy (g_news[scan].cdr);
@@ -131,7 +135,8 @@ gc_check ()
 SCM
 gc ()
 {
-  if (g_debug == 1) eputs (".");
+  if (g_debug == 1)
+    eputs (".");
   if (g_debug > 1)
     {
       eputs (";;; gc[");
@@ -141,11 +146,13 @@ gc ()
       eputs ("]...");
     }
   g_free = 1;
-  if (g_cells < g_news && ARENA_SIZE < MAX_ARENA_SIZE) gc_up_arena ();
+  if (g_cells < g_news && ARENA_SIZE < MAX_ARENA_SIZE)
+    gc_up_arena ();
   for (int i=g_free; i<g_symbol_max; i++)
     gc_copy (i);
   make_tmps (g_news);
   g_symbols = gc_copy (g_symbols);
+  g_macros = gc_copy (g_macros);
   SCM new = gc_copy (g_stack);
   if (g_debug > 1)
     {