summaryrefslogtreecommitdiff
path: root/src/print.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1995-10-07 22:02:20 +0000
committerRichard M. Stallman <rms@gnu.org>1995-10-07 22:02:20 +0000
commitf753610ea638b5ddfbda49bff044e1bc95e87861 (patch)
treedcfc4a26bfa44edbba2597604beff63ad32c22d0 /src/print.c
parent9f3d3716d68fd209b868c9a13e2fc68caa1849a8 (diff)
downloademacs-f753610ea638b5ddfbda49bff044e1bc95e87861.tar.gz
(print): Handle chartables and boolvectors.
(print_boolvector): New function.
Diffstat (limited to 'src/print.c')
-rw-r--r--src/print.c53
1 files changed, 52 insertions, 1 deletions
diff --git a/src/print.c b/src/print.c
index fc3411fe290..9beac5b621c 100644
--- a/src/print.c
+++ b/src/print.c
@@ -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;