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