From: Mattias EngdegÄrd Date: Thu, 30 Nov 2023 13:57:51 +0000 (+0100) Subject: ; * src/fns.c (Fmake_hash_table): ensure `test` is a bare symbol X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9577849068182b2c1e997040b92ebef08c57aee3;p=emacs.git ; * src/fns.c (Fmake_hash_table): ensure `test` is a bare symbol (cherry picked from commit 4b7985db11c0fd3a3346a05f271eff9ad687851b) --- diff --git a/src/fns.c b/src/fns.c index d8da8992ce9..b1d152a15a9 100644 --- a/src/fns.c +++ b/src/fns.c @@ -5299,10 +5299,6 @@ in an error. usage: (make-hash-table &rest KEYWORD-ARGS) */) (ptrdiff_t nargs, Lisp_Object *args) { - Lisp_Object test, weak; - bool purecopy; - struct hash_table_test testdesc; - ptrdiff_t i; USE_SAFE_ALLOCA; /* The vector `used' is used to keep track of arguments that @@ -5311,20 +5307,21 @@ usage: (make-hash-table &rest KEYWORD-ARGS) */) memset (used, 0, nargs * sizeof *used); /* See if there's a `:test TEST' among the arguments. */ - i = get_key_arg (QCtest, nargs, args, used); - test = i ? args[i] : Qeql; - if (EQ (test, Qeq)) + ptrdiff_t i = get_key_arg (QCtest, nargs, args, used); + Lisp_Object test = i ? args[i] : Qeql; + if (symbols_with_pos_enabled && SYMBOL_WITH_POS_P (test)) + test = SYMBOL_WITH_POS_SYM (test); + struct hash_table_test testdesc; + if (BASE_EQ (test, Qeq)) testdesc = hashtest_eq; - else if (EQ (test, Qeql)) + else if (BASE_EQ (test, Qeql)) testdesc = hashtest_eql; - else if (EQ (test, Qequal)) + else if (BASE_EQ (test, Qequal)) testdesc = hashtest_equal; else { /* See if it is a user-defined test. */ - Lisp_Object prop; - - prop = Fget (test, Qhash_table_test); + Lisp_Object prop = Fget (test, Qhash_table_test); if (!CONSP (prop) || !CONSP (XCDR (prop))) signal_error ("Invalid hash table test", test); testdesc.name = test; @@ -5336,7 +5333,7 @@ usage: (make-hash-table &rest KEYWORD-ARGS) */) /* See if there's a `:purecopy PURECOPY' argument. */ i = get_key_arg (QCpurecopy, nargs, args, used); - purecopy = i && !NILP (args[i]); + bool purecopy = i && !NILP (args[i]); /* See if there's a `:size SIZE' argument. */ i = get_key_arg (QCsize, nargs, args, used); Lisp_Object size_arg = i ? args[i] : Qnil; @@ -5370,7 +5367,7 @@ usage: (make-hash-table &rest KEYWORD-ARGS) */) /* Look for `:weakness WEAK'. */ i = get_key_arg (QCweakness, nargs, args, used); - weak = i ? args[i] : Qnil; + Lisp_Object weak = i ? args[i] : Qnil; if (EQ (weak, Qt)) weak = Qkey_and_value; if (!NILP (weak) diff --git a/src/lisp.h b/src/lisp.h index 549b51d3f7f..0421cb68c10 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -2387,7 +2387,7 @@ struct Lisp_Hash_Table; struct hash_table_test { - /* Name of the function used to compare keys. */ + /* Function used to compare keys; always a bare symbol. */ Lisp_Object name; /* User-supplied hash function, or nil. */