comparison src/frame-msw.c @ 5191:71ee43b8a74d

Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API tests/ChangeLog addition: 2010-04-05 Aidan Kehoe <kehoea@parhasard.net> * automated/hash-table-tests.el: Test the new built-in #'equalp hash table test. Test #'define-hash-table-test. * automated/lisp-tests.el: When asserting that two objects are #'equalp, also assert that their #'equalp-hash is identical. man/ChangeLog addition: 2010-04-03 Aidan Kehoe <kehoea@parhasard.net> * lispref/hash-tables.texi (Introduction to Hash Tables): Document that we now support #'equalp as a hash table test by default, and mention #'define-hash-table-test. (Working With Hash Tables): Document #'define-hash-table-test. src/ChangeLog addition: 2010-04-05 Aidan Kehoe <kehoea@parhasard.net> * elhash.h: * elhash.c (struct Hash_Table_Test, lisp_object_eql_equal) (lisp_object_eql_hash, lisp_object_equal_equal) (lisp_object_equal_hash, lisp_object_equalp_hash) (lisp_object_equalp_equal, lisp_object_general_hash) (lisp_object_general_equal, Feq_hash, Feql_hash, Fequal_hash) (Fequalp_hash, define_hash_table_test, Fdefine_hash_table_test) (init_elhash_once_early, mark_hash_table_tests, string_equalp_hash): * glyphs.c (vars_of_glyphs): Add a new hash table test in C, #'equalp. Make it possible to specify new hash table tests with functions define_hash_table_test, #'define-hash-table-test. Use define_hash_table_test() in glyphs.c. Expose the hash functions (besides that used for #'equal) to Lisp, for people writing functions to be used with #'define-hash-table-test. Call define_hash_table_test() very early in temacs, to create the built-in hash table tests. * ui-gtk.c (emacs_gtk_boxed_hash): * specifier.h (struct specifier_methods): * specifier.c (specifier_hash): * rangetab.c (range_table_entry_hash, range_table_hash): * number.c (bignum_hash, ratio_hash, bigfloat_hash): * marker.c (marker_hash): * lrecord.h (struct lrecord_implementation): * keymap.c (keymap_hash): * gui.c (gui_item_id_hash, gui_item_hash): * glyphs.c (image_instance_hash, glyph_hash): * glyphs-x.c (x_image_instance_hash): * glyphs-msw.c (mswindows_image_instance_hash): * glyphs-gtk.c (gtk_image_instance_hash): * frame-msw.c (mswindows_set_title_from_ibyte): * fontcolor.c (color_instance_hash, font_instance_hash): * fontcolor-x.c (x_color_instance_hash): * fontcolor-tty.c (tty_color_instance_hash): * fontcolor-msw.c (mswindows_color_instance_hash): * fontcolor-gtk.c (gtk_color_instance_hash): * fns.c (bit_vector_hash): * floatfns.c (float_hash): * faces.c (face_hash): * extents.c (extent_hash): * events.c (event_hash): * data.c (weak_list_hash, weak_box_hash): * chartab.c (char_table_entry_hash, char_table_hash): * bytecode.c (compiled_function_hash): * alloc.c (vector_hash): Change the various object hash methods to take a new EQUALP parameter, hashing appropriately for #'equalp if it is true.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 05 Apr 2010 13:03:35 +0100
parents a9c41067dd88
children c096d8051f89 308d34e9f07d
comparison
equal deleted inserted replaced
5190:1c1d8843de5e 5191:71ee43b8a74d
188 /* Misc frame stuff */ 188 /* Misc frame stuff */
189 FRAME_MSWINDOWS_MENU_HASH_TABLE (f) = Qnil; 189 FRAME_MSWINDOWS_MENU_HASH_TABLE (f) = Qnil;
190 #ifdef HAVE_TOOLBARS 190 #ifdef HAVE_TOOLBARS
191 /* EQ not EQUAL or we will get QUIT crashes, see below. */ 191 /* EQ not EQUAL or we will get QUIT crashes, see below. */
192 FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f) = 192 FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f) =
193 make_lisp_hash_table (50, HASH_TABLE_NON_WEAK, HASH_TABLE_EQ); 193 make_lisp_hash_table (50, HASH_TABLE_NON_WEAK, Qeq);
194 #endif 194 #endif
195 /* hashtable of instantiated glyphs on the frame. [[ Make them EQ because 195 /* hashtable of instantiated glyphs on the frame. [[ Make them EQ because
196 we only use ints as keys. Otherwise we run into stickiness in 196 we only use ints as keys. Otherwise we run into stickiness in
197 redisplay because internal_equal() can QUIT. See 197 redisplay because internal_equal() can QUIT. See
198 enter_redisplay_critical_section(). ]] -- probably not true any more, 198 enter_redisplay_critical_section(). ]] -- probably not true any more,
199 now that we have internal_equal_trapping_problems(). --ben */ 199 now that we have internal_equal_trapping_problems(). --ben */
200 FRAME_MSWINDOWS_WIDGET_HASH_TABLE1 (f) = 200 FRAME_MSWINDOWS_WIDGET_HASH_TABLE1 (f) =
201 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ); 201 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, Qeq);
202 FRAME_MSWINDOWS_WIDGET_HASH_TABLE2 (f) = 202 FRAME_MSWINDOWS_WIDGET_HASH_TABLE2 (f) =
203 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ); 203 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, Qeq);
204 FRAME_MSWINDOWS_WIDGET_HASH_TABLE3 (f) = 204 FRAME_MSWINDOWS_WIDGET_HASH_TABLE3 (f) =
205 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ); 205 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, Qeq);
206 /* Will initialize these in WM_SIZE handler. We cannot do it now, 206 /* Will initialize these in WM_SIZE handler. We cannot do it now,
207 because we do not know what is CW_USEDEFAULT height and width */ 207 because we do not know what is CW_USEDEFAULT height and width */
208 FRAME_WIDTH (f) = 0; 208 FRAME_WIDTH (f) = 0;
209 FRAME_HEIGHT (f) = 0; 209 FRAME_HEIGHT (f) = 0;
210 FRAME_PIXWIDTH (f) = 0; 210 FRAME_PIXWIDTH (f) = 0;