summaryrefslogtreecommitdiffstats
path: root/hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/hash.c b/hash.c
index 272e1e2f..6babca4a 100644
--- a/hash.c
+++ b/hash.c
@@ -1195,6 +1195,20 @@ val hash_from_pairs_v(val pairs, struct args *hashv_args)
return hash_construct(args_get_list(hashv_args), pairs);
}
+val hash_from_alist_v(val alist, struct args *hashv_args)
+{
+ val hash = hashv(hashv_args);
+
+ alist = nullify(alist);
+
+ for (; alist; alist = cdr(alist)) {
+ val pair = car(alist);
+ sethash(hash, car(pair), cdr(pair));
+ }
+
+ return hash;
+}
+
val hash_list(val keys, struct args *hashv_args)
{
val hash = hashv(hashv_args);
@@ -1598,6 +1612,7 @@ void hash_init(void)
reg_fun(intern(lit("hash"), user_package), func_n0v(hashv));
reg_fun(hash_construct_s, func_n2(hash_construct));
reg_fun(intern(lit("hash-from-pairs"), user_package), func_n1v(hash_from_pairs_v));
+ reg_fun(intern(lit("hash-from-alist"), user_package), func_n1v(hash_from_alist_v));
reg_fun(intern(lit("hash-list"), user_package), func_n1v(hash_list));
reg_fun(intern(lit("gethash"), user_package), func_n3o(gethash_n, 2));
reg_fun(intern(lit("inhash"), user_package), func_n3o(inhash, 2));