* src/print.c (PRINT_CIRCLE_CANDIDATE_P): New macro.

(print_preprocess, print_object): New macro to fix last change.
This commit is contained in:
Stefan Monnier 2011-03-16 13:34:26 -04:00
parent 35ac2a97f5
commit fb103ca9a7
2 changed files with 15 additions and 12 deletions

View file

@ -1,5 +1,8 @@
2011-03-16 Stefan Monnier <monnier@iro.umontreal.ca>
* print.c (PRINT_CIRCLE_CANDIDATE_P): New macro.
(print_preprocess, print_object): New macro to fix last change.
* print.c (print_preprocess): Don't forget font objects.
2011-03-16 Juanma Barranquero <lekktu@gmail.com>

View file

@ -1173,6 +1173,16 @@ print (Lisp_Object obj, register Lisp_Object printcharfun, int escapeflag)
print_object (obj, printcharfun, escapeflag);
}
#define PRINT_CIRCLE_CANDIDATE_P(obj) \
(STRINGP (obj) || CONSP (obj) \
|| (VECTORLIKEP (obj) \
&& (VECTORP (obj) || COMPILEDP (obj) \
|| CHAR_TABLE_P (obj) || SUB_CHAR_TABLE_P (obj) \
|| HASH_TABLE_P (obj) || FONTP (obj))) \
|| (! NILP (Vprint_gensym) \
&& SYMBOLP (obj) \
&& !SYMBOL_INTERNED_P (obj)))
/* Construct Vprint_number_table according to the structure of OBJ.
OBJ itself and all its elements will be added to Vprint_number_table
recursively if it is a list, vector, compiled function, char-table,
@ -1207,12 +1217,7 @@ print_preprocess (Lisp_Object obj)
halftail = obj;
loop:
if (STRINGP (obj) || CONSP (obj) || VECTORP (obj)
|| COMPILEDP (obj) || CHAR_TABLE_P (obj) || SUB_CHAR_TABLE_P (obj)
|| HASH_TABLE_P (obj) || FONTP (obj)
|| (! NILP (Vprint_gensym)
&& SYMBOLP (obj)
&& !SYMBOL_INTERNED_P (obj)))
if (PRINT_CIRCLE_CANDIDATE_P (obj))
{
if (!HASH_TABLE_P (Vprint_number_table))
{
@ -1389,12 +1394,7 @@ print_object (Lisp_Object obj, register Lisp_Object printcharfun, int escapeflag
error ("Apparently circular structure being printed");
/* Detect circularities and truncate them. */
if (STRINGP (obj) || CONSP (obj) || VECTORP (obj)
|| COMPILEDP (obj) || CHAR_TABLE_P (obj) || SUB_CHAR_TABLE_P (obj)
|| HASH_TABLE_P (obj)
|| (! NILP (Vprint_gensym)
&& SYMBOLP (obj)
&& !SYMBOL_INTERNED_P (obj)))
if (PRINT_CIRCLE_CANDIDATE_P (obj))
{
if (NILP (Vprint_circle) && NILP (Vprint_gensym))
{