Mercurial > hg > xemacs-beta
comparison src/elhash.c @ 800:a5954632b187
[xemacs-hg @ 2002-03-31 08:27:14 by ben]
more fixes, first crack at finishing behavior implementation
TODO.ben-mule-21-5: Update.
configure.in: Fix for new error-checking types.
make-mswin-unicode.pl: Don't be fucked up by CRLF. Output code
to force errors when nonintercepted Windows calls issued.
behavior.el, dumped-lisp.el, menubar-items.el: Add support for saving using custom. Load into a dumped XEmacs.
Correct :title to :short-doc in accordance with behavior-defs.el.
Add a submenu under Options for turning on/off behaviors.
cl-macs.el: Properly document `loop'. Fix a minor bug in keymap iteration and
add support for bit-vector iteration.
lisp-mode.el: Rearrange and add items for macro expanding.
menubar-items.el: Document connection between these two functions.
window.el: Port stuff from GNU 21.1.
config.inc.samp, xemacs.mak: Separate out and add new variable for controlling error-checking.
s/windowsnt.h: Use new ERROR_CHECK_ALL; not related to DEBUG_XEMACS.
alloc.c, backtrace.h, buffer.c, buffer.h, bytecode.c, callproc.c, casetab.c, charset.h, chartab.c, cmdloop.c, config.h.in, console-msw.c, console-stream.c, console-tty.c, console.c, console.h, data.c, device-msw.c, device.c, device.h, dired-msw.c, dired.c, dumper.c, editfns.c, eldap.c, elhash.c, emacs.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, events.c, extents.c, faces.c, file-coding.c, file-coding.h, fileio.c, frame-msw.c, frame.c, frame.h, glyphs-gtk.c, glyphs-msw.c, glyphs-shared.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, insdel.c, intl-auto-encap-win32.c, intl-auto-encap-win32.h, intl-encap-win32.c, intl-win32.c, keymap.c, lisp-union.h, lisp.h, lread.c, lrecord.h, lstream.c, lstream.h, macros.c, marker.c, md5.c, menubar-x.c, menubar.c, mule-coding.c, ntproc.c, objects-gtk.c, objects-msw.c, objects-x.c, objects.c, opaque.c, print.c, process-nt.c, process-unix.c, process.c, rangetab.c, redisplay-msw.c, redisplay-output.c, redisplay.c, regex.c, scrollbar-msw.c, select-msw.c, signal.c, specifier.c, specifier.h, symbols.c, sysdep.c, syswindows.h, text.c, text.h, toolbar-msw.c, tooltalk.c, ui-gtk.c, unicode.c, window.c: Redo error-checking macros: ERROR_CHECK_TYPECHECK ->
ERROR_CHECK_TYPES, ERROR_CHECK_CHARBPOS -> ERROR_CHECK_TEXT, add
ERROR_CHECK_DISPLAY, ERROR_CHECK_STRUCTURES. Document these in
config.h.in. Fix code to follow docs. Fix *_checking_assert()
in accordance with new names.
Attempt to fix periodic redisplay crash freeing display line
structures. Add first implementation of sledgehammer redisplay
check.
Redo print_*() to use write_fmt_string(), write_fmt_string_lisp().
Fix bug in md5 handling.
Rename character-to-unicode to char-to-unicode; same for
unicode-to-char{acter}.
Move chartab documentation to `make-char-table'.
Some header cleanup.
Clean up remaining places where nonintercepted Windows calls are
being used.
automated/mule-tests.el: Fix for new Unicode support.
author | ben |
---|---|
date | Sun, 31 Mar 2002 08:30:17 +0000 |
parents | e38acbeb1cae |
children | 2b676dc88c66 |
comparison
equal
deleted
inserted
replaced
799:03d9f9084848 | 800:a5954632b187 |
---|---|
1 /* Implementation of the hash table lisp object type. | 1 /* Implementation of the hash table lisp object type. |
2 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. | 2 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. |
3 Copyright (C) 1995, 1996 Ben Wing. | 3 Copyright (C) 1995, 1996, 2002 Ben Wing. |
4 Copyright (C) 1997 Free Software Foundation, Inc. | 4 Copyright (C) 1997 Free Software Foundation, Inc. |
5 | 5 |
6 This file is part of XEmacs. | 6 This file is part of XEmacs. |
7 | 7 |
8 XEmacs is free software; you can redistribute it and/or modify it | 8 XEmacs is free software; you can redistribute it and/or modify it |
118 !HENTRY_CLEAR_P (probe) || \ | 118 !HENTRY_CLEAR_P (probe) || \ |
119 (probe == entries + size ? \ | 119 (probe == entries + size ? \ |
120 (probe = entries, !HENTRY_CLEAR_P (probe)) : 0); \ | 120 (probe = entries, !HENTRY_CLEAR_P (probe)) : 0); \ |
121 probe++) | 121 probe++) |
122 | 122 |
123 #ifndef ERROR_CHECK_HASH_TABLE | 123 #ifdef ERROR_CHECK_STRUCTURES |
124 # ifdef ERROR_CHECK_TYPECHECK | |
125 # define ERROR_CHECK_HASH_TABLE 1 | |
126 # else | |
127 # define ERROR_CHECK_HASH_TABLE 0 | |
128 # endif | |
129 #endif | |
130 | |
131 #if ERROR_CHECK_HASH_TABLE | |
132 static void | 124 static void |
133 check_hash_table_invariants (Lisp_Hash_Table *ht) | 125 check_hash_table_invariants (Lisp_Hash_Table *ht) |
134 { | 126 { |
135 assert (ht->count < ht->size); | 127 assert (ht->count < ht->size); |
136 assert (ht->count <= ht->rehash_count); | 128 assert (ht->count <= ht->rehash_count); |
333 { | 325 { |
334 write_c_string ("...", printcharfun); | 326 write_c_string ("...", printcharfun); |
335 break; | 327 break; |
336 } | 328 } |
337 print_internal (e->key, printcharfun, 1); | 329 print_internal (e->key, printcharfun, 1); |
338 write_c_string (" ", printcharfun); | 330 write_fmt_string_lisp (printcharfun, " %S", 1, e->value); |
339 print_internal (e->value, printcharfun, 1); | |
340 count++; | 331 count++; |
341 } | 332 } |
342 | 333 |
343 write_c_string (")", printcharfun); | 334 write_c_string (")", printcharfun); |
344 } | 335 } |
345 | 336 |
346 static void | 337 static void |
347 print_hash_table (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) | 338 print_hash_table (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) |
348 { | 339 { |
349 Lisp_Hash_Table *ht = XHASH_TABLE (obj); | 340 Lisp_Hash_Table *ht = XHASH_TABLE (obj); |
350 char buf[128]; | |
351 | 341 |
352 write_c_string (print_readably ? "#s(hash-table" : "#<hash-table", | 342 write_c_string (print_readably ? "#s(hash-table" : "#<hash-table", |
353 printcharfun); | 343 printcharfun); |
354 | 344 |
355 /* These checks have a kludgy look to them, but they are safe. | 345 /* These checks have a kludgy look to them, but they are safe. |
365 abort (); | 355 abort (); |
366 | 356 |
367 if (ht->count || !print_readably) | 357 if (ht->count || !print_readably) |
368 { | 358 { |
369 if (print_readably) | 359 if (print_readably) |
370 sprintf (buf, " size %ld", (long) ht->count); | 360 write_fmt_string (printcharfun, " size %ld", (long) ht->count); |
371 else | 361 else |
372 sprintf (buf, " size %ld/%ld", (long) ht->count, (long) ht->size); | 362 write_fmt_string (printcharfun, " size %ld/%ld", (long) ht->count, |
373 write_c_string (buf, printcharfun); | 363 (long) ht->size); |
374 } | 364 } |
375 | 365 |
376 if (ht->weakness != HASH_TABLE_NON_WEAK) | 366 if (ht->weakness != HASH_TABLE_NON_WEAK) |
377 { | 367 { |
378 sprintf (buf, " weakness %s", | 368 write_fmt_string |
379 (ht->weakness == HASH_TABLE_WEAK ? "key-and-value" : | 369 (printcharfun, " weakness %s", |
380 ht->weakness == HASH_TABLE_KEY_WEAK ? "key" : | 370 (ht->weakness == HASH_TABLE_WEAK ? "key-and-value" : |
381 ht->weakness == HASH_TABLE_VALUE_WEAK ? "value" : | 371 ht->weakness == HASH_TABLE_KEY_WEAK ? "key" : |
382 ht->weakness == HASH_TABLE_KEY_VALUE_WEAK ? "key-or-value" : | 372 ht->weakness == HASH_TABLE_VALUE_WEAK ? "value" : |
383 "you-d-better-not-see-this")); | 373 ht->weakness == HASH_TABLE_KEY_VALUE_WEAK ? "key-or-value" : |
384 write_c_string (buf, printcharfun); | 374 "you-d-better-not-see-this")); |
385 } | 375 } |
386 | 376 |
387 if (ht->count) | 377 if (ht->count) |
388 print_hash_table_data (ht, printcharfun); | 378 print_hash_table_data (ht, printcharfun); |
389 | 379 |
390 if (print_readably) | 380 if (print_readably) |
391 write_c_string (")", printcharfun); | 381 write_c_string (")", printcharfun); |
392 else | 382 else |
393 { | 383 { |
394 sprintf (buf, " 0x%x>", ht->header.uid); | 384 write_fmt_string (printcharfun, " 0x%x>", ht->header.uid); |
395 write_c_string (buf, printcharfun); | |
396 } | 385 } |
397 } | 386 } |
398 | 387 |
399 static void | 388 static void |
400 free_hentries (hentry *hentries, size_t size) | 389 free_hentries (hentry *hentries, size_t size) |
401 { | 390 { |
402 #if ERROR_CHECK_HASH_TABLE | 391 #ifdef ERROR_CHECK_STRUCTURES |
403 /* Ensure a crash if other code uses the discarded entries afterwards. */ | 392 /* Ensure a crash if other code uses the discarded entries afterwards. */ |
404 hentry *e, *sentinel; | 393 hentry *e, *sentinel; |
405 | 394 |
406 for (e = hentries, sentinel = e + size; e < sentinel; e++) | 395 for (e = hentries, sentinel = e + size; e < sentinel; e++) |
407 * (unsigned long *) e = 0xdeadbeef; | 396 * (unsigned long *) e = 0xdeadbeef; |