]> git.eshelyaron.com Git - emacs.git/commitdiff
(STRING_BYTES) [GC_CHECK_STRING_BYTES]: Call
authorGerd Moellmann <gerd@gnu.org>
Tue, 9 Jan 2001 20:11:40 +0000 (20:11 +0000)
committerGerd Moellmann <gerd@gnu.org>
Tue, 9 Jan 2001 20:11:40 +0000 (20:11 +0000)
function string_bytes.
(GC_CHECK_STRING_BYTES): Moved here from alloc.c.

src/ChangeLog
src/lisp.h

index 7a36b02cd67b26b7ec944c8b922674a1106fe8ff..0021ec4298b5e26b77e1f8e8d7e8775801fa12d7 100644 (file)
@@ -1,5 +1,19 @@
 2001-01-09  Gerd Moellmann  <gerd@gnu.org>
 
+       * lisp.h (STRING_BYTES) [GC_CHECK_STRING_BYTES]: Call
+       function string_bytes.
+       (GC_CHECK_STRING_BYTES): Moved here from alloc.c.
+
+       * alloc.c (CHECK_STRING_BYTES) [GC_CHECK_STRING_BYTES]: New macro.
+       (check_sblock, string_bytes) [GC_CHECK_STRING_BYTES]: New functions.
+       (check_string_bytes) [GC_CHECK_STRING_BYTES]: Add parameter ALL_P.
+       (allocate_string) [GC_CHECK_STRING_BYTES]: Always check strings in
+       the current sblock.
+       (mark_object) [GC_CHECK_STRING_BYTES]: Use CHECK_STRING_BYTES.
+       (gc_sweep) [GC_CHECK_STRING_BYTES]: Call check_string_bytes
+       after sweeping strings, and at the end.
+       (GC_CHECK_STRING_BYTES): Moved to lisp.h.
+
        * alloc.c (Fgarbage_collect): Use a record_unwind_protect to
        ensure that pop_message is called.
 
index f2096a5f616a5216f0d9653c95f887f810ed5eea..b1951ea4365e88c9bd6bc60df0969b358a8b16fa 100644 (file)
@@ -26,6 +26,12 @@ Boston, MA 02111-1307, USA.  */
 #define P_(proto) ()
 #endif
 
+/* Define this temporarily to hunt a bug.  If defined, the size of
+   strings is redundantly recorded in sdata structures so that it can
+   be compared to the sizes recorded in Lisp strings.  */
+
+#define GC_CHECK_STRING_BYTES 1
+
 
 /* These are default choices for the types to use.  */
 #ifdef _LP64
@@ -620,9 +626,20 @@ struct Lisp_Cons
   (XSTRING (STR)->size_byte >= 0)
 
 /* Return the length in bytes of STR.  */
+
+#ifdef GC_CHECK_STRING_BYTES
+
+struct Lisp_String;
+extern int string_bytes P_ ((struct Lisp_String *));
+#define STRING_BYTES(S) string_bytes ((S))
+
+#else /* not GC_CHECK_STRING_BYTES */
+
 #define STRING_BYTES(STR)  \
   ((STR)->size_byte < 0 ? (STR)->size : (STR)->size_byte)
 
+#endif /* not GC_CHECK_STRING_BYTES */
+
 /* Set the length in bytes of STR.  */
 #define SET_STRING_BYTES(STR, SIZE)  ((STR)->size_byte = (SIZE))