comparison src/elhash.c @ 5095:cb4f2e1bacc4

merge
author Ben Wing <ben@xemacs.org>
date Thu, 04 Mar 2010 02:46:38 -0600
parents 6afe991b8135
children 7be849cb8828
comparison
equal deleted inserted replaced
5094:ebee7d1e58bd 5095:cb4f2e1bacc4
82 #include "bytecode.h" 82 #include "bytecode.h"
83 #include "elhash.h" 83 #include "elhash.h"
84 #include "opaque.h" 84 #include "opaque.h"
85 85
86 Lisp_Object Qhash_tablep; 86 Lisp_Object Qhash_tablep;
87 static Lisp_Object Qhashtable, Qhash_table; 87 static Lisp_Object Qhashtable, Qhash_table, Qmake_hash_table;
88 static Lisp_Object Qweakness, Qvalue, Qkey_or_value, Qkey_and_value; 88 static Lisp_Object Qweakness, Qvalue, Qkey_or_value, Qkey_and_value;
89 static Lisp_Object Vall_weak_hash_tables; 89 static Lisp_Object Vall_weak_hash_tables;
90 static Lisp_Object Qrehash_size, Qrehash_threshold; 90 static Lisp_Object Qrehash_size, Qrehash_threshold;
91 static Lisp_Object Q_size, Q_test, Q_weakness, Q_rehash_size, Q_rehash_threshold; 91 static Lisp_Object Q_size, Q_test, Q_weakness, Q_rehash_size, Q_rehash_threshold;
92 92
991 991
992 arguments: (&key TEST SIZE REHASH-SIZE REHASH-THRESHOLD WEAKNESS) 992 arguments: (&key TEST SIZE REHASH-SIZE REHASH-THRESHOLD WEAKNESS)
993 */ 993 */
994 (int nargs, Lisp_Object *args)) 994 (int nargs, Lisp_Object *args))
995 { 995 {
996 int i = 0; 996 #ifdef NO_NEED_TO_HANDLE_21_4_CODE
997 Lisp_Object test = Qnil; 997 PARSE_KEYWORDS (Qmake_hash_table, nargs, args, 0, 5,
998 Lisp_Object size = Qnil; 998 (test, size, rehash_size, rehash_threshold, weakness),
999 Lisp_Object rehash_size = Qnil; 999 NULL, weakness = Qunbound), 0);
1000 Lisp_Object rehash_threshold = Qnil; 1000 #else
1001 Lisp_Object weakness = Qnil; 1001 PARSE_KEYWORDS (Qmake_hash_table, nargs, args, 0, 6,
1002 1002 (test, size, rehash_size, rehash_threshold, weakness,
1003 while (i + 1 < nargs) 1003 type), (type = Qunbound, weakness = Qunbound), 0);
1004 { 1004
1005 Lisp_Object keyword = args[i++]; 1005 if (EQ (weakness, Qunbound))
1006 Lisp_Object value = args[i++]; 1006 {
1007 1007 if (EQ (weakness, Qunbound) && !EQ (type, Qunbound))
1008 if (EQ (keyword, Q_test)) test = value; 1008 {
1009 else if (EQ (keyword, Q_size)) size = value; 1009 weakness = type;
1010 else if (EQ (keyword, Q_rehash_size)) rehash_size = value; 1010 }
1011 else if (EQ (keyword, Q_rehash_threshold)) rehash_threshold = value; 1011 else
1012 else if (EQ (keyword, Q_weakness)) weakness = value; 1012 {
1013 else if (EQ (keyword, Q_type))/*obsolete*/ weakness = value; 1013 weakness = Qnil;
1014 else invalid_constant ("Invalid hash table property keyword", keyword); 1014 }
1015 } 1015 }
1016 1016 #endif
1017 if (i < nargs)
1018 sferror ("Hash table property requires a value", args[i]);
1019 1017
1020 #define VALIDATE_VAR(var) \ 1018 #define VALIDATE_VAR(var) \
1021 if (!NILP (var)) hash_table_##var##_validate (Q##var, var, ERROR_ME); 1019 if (!NILP (var)) hash_table_##var##_validate (Q##var, var, ERROR_ME);
1022 1020
1023 VALIDATE_VAR (test); 1021 VALIDATE_VAR (test);
1852 #endif 1850 #endif
1853 1851
1854 DEFSYMBOL_MULTIWORD_PREDICATE (Qhash_tablep); 1852 DEFSYMBOL_MULTIWORD_PREDICATE (Qhash_tablep);
1855 DEFSYMBOL (Qhash_table); 1853 DEFSYMBOL (Qhash_table);
1856 DEFSYMBOL (Qhashtable); 1854 DEFSYMBOL (Qhashtable);
1855 DEFSYMBOL (Qmake_hash_table);
1857 DEFSYMBOL (Qweakness); 1856 DEFSYMBOL (Qweakness);
1858 DEFSYMBOL (Qvalue); 1857 DEFSYMBOL (Qvalue);
1859 DEFSYMBOL (Qkey_or_value); 1858 DEFSYMBOL (Qkey_or_value);
1860 DEFSYMBOL (Qkey_and_value); 1859 DEFSYMBOL (Qkey_and_value);
1861 DEFSYMBOL (Qrehash_size); 1860 DEFSYMBOL (Qrehash_size);