comparison src/lisp.h @ 788:026c5bf9c134

[xemacs-hg @ 2002-03-21 07:29:57 by ben] chartab.c: Fix bugs in implementation and doc strings. config.h.in: Add foo_checking_assert_at_line() macros. Not clear whether these are actually useful, though; I'll take them out if not. symsinit.h, emacs.c: Some improvements to the timeline. Rearrange a bit the init calls. Add call for reinit_vars_of_object_mswindows() and declare in symsinit.h. event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, events.c, events.h: Introduce new event methods for printing, comparing, and hashing magic events, to avoid event-type-specific stuff that had crept into events.c. (And was crashing, since the channel in MS Windows magic events may be nil.) Implement the methods in event-{tty,gtk,Xt,mswindows}.c. Make wrapping functions event_stream_{compare,hash,format}_magic_event() to check if everything's OK and call the actual callback. Fix events.c to use the new methods. Add a new event-stream-operation EVENT_STREAM_NOTHING -- event stream not actually required to be able to do anything, just be open. (#### This event-stream-operation stuff needs to be rethought.) Fixed describe_event() in event-Xt.c to print its output to a stream, not always to stderr, so it can be used elsewhere. (e.g. in print-event when a magic event is encountered?) lisp.h, lrecord.h: Define new assert_at_line(), for use in asserts inside of inline functions. The assert will report the line and file of the inline function, which is almost certainly not what you want as it's useless. what you want to see is where the pseudo-macro was called from. So, when error-checking is on, we pass in the line and file into the macros, for accurate printout using assert_at_line(). Happens only when error-checking is defined so doesn't slow down non-error-checking builds. Fix XCHAR, XINT, XCHAR_OR_INT, XFOO, and wrap_foo() in this fashion. lstream.c, lstream.h: Add resizing_buffer_to_lisp_string(). objects-gtk.c: Fix typo. objects-msw.c: Implement a smarter way of determining whether a font matches a charset. Formerly we just looked at the "script" element of the font spec, converted it to a code page, and compared it with the code page derived from the charset. Now, as well as doing this, we ask the font for the list of unicode ranges it supports, see what range the charset falls into (#### bogus! need to do this char-by-char), and see if any of the font's supported ranges include the charset's range. also do some caching in Vfont_signature_data of previous inquiries. charset.h, text.c, mule-charset.c: New fun; extracted out of Fmake_char() and declare prototype in charset.h. text.h: introduce assert_by_line() to make REP_BYTES_BY_FIRST_BYTE report the file and line more accurately in an assertion failure. unicode.c: make non-static (used in objects-msw.c), declare in charset.h. mule\mule-category.el: Start implementing a category API compatible with FSF. Not there yet. We need improvements to char-tables. mule\mule-charset.el: Copy translation table code from FSF 21.1 and fix up. Eventually we'll have them in XEmacs. (used in ccl) Not here quite yet, and we need some improvements to char-tables. mule\cyril-util.el, mule\cyrillic.el, mule\devan-util.el, mule\ethio-util.el, mule\korea-util.el, mule\mule-tty-init.el, mule\tibet-util.el, mule\viet-util.el, mule\vietnamese.el: Fix numerous compilation warnings. Fix up code related to translation tables and other types of char-tables. menubar-items.el: Move the frame commands from the View menu to the File menu, to be consistent with how most other programs do things. Move less-used revert/recover items to a submenu. Make "recover" not prompt for a file, but recover the current buffer. TODO.ben-mule-21-5: Create bug list for latest problems.
author ben
date Thu, 21 Mar 2002 07:31:30 +0000
parents 79940b592197
children e38acbeb1cae
comparison
equal deleted inserted replaced
787:242b62e9fc59 788:026c5bf9c134
415 /* We define assert iff USE_ASSERTIONS or DEBUG_XEMACS is defined. 415 /* We define assert iff USE_ASSERTIONS or DEBUG_XEMACS is defined.
416 Otherwise we define it to be empty. Quantify has shown that the 416 Otherwise we define it to be empty. Quantify has shown that the
417 time the assert checks take is measurable so let's not include them 417 time the assert checks take is measurable so let's not include them
418 in production binaries. 418 in production binaries.
419 419
420 assert() returns 1 if the assert succeeded (or wasn't tried), 0 if 420 If ASSERTIONS_DONT_ABORT defined, we will continue after assertion
421 failed. (Normally, it would have aborted here, but with 421 failures.
422 ASSERTIONS_DONT_ABORT defined, it will continue. */ 422
423 assert_at_line() is used for asserts inside of inline functions called
424 from error-checking macros. If we're not tricky, we just get the file
425 and line of the inline function, which is not very useful. */
423 426
424 #ifdef USE_ASSERTIONS 427 #ifdef USE_ASSERTIONS
425 /* Highly dubious kludge */ 428 /* Highly dubious kludge */
426 /* (thanks, Jamie, I feel better now -- ben) */ 429 /* (thanks, Jamie, I feel better now -- ben) */
427 void assert_failed (const char *, int, const char *); 430 void assert_failed (const char *, int, const char *);
428 # define abort() (assert_failed (__FILE__, __LINE__, "abort()")) 431 # define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
429 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x)) 432 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
433 # define assert_at_line(x, file, line) \
434 ((x) ? (void) 0 : assert_failed (file, line, #x))
430 #else 435 #else
431 # ifdef DEBUG_XEMACS 436 # ifdef DEBUG_XEMACS
432 # define assert(x) ((x) ? (void) 0 : (void) abort ()) 437 # define assert(x) ((x) ? (void) 0 : (void) abort ())
438 # define assert_at_line(x, file, line) assert (x)
433 # else 439 # else
434 # define assert(x) ((void) 0) 440 # define assert(x) ((void) 0)
441 # define assert_at_line(x, file, line) assert (x)
435 # endif 442 # endif
436 #endif 443 #endif
437 444
438 #if 0 445 #if 0
439 #ifdef USE_ASSERTIONS 446 #ifdef USE_ASSERTIONS
1731 1738
1732 #define CHARP(x) (XTYPE (x) == Lisp_Type_Char) 1739 #define CHARP(x) (XTYPE (x) == Lisp_Type_Char)
1733 1740
1734 #ifdef ERROR_CHECK_TYPECHECK 1741 #ifdef ERROR_CHECK_TYPECHECK
1735 1742
1736 INLINE_HEADER Emchar XCHAR (Lisp_Object obj); 1743 INLINE_HEADER Emchar XCHAR_1 (Lisp_Object obj, const char *file, int line);
1737 INLINE_HEADER Emchar 1744 INLINE_HEADER Emchar
1738 XCHAR (Lisp_Object obj) 1745 XCHAR_1 (Lisp_Object obj, const char *file, int line)
1739 { 1746 {
1740 assert (CHARP (obj)); 1747 assert_at_line (CHARP (obj), file, line);
1741 return XCHARVAL (obj); 1748 return XCHARVAL (obj);
1742 } 1749 }
1743 1750
1744 #else 1751 #define XCHAR(x) XCHAR_1 (x, __FILE__, __LINE__)
1745 1752
1746 #define XCHAR(x) ((Emchar)XCHARVAL (x)) 1753 #else /* no error checking */
1747 1754
1748 #endif 1755 #define XCHAR(x) ((Emchar) XCHARVAL (x))
1756
1757 #endif /* no error checking */
1749 1758
1750 #define CHECK_CHAR(x) CHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp) 1759 #define CHECK_CHAR(x) CHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp)
1751 #define CONCHECK_CHAR(x) CONCHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp) 1760 #define CONCHECK_CHAR(x) CONCHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp)
1752 1761
1753 1762
1811 1820
1812 #define ZEROP(x) EQ (x, Qzero) 1821 #define ZEROP(x) EQ (x, Qzero)
1813 1822
1814 #ifdef ERROR_CHECK_TYPECHECK 1823 #ifdef ERROR_CHECK_TYPECHECK
1815 1824
1816 INLINE_HEADER EMACS_INT XINT (Lisp_Object obj); 1825 #define XCHAR_OR_INT(x) XCHAR_OR_INT_1 (x, __FILE__, __LINE__)
1826 #define XINT(x) XINT_1 (x, __FILE__, __LINE__)
1827
1828 INLINE_HEADER EMACS_INT XINT_1 (Lisp_Object obj, const char *file, int line);
1817 INLINE_HEADER EMACS_INT 1829 INLINE_HEADER EMACS_INT
1818 XINT (Lisp_Object obj) 1830 XINT_1 (Lisp_Object obj, const char *file, int line)
1819 { 1831 {
1820 assert (INTP (obj)); 1832 assert_at_line (INTP (obj), file, line);
1821 return XREALINT (obj); 1833 return XREALINT (obj);
1822 } 1834 }
1823 1835
1824 INLINE_HEADER EMACS_INT XCHAR_OR_INT (Lisp_Object obj); 1836 INLINE_HEADER EMACS_INT XCHAR_OR_INT_1 (Lisp_Object obj, const char *file,
1837 int line);
1825 INLINE_HEADER EMACS_INT 1838 INLINE_HEADER EMACS_INT
1826 XCHAR_OR_INT (Lisp_Object obj) 1839 XCHAR_OR_INT_1 (Lisp_Object obj, const char *file, int line)
1827 { 1840 {
1828 assert (INTP (obj) || CHARP (obj)); 1841 assert_at_line (INTP (obj) || CHARP (obj), file, line);
1829 return CHARP (obj) ? XCHAR (obj) : XINT (obj); 1842 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
1830 } 1843 }
1831 1844
1832 #else /* no error checking */ 1845 #else /* no error checking */
1833 1846