Mercurial > emacs
diff src/print.c @ 13147:bd9ff4ee6cd4
(print): Handle chartables and boolvectors.
(print_boolvector): New function.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 07 Oct 1995 22:02:20 +0000 |
parents | 029baa39289d |
children | 851452bdbc3f |
line wrap: on
line diff
--- a/src/print.c Sat Oct 07 22:01:39 1995 +0000 +++ b/src/print.c Sat Oct 07 22:02:20 1995 +0000 @@ -294,7 +294,8 @@ } /* 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 @@ 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 @@ 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;