Mercurial > hg > xemacs-beta
comparison src/lrecord.h @ 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 | a634e3b7acc8 |
comparison
equal
deleted
inserted
replaced
799:03d9f9084848 | 800:a5954632b187 |
---|---|
533 | 533 |
534 /* DEFINE_LRECORD_IMPLEMENTATION is for objects with constant size. | 534 /* DEFINE_LRECORD_IMPLEMENTATION is for objects with constant size. |
535 DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION is for objects whose size varies. | 535 DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION is for objects whose size varies. |
536 */ | 536 */ |
537 | 537 |
538 #if defined (ERROR_CHECK_TYPECHECK) | 538 #if defined (ERROR_CHECK_TYPES) |
539 # define DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype) | 539 # define DECLARE_ERROR_CHECK_TYPES(c_name, structtype) |
540 #else | 540 #else |
541 # define DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype) | 541 # define DECLARE_ERROR_CHECK_TYPES(c_name, structtype) |
542 #endif | 542 #endif |
543 | 543 |
544 #define DEFINE_BASIC_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ | 544 #define DEFINE_BASIC_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ |
545 DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype) | 545 DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype) |
546 | 546 |
561 | 561 |
562 #define DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ | 562 #define DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ |
563 MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) | 563 MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) |
564 | 564 |
565 #define MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \ | 565 #define MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \ |
566 DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype) \ | 566 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ |
567 const struct lrecord_implementation lrecord_##c_name = \ | 567 const struct lrecord_implementation lrecord_##c_name = \ |
568 { name, marker, printer, nuker, equal, hash, desc, \ | 568 { name, marker, printer, nuker, equal, hash, desc, \ |
569 getprop, putprop, remprop, plist, size, sizer, \ | 569 getprop, putprop, remprop, plist, size, sizer, \ |
570 lrecord_type_##c_name, basic_p } | 570 lrecord_type_##c_name, basic_p } |
571 | 571 |
580 | 580 |
581 #define DEFINE_EXTERNAL_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ | 581 #define DEFINE_EXTERNAL_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ |
582 MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) | 582 MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) |
583 | 583 |
584 #define MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \ | 584 #define MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \ |
585 DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype) \ | 585 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ |
586 int lrecord_type_##c_name; \ | 586 int lrecord_type_##c_name; \ |
587 struct lrecord_implementation lrecord_##c_name = \ | 587 struct lrecord_implementation lrecord_##c_name = \ |
588 { name, marker, printer, nuker, equal, hash, desc, \ | 588 { name, marker, printer, nuker, equal, hash, desc, \ |
589 getprop, putprop, remprop, plist, size, sizer, \ | 589 getprop, putprop, remprop, plist, size, sizer, \ |
590 lrecord_type_last_built_in_type, basic_p } | 590 lrecord_type_last_built_in_type, basic_p } |
745 and DEFINE_LRECORD_IMPLEMENTATION. | 745 and DEFINE_LRECORD_IMPLEMENTATION. |
746 | 746 |
747 */ | 747 */ |
748 | 748 |
749 | 749 |
750 #ifdef ERROR_CHECK_TYPECHECK | 750 #ifdef ERROR_CHECK_TYPES |
751 | 751 |
752 # define DECLARE_LRECORD(c_name, structtype) \ | 752 # define DECLARE_LRECORD(c_name, structtype) \ |
753 extern const struct lrecord_implementation lrecord_##c_name; \ | 753 extern const struct lrecord_implementation lrecord_##c_name; \ |
754 INLINE_HEADER structtype * \ | 754 INLINE_HEADER structtype * \ |
755 error_check_##c_name (Lisp_Object obj, const char *file, int line); \ | 755 error_check_##c_name (Lisp_Object obj, const char *file, int line); \ |
788 # define XRECORD(x, c_name, structtype) \ | 788 # define XRECORD(x, c_name, structtype) \ |
789 error_check_##c_name (x, __FILE__, __LINE__) | 789 error_check_##c_name (x, __FILE__, __LINE__) |
790 # define XNONRECORD(x, c_name, type_enum, structtype) \ | 790 # define XNONRECORD(x, c_name, type_enum, structtype) \ |
791 error_check_##c_name (x, __FILE__, __LINE__) | 791 error_check_##c_name (x, __FILE__, __LINE__) |
792 | 792 |
793 INLINE_HEADER Lisp_Object wrap_record_1 (void *ptr, enum lrecord_type ty, | 793 INLINE_HEADER Lisp_Object wrap_record_1 (const void *ptr, enum lrecord_type ty, |
794 const char *file, int line); | 794 const char *file, int line); |
795 INLINE_HEADER Lisp_Object | 795 INLINE_HEADER Lisp_Object |
796 wrap_record_1 (void *ptr, enum lrecord_type ty, const char *file, int line) | 796 wrap_record_1 (const void *ptr, enum lrecord_type ty, const char *file, |
797 int line) | |
797 { | 798 { |
798 Lisp_Object obj = wrap_pointer_1 (ptr); | 799 Lisp_Object obj = wrap_pointer_1 (ptr); |
799 | 800 |
800 assert_at_line (RECORD_TYPEP (obj, ty), file, line); | 801 assert_at_line (RECORD_TYPEP (obj, ty), file, line); |
801 return obj; | 802 return obj; |
802 } | 803 } |
803 | 804 |
804 #define wrap_record(ptr, ty) \ | 805 #define wrap_record(ptr, ty) \ |
805 wrap_record_1 (ptr, lrecord_type_##ty, __FILE__, __LINE__) | 806 wrap_record_1 (ptr, lrecord_type_##ty, __FILE__, __LINE__) |
806 | 807 |
807 #else /* not ERROR_CHECK_TYPECHECK */ | 808 #else /* not ERROR_CHECK_TYPES */ |
808 | 809 |
809 # define DECLARE_LRECORD(c_name, structtype) \ | 810 # define DECLARE_LRECORD(c_name, structtype) \ |
810 extern Lisp_Object Q##c_name##p; \ | 811 extern Lisp_Object Q##c_name##p; \ |
811 extern const struct lrecord_implementation lrecord_##c_name | 812 extern const struct lrecord_implementation lrecord_##c_name |
812 # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ | 813 # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ |
820 ((structtype *) XPNTR (x)) | 821 ((structtype *) XPNTR (x)) |
821 /* wrap_pointer_1 is so named as a suggestion not to use it unless you | 822 /* wrap_pointer_1 is so named as a suggestion not to use it unless you |
822 know what you're doing. */ | 823 know what you're doing. */ |
823 #define wrap_record(ptr, ty) wrap_pointer_1 (ptr) | 824 #define wrap_record(ptr, ty) wrap_pointer_1 (ptr) |
824 | 825 |
825 #endif /* not ERROR_CHECK_TYPECHECK */ | 826 #endif /* not ERROR_CHECK_TYPES */ |
826 | 827 |
827 #define RECORDP(x, c_name) RECORD_TYPEP (x, lrecord_type_##c_name) | 828 #define RECORDP(x, c_name) RECORD_TYPEP (x, lrecord_type_##c_name) |
828 | 829 |
829 /* Note: we now have two different kinds of type-checking macros. | 830 /* Note: we now have two different kinds of type-checking macros. |
830 The "old" kind has now been renamed CONCHECK_foo. The reason for | 831 The "old" kind has now been renamed CONCHECK_foo. The reason for |