mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-29 19:30:36 +02:00
Implement hashing for keywords, i.e. (hash #:x ...)
Add keyword handling to (hash ...). Previously it would just return the same value for all keywords. * libguile/hash.c (scm_raw_ihash): Add scm_tc7_keyword case. * libguile/keywords.h (SCM_I_KEYWORD_HASH): New macro.
This commit is contained in:
parent
cc30168878
commit
8b3cad6183
2 changed files with 5 additions and 0 deletions
|
@ -35,6 +35,7 @@
|
|||
#include "chars.h"
|
||||
#include "foreign.h"
|
||||
#include "gsubr.h"
|
||||
#include "keywords.h"
|
||||
#include "numbers.h"
|
||||
#include "pairs.h"
|
||||
#include "ports.h"
|
||||
|
@ -307,6 +308,8 @@ scm_raw_ihash (SCM obj, size_t depth)
|
|||
return scm_i_string_hash (obj);
|
||||
case scm_tc7_symbol:
|
||||
return scm_i_symbol_hash (obj);
|
||||
case scm_tc7_keyword:
|
||||
return SCM_I_KEYWORD_HASH (obj);
|
||||
case scm_tc7_pointer:
|
||||
return scm_raw_ihashq ((uintptr_t) SCM_POINTER_VALUE (obj));
|
||||
case scm_tc7_wvect:
|
||||
|
|
|
@ -60,6 +60,8 @@ SCM_API void
|
|||
scm_c_bind_keyword_arguments (const char *subr, SCM rest,
|
||||
scm_t_keyword_arguments_flags flags, ...);
|
||||
|
||||
#define SCM_I_KEYWORD_HASH(x) scm_i_symbol_hash (SCM_CELL_OBJECT_1 (x))
|
||||
|
||||
SCM_INTERNAL void scm_init_keywords (void);
|
||||
|
||||
#endif /* SCM_KEYWORDS_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue