Nicer closure and builtin procedure display.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Dec 2016 18:13:31 +0000 (19:13 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Dec 2016 18:13:31 +0000 (19:13 +0100)
* display.c (display): Show closure as procedure with formal
  parameters.  Display ariry as fake parameters with builtin.

display.c

index 0c0e03d4292cc22997cfd437bd6d43a01597036d..10b8417fdcc6094f599f9fb9ad5a0e19271e4b32 100644 (file)
--- a/display.c
+++ b/display.c
@@ -78,6 +78,12 @@ display_helper (FILE* f, SCM x, bool cont, char const *sep, bool quote)
     case NUMBER: fprintf (f, "%d", VALUE (x)); break;
     case PAIR:
       {
+        if (car (x) == cell_closure) {
+          fprintf (f, "#<procedure #f ");
+          display_ (f, (caddr (x)));
+          fprintf (f, ">");
+          return cell_unspecified;
+        }
         if (car (x) == cell_circular) {
           fprintf (f, "(*circ* . #-1#)");
           return cell_unspecified;
@@ -127,6 +133,15 @@ display_helper (FILE* f, SCM x, bool cont, char const *sep, bool quote)
           fprintf (f, "%s", NAME (x));
         else
           display_ (f, STRING (x));
+        fprintf (f, " ");
+        switch (FUNCTION (x).arity)
+          {
+          case -1: fprintf (f, "(. x)"); break;
+          case 0: fprintf (f, "()"); break;
+          case 1: fprintf (f, "(x)"); break;
+          case 2: fprintf (f, "(x y)"); break;
+          case 3: fprintf (f, "(x y z)"); break;
+          }
         fprintf (f, ">");
         break;
       }