]> git.eshelyaron.com Git - emacs.git/commitdiff
(print): Handle chartables and boolvectors.
authorRichard M. Stallman <rms@gnu.org>
Sat, 7 Oct 1995 22:02:20 +0000 (22:02 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 7 Oct 1995 22:02:20 +0000 (22:02 +0000)
(print_boolvector): New function.

src/print.c

index fc3411fe290e84bb132520258ed9e074c5abe4ee..9beac5b621cdf7e461ffb5d839eadcab7a14c8a7 100644 (file)
@@ -294,7 +294,8 @@ strout (ptr, size, printcharfun)
 }
 
 /* Print the contents of a string STRING using PRINTCHARFUN.
-   It isn't safe to use strout, because printing one char can relocate.  */
+   It isn't safe to use strout in many cases,
+   because printing one char can relocate.  */
 
 print_string (string, printcharfun)
      Lisp_Object string;
@@ -926,6 +927,47 @@ print (obj, printcharfun, escapeflag)
          else
            print_string (XPROCESS (obj)->name, printcharfun);
        }
+      else if (BOOL_VECTOR_P (obj))
+       {
+         register int i;
+         register unsigned char c;
+         struct gcpro gcpro1;
+         int bits_per_char = INTBITS / sizeof (int);
+         int size_in_chars
+           = (XBOOL_VECTOR (obj)->size + bits_per_char) / bits_per_char;
+
+         GCPRO1 (obj);
+
+         PRINTCHAR ('#');
+         PRINTCHAR ('&');
+         sprintf (buf, "%d", XBOOL_VECTOR (obj)->size);
+         strout (buf, -1, printcharfun);
+         PRINTCHAR ('\"');
+         for (i = 0; i < size_in_chars; i++)
+           {
+             QUIT;
+             c = XBOOL_VECTOR (obj)->data[i];
+             if (c == '\n' && print_escape_newlines)
+               {
+                 PRINTCHAR ('\\');
+                 PRINTCHAR ('n');
+               }
+             else if (c == '\f' && print_escape_newlines)
+               {
+                 PRINTCHAR ('\\');
+                 PRINTCHAR ('f');
+               }
+             else
+               {
+                 if (c == '\"' || c == '\\')
+                   PRINTCHAR ('\\');
+                 PRINTCHAR (c);
+               }
+           }
+         PRINTCHAR ('\"');
+
+         UNGCPRO;
+       }
       else if (SUBRP (obj))
        {
          strout ("#<subr ", -1, printcharfun);
@@ -983,6 +1025,15 @@ print (obj, printcharfun, escapeflag)
              PRINTCHAR ('#');
              size &= PSEUDOVECTOR_SIZE_MASK;
            }
+         if (CHAR_TABLE_P (obj))
+           {
+             /* We print a char-table as if it were a vector,
+                lumping the parent and default slots in with the
+                character slots.  But we add #^ as a prefix.  */
+             PRINTCHAR ('#');
+             PRINTCHAR ('^');
+             size &= PSEUDOVECTOR_SIZE_MASK;
+           }
          if (size & PSEUDOVECTOR_FLAG)
            goto badtype;