emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 3f4a9a5: Do not pdump user-defined hashtabs


From: Paul Eggert
Subject: [Emacs-diffs] master 3f4a9a5: Do not pdump user-defined hashtabs
Date: Mon, 22 Jul 2019 21:34:21 -0400 (EDT)

branch: master
commit 3f4a9a5a3b267fbc13a8bebc4295bbfadd6ff03e
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    Do not pdump user-defined hashtabs
    
    * src/pdumper.c (dump_hash_table_stable_p):
    Signal an error if a hash table has user-defined tests (Bug#36769).
    * src/fns.c (hashfn_user_defined): Now extern.
---
 src/fns.c     | 2 +-
 src/lisp.h    | 1 +
 src/pdumper.c | 2 ++
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/fns.c b/src/fns.c
index 8eefa7c..734a2e2 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -4017,7 +4017,7 @@ hashfn_eql (Lisp_Object key, struct Lisp_Hash_Table *h)
 /* Given HT, return a hash code for KEY which uses a user-defined
    function to compare keys.  */
 
-static Lisp_Object
+Lisp_Object
 hashfn_user_defined (Lisp_Object key, struct Lisp_Hash_Table *h)
 {
   Lisp_Object args[] = { h->test.user_hash_function, key };
diff --git a/src/lisp.h b/src/lisp.h
index 9d37629..e96fcfe 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -3606,6 +3606,7 @@ EMACS_UINT hash_string (char const *, ptrdiff_t);
 EMACS_UINT sxhash (Lisp_Object, int);
 Lisp_Object hashfn_eql (Lisp_Object, struct Lisp_Hash_Table *);
 Lisp_Object hashfn_equal (Lisp_Object, struct Lisp_Hash_Table *);
+Lisp_Object hashfn_user_defined (Lisp_Object, struct Lisp_Hash_Table *);
 Lisp_Object make_hash_table (struct hash_table_test, EMACS_INT, float, float,
                              Lisp_Object, bool);
 ptrdiff_t hash_lookup (struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object *);
diff --git a/src/pdumper.c b/src/pdumper.c
index 2abac80..cda8b40 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -2628,6 +2628,8 @@ dump_vectorlike_generic (struct dump_context *ctx,
 static bool
 dump_hash_table_stable_p (const struct Lisp_Hash_Table *hash)
 {
+  if (hash->test.hashfn == hashfn_user_defined)
+    error ("cannot dump hash tables with user-defined tests");  /* Bug#36769 */
   bool is_eql = hash->test.hashfn == hashfn_eql;
   bool is_equal = hash->test.hashfn == hashfn_equal;
   ptrdiff_t size = HASH_TABLE_SIZE (hash);



reply via email to

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