emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 6204791: Minor pdumper tweaks


From: Paul Eggert
Subject: [Emacs-diffs] master 6204791: Minor pdumper tweaks
Date: Fri, 26 Jul 2019 02:18:56 -0400 (EDT)

branch: master
commit 62047917282ac523eea3d6442fff88ef46d74f43
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    Minor pdumper tweaks
    
    * src/pdumper.c (dump_hash_table_stable_p):
    Bool vectors and bignums are also stable keys.
    (decode_emacs_reloc, drain_reloc_list, Fdump_emacs_portable):
    (dump_bitset_clear): Simplify use of memset.
---
 src/pdumper.c | 27 ++++++++++++---------------
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/src/pdumper.c b/src/pdumper.c
index ddf44a5..1504f75 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -118,10 +118,10 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 # endif
 #endif
 
-/* We require an architecture in which all pointers are the same size
-   and have the same layout, where pointers are either 32 or 64 bits
-   long, and where bytes have eight bits --- that is, a
-   general-purpose computer made after 1990.  */
+/* Require an architecture in which pointers, ptrdiff_t and intptr_t
+   are the same size and have the same layout, and where bytes have
+   eight bits --- that is, a general-purpose computer made after 1990.
+   Also require Lisp_Object to be at least as wide as pointers.  */
 verify (sizeof (ptrdiff_t) == sizeof (void *));
 verify (sizeof (intptr_t) == sizeof (ptrdiff_t));
 verify (sizeof (void (*) (void)) == sizeof (void *));
@@ -2634,8 +2634,10 @@ dump_hash_table_stable_p (const struct Lisp_Hash_Table 
*hash)
         Lisp_Object key =  HASH_KEY (hash, i);
        bool key_stable = (dump_builtin_symbol_p (key)
                           || FIXNUMP (key)
-                          || (is_equal && STRINGP (key))
-                          || ((is_equal || is_eql) && FLOATP (key)));
+                          || (is_equal
+                              && (STRINGP (key) || BOOL_VECTOR_P (key)))
+                          || ((is_equal || is_eql)
+                              && (FLOATP (key) || BIGNUMP (key))));
         if (!key_stable)
           return false;
       }
@@ -3654,8 +3656,7 @@ dump_check_overlap_dump_reloc (Lisp_Object lreloc_a,
 static struct emacs_reloc
 decode_emacs_reloc (struct dump_context *ctx, Lisp_Object lreloc)
 {
-  struct emacs_reloc reloc;
-  memset (&reloc, 0, sizeof (reloc));
+  struct emacs_reloc reloc = {0};
   ALLOW_IMPLICIT_CONVERSION;
   int type = XFIXNUM (dump_pop (&lreloc));
   DISALLOW_IMPLICIT_CONVERSION;
@@ -3814,8 +3815,7 @@ drain_reloc_list (struct dump_context *ctx,
   *reloc_list = Qnil;
   dump_align_output (ctx, max (alignof (struct dump_reloc),
                               alignof (struct emacs_reloc)));
-  struct dump_table_locator locator;
-  memset (&locator, 0, sizeof (locator));
+  struct dump_table_locator locator = {0};
   locator.offset = ctx->offset;
   for (; !NILP (relocs); locator.nr_entries += 1)
     {
@@ -4025,9 +4025,8 @@ types.  */)
   filename = Fexpand_file_name (filename, Qnil);
   filename = ENCODE_FILE (filename);
 
-  struct dump_context ctx_buf;
+  struct dump_context ctx_buf = {0};
   struct dump_context *ctx = &ctx_buf;
-  memset (ctx, 0, sizeof (*ctx));
   ctx->fd = -1;
 
   ctx->objects_dumped = make_eq_hash_table ();
@@ -4920,9 +4919,7 @@ dump_bitset_set_bit (struct dump_bitset *bitset, size_t 
bit_number)
 static void
 dump_bitset_clear (struct dump_bitset *bitset)
 {
-  int xword_size = sizeof (bitset->bits[0]);
-  if (bitset->number_words)
-    memset (bitset->bits, 0, bitset->number_words * xword_size);
+  memset (bitset->bits, 0, bitset->number_words * sizeof bitset->bits[0]);
 }
 
 struct pdumper_loaded_dump_private



reply via email to

[Prev in Thread] Current Thread [Next in Thread]