changeset 47526:0055228ad95f

(print): Clear out the unused parts of Vprint_number_table. (syms_of_print): Doc fix for `print-number-table'.
author Richard M. Stallman <rms@gnu.org>
date Wed, 18 Sep 2002 15:57:39 +0000
parents 2455f742ffba
children 7d7d818ed852
files src/print.c
diffstat 1 files changed, 22 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/print.c	Wed Sep 18 15:55:11 2002 +0000
+++ b/src/print.c	Wed Sep 18 15:57:39 2002 +0000
@@ -1169,21 +1169,30 @@
   if (!NILP (Vprint_gensym) || !NILP (Vprint_circle))
     {
       int i, start, index;
-      /* Construct Vprint_number_table.  */
       start = index = print_number_index;
+      /* Construct Vprint_number_table.
+	 This increments print_number_index for the objects added.  */
       print_preprocess (obj);
+
       /* Remove unnecessary objects, which appear only once in OBJ;
-	 that is, whose status is Qnil.  */
+	 that is, whose status is Qnil.  Compactify the necessary objects.  */
       for (i = start; i < print_number_index; i++)
 	if (!NILP (PRINT_NUMBER_STATUS (Vprint_number_table, i)))
 	  {
 	    PRINT_NUMBER_OBJECT (Vprint_number_table, index)
 	      = PRINT_NUMBER_OBJECT (Vprint_number_table, i);
-	    /* Reset the status field for the next print step.  Now this
-	       field means whether the object has already been printed.  */
-	    PRINT_NUMBER_STATUS (Vprint_number_table, index) = Qnil;
 	    index++;
 	  }
+
+      /* Clear out objects outside the active part of the table.  */
+      for (i = index; i < print_number_index; i++)
+	PRINT_NUMBER_OBJECT (Vprint_number_table, i) = Qnil;
+
+      /* Reset the status field for the next print step.  Now this
+	 field means whether the object has already been printed.  */
+      for (i = start; i < print_number_index; i++)
+	PRINT_NUMBER_STATUS (Vprint_number_table, i) = Qnil;
+
       print_number_index = index;
     }
 
@@ -2087,10 +2096,14 @@
   DEFVAR_LISP ("print-number-table", &Vprint_number_table,
 	       doc: /* A vector used internally to produce `#N=' labels and `#N#' references.
 The Lisp printer uses this vector to detect Lisp objects referenced more
-than once.  When `print-continuous-numbering' is bound to t, you should
-probably also bind `print-number-table' to nil.  This ensures that the
-value of `print-number-table' can be garbage-collected once the printing
-is done.  */);
+than once.
+
+When you bind `print-continuous-numbering' to t, you should probably
+also bind `print-number-table' to nil.  This ensures that the value of
+`print-number-table' can be garbage-collected once the printing is
+done.  If all elements of `print-number-table' are nil, it means that
+the printing done so far has not found any shared structure or objects
+that need to be recorded in the table.  */);
   Vprint_number_table = Qnil;
 
   /* prin1_to_string_buffer initialized in init_buffer_once in buffer.c */