diff options
author | Richard M. Stallman <rms@gnu.org> | 1995-10-07 22:02:20 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1995-10-07 22:02:20 +0000 |
commit | f753610ea638b5ddfbda49bff044e1bc95e87861 (patch) | |
tree | dcfc4a26bfa44edbba2597604beff63ad32c22d0 /src/print.c | |
parent | 9f3d3716d68fd209b868c9a13e2fc68caa1849a8 (diff) | |
download | emacs-f753610ea638b5ddfbda49bff044e1bc95e87861.tar.gz |
(print): Handle chartables and boolvectors.
(print_boolvector): New function.
Diffstat (limited to 'src/print.c')
-rw-r--r-- | src/print.c | 53 |
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; |