core: Add gc-debug for stack array.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 19 Oct 2018 19:23:17 +0000 (21:23 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 19 Oct 2018 19:23:17 +0000 (21:23 +0200)
* src/gc.c (gc_debug): New function.

src/gc.c

index fc2cd5c38dae60fadc39e8b4c13874405d1762dd..452354da254754f92d81d02e1032e36353151a00 100644 (file)
--- a/src/gc.c
+++ b/src/gc.c
@@ -232,3 +232,77 @@ gc ()
       eputs ("\n");
     }
 }
+
+SCM
+gc_debug ()
+{
+  r0 = MAKE_NUMBER (5);
+  r1 = MAKE_NUMBER (4);
+  r2 = MAKE_NUMBER (3);
+  r3 = MAKE_NUMBER (2);
+
+  gc_push_frame ();
+  for (long i=g_stack; i<STACK_SIZE; i++)
+    {
+      long c = g_stack_array[i];
+      eputs ("stack["); eputs (itoa (i-STACK_SIZE)); eputs ("]: "); eputs (itoa (c));
+      int t = TYPE (c);
+      eputs (" ");
+      eputs (itoa (t));
+      if (t == TSYMBOL || t == TSPECIAL || t == TNUMBER)
+        {
+          eputs (" ");
+          write_error_ (c);
+        }
+      eputs ("\n");
+    }
+
+  gc_ ();
+
+  eputs ("\n");
+  for (long i=g_stack; i<STACK_SIZE; i++)
+    {
+      long c = g_stack_array[i];
+      eputs ("stack["); eputs (itoa (i-STACK_SIZE)); eputs ("]: "); eputs (itoa (c));
+      int t = TYPE (c);
+      eputs (" ");
+      eputs (itoa (t));
+      if (t == TSYMBOL || t == TSPECIAL || t == TNUMBER)
+        {
+          eputs (" ");
+          write_error_ (c);
+        }
+      if (t == TBROKEN_HEART)
+        {
+          eputs (" ");
+          c = g_cells[c].car;
+
+          eputs ("=> "); eputs (itoa (c));
+          int t = TYPE (c);
+          eputs (" ");
+          eputs (itoa (t));
+          if (t == TSYMBOL || t == TSPECIAL || t == TNUMBER)
+            {
+              eputs (" ");
+              write_error_ (c);
+            }
+          // if (t == TBROKEN_HEART)
+          //   {
+          //     eputs (" ");
+          //     c = g_cells[c].car;
+
+          //     eputs ("=> "); eputs (itoa (c));
+          //     int t = TYPE (c);
+          //     eputs (" ");
+          //     eputs (itoa (t));
+          //     if (t == TSYMBOL || t == TSPECIAL || t == TNUMBER)
+          //       {
+          //         eputs (" ");
+          //         write_error_ (c);
+          //       }
+          //   }
+        }
+      eputs ("\n");
+    }
+  gc_pop_frame ();
+}