Mercurial > hg > xemacs-beta
comparison src/lisp.h @ 380:8626e4521993 r21-2-5
Import from CVS: tag r21-2-5
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:07:10 +0200 |
parents | d883f39b8495 |
children | 064ab7fed2e0 |
comparison
equal
deleted
inserted
replaced
379:76b7d63099ad | 380:8626e4521993 |
---|---|
24 | 24 |
25 #ifndef _XEMACS_LISP_H_ | 25 #ifndef _XEMACS_LISP_H_ |
26 #define _XEMACS_LISP_H_ | 26 #define _XEMACS_LISP_H_ |
27 | 27 |
28 /************************************************************************/ | 28 /************************************************************************/ |
29 /* general definitions */ | 29 /* general definitions */ |
30 /************************************************************************/ | 30 /************************************************************************/ |
31 | 31 |
32 /* We include the following generally useful header files so that you | 32 /* We include the following generally useful header files so that you |
33 don't have to worry about prototypes when using the standard C | 33 don't have to worry about prototypes when using the standard C |
34 library functions and macros. These files shouldn't be excessively | 34 library functions and macros. These files shouldn't be excessively |
179 # if defined __GNUC__ | 179 # if defined __GNUC__ |
180 # if ((__GNUC__ > 2) || (__GNUC__ == 2) && (__GNUC_MINOR__ >= 5)) | 180 # if ((__GNUC__ > 2) || (__GNUC__ == 2) && (__GNUC_MINOR__ >= 5)) |
181 # define DOESNT_RETURN void volatile | 181 # define DOESNT_RETURN void volatile |
182 # define DECLARE_DOESNT_RETURN(decl) \ | 182 # define DECLARE_DOESNT_RETURN(decl) \ |
183 extern void volatile decl __attribute__ ((noreturn)) | 183 extern void volatile decl __attribute__ ((noreturn)) |
184 # define DECLARE_DOESNT_RETURN_GCC__ATTRIBUTE__SYNTAX_SUCKS(decl,str,idx) \ | 184 # define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \ |
185 /* Should be able to state multiple independent __attribute__s, but \ | 185 /* Should be able to state multiple independent __attribute__s, but \ |
186 the losing syntax doesn't work that way, and screws losing cpp */ \ | 186 the losing syntax doesn't work that way, and screws losing cpp */ \ |
187 extern void volatile decl \ | 187 extern void volatile decl \ |
188 __attribute__ ((noreturn, format (printf, str, idx))) | 188 __attribute__ ((noreturn, format (printf, str, idx))) |
189 # else | 189 # else |
190 # define DOESNT_RETURN void volatile | 190 # define DOESNT_RETURN void volatile |
191 # define DECLARE_DOESNT_RETURN(decl) extern void volatile decl | 191 # define DECLARE_DOESNT_RETURN(decl) extern void volatile decl |
192 # define DECLARE_DOESNT_RETURN_GCC__ATTRIBUTE__SYNTAX_SUCKS(decl,str,idx) \ | 192 # define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \ |
193 extern void volatile decl PRINTF_ARGS(str,idx) | 193 extern void volatile decl PRINTF_ARGS(str,idx) |
194 # endif /* GNUC 2.5 */ | 194 # endif /* GNUC 2.5 */ |
195 # else | 195 # else |
196 # define DOESNT_RETURN void | 196 # define DOESNT_RETURN void |
197 # define DECLARE_DOESNT_RETURN(decl) extern void decl | 197 # define DECLARE_DOESNT_RETURN(decl) extern void decl |
198 # define DECLARE_DOESNT_RETURN_GCC__ATTRIBUTE__SYNTAX_SUCKS(decl,str,idx) \ | 198 # define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \ |
199 extern void decl PRINTF_ARGS(str,idx) | 199 extern void decl PRINTF_ARGS(str,idx) |
200 # endif /* GNUC */ | 200 # endif /* GNUC */ |
201 #endif | 201 #endif |
202 | 202 |
203 #ifndef ALIGNOF | 203 #ifndef ALIGNOF |
212 ((((len) + (unit) - 1) / (unit)) * (unit)) | 212 ((((len) + (unit) - 1) / (unit)) * (unit)) |
213 | 213 |
214 /* #### Yuck, this is kind of evil */ | 214 /* #### Yuck, this is kind of evil */ |
215 #define ALIGN_PTR(ptr, unit) \ | 215 #define ALIGN_PTR(ptr, unit) \ |
216 ((void *) ALIGN_SIZE ((long) (ptr), unit)) | 216 ((void *) ALIGN_SIZE ((long) (ptr), unit)) |
217 | |
218 #ifdef QUANTIFY | |
219 #include "quantify.h" | |
220 #define QUANTIFY_START_RECORDING quantify_start_recording_data () | |
221 #define QUANTIFY_STOP_RECORDING quantify_stop_recording_data () | |
222 #else /* !QUANTIFY */ | |
223 #define QUANTIFY_START_RECORDING | |
224 #define QUANTIFY_STOP_RECORDING | |
225 #endif /* !QUANTIFY */ | |
226 | 217 |
227 #ifndef DO_NOTHING | 218 #ifndef DO_NOTHING |
228 #define DO_NOTHING do {} while (0) | 219 #define DO_NOTHING do {} while (0) |
229 #endif | 220 #endif |
230 | 221 |
258 /*#define REGISTER register*/ | 249 /*#define REGISTER register*/ |
259 /*#endif*/ | 250 /*#endif*/ |
260 | 251 |
261 | 252 |
262 /************************************************************************/ | 253 /************************************************************************/ |
263 /* typedefs */ | 254 /* typedefs */ |
264 /************************************************************************/ | 255 /************************************************************************/ |
265 | 256 |
266 /* We put typedefs here so that prototype declarations don't choke. | 257 /* We put typedefs here so that prototype declarations don't choke. |
267 Note that we don't actually declare the structures here (except | 258 Note that we don't actually declare the structures here (except |
268 maybe for simple structures like Dynarrs); that keeps them private | 259 maybe for simple structures like Dynarrs); that keeps them private |
331 struct extent; | 322 struct extent; |
332 typedef struct extent *EXTENT; | 323 typedef struct extent *EXTENT; |
333 struct frame; /* "frame.h" */ | 324 struct frame; /* "frame.h" */ |
334 struct window; /* "window.h" */ | 325 struct window; /* "window.h" */ |
335 struct Lisp_Event; /* "events.h" */ | 326 struct Lisp_Event; /* "events.h" */ |
327 typedef struct Lisp_Event Lisp_Event; | |
336 struct Lisp_Face; | 328 struct Lisp_Face; |
329 typedef struct Lisp_Face Lisp_Face; | |
337 struct Lisp_Process; /* "process.c" */ | 330 struct Lisp_Process; /* "process.c" */ |
331 typedef struct Lisp_Process Lisp_Process; | |
338 struct stat; /* <sys/stat.h> */ | 332 struct stat; /* <sys/stat.h> */ |
339 struct Lisp_Color_Instance; | 333 struct Lisp_Color_Instance; |
334 typedef struct Lisp_Color_Instance Lisp_Color_Instance; | |
340 struct Lisp_Font_Instance; | 335 struct Lisp_Font_Instance; |
336 typedef struct Lisp_Font_Instance Lisp_Font_Instance; | |
341 struct Lisp_Image_Instance; | 337 struct Lisp_Image_Instance; |
338 typedef struct Lisp_Image_Instance Lisp_Image_Instance; | |
342 struct display_line; | 339 struct display_line; |
343 struct redisplay_info; | 340 struct redisplay_info; |
344 struct window_mirror; | 341 struct window_mirror; |
345 struct scrollbar_instance; | 342 struct scrollbar_instance; |
346 struct font_metric_info; | 343 struct font_metric_info; |
504 MUNGE_ME_KEY_TRANSLATION | 501 MUNGE_ME_KEY_TRANSLATION |
505 }; | 502 }; |
506 | 503 |
507 | 504 |
508 /************************************************************************/ | 505 /************************************************************************/ |
509 /* Definition of Lisp_Object data type */ | 506 /* Definition of Lisp_Object data type */ |
510 /************************************************************************/ | 507 /************************************************************************/ |
511 | 508 |
512 #ifdef USE_MINIMAL_TAGBITS | 509 #ifdef USE_MINIMAL_TAGBITS |
513 # define LRECORD_CONS | 510 # define LRECORD_CONS |
514 # define LRECORD_VECTOR | 511 # define LRECORD_VECTOR |
522 | 519 |
523 #ifndef USE_MINIMAL_TAGBITS | 520 #ifndef USE_MINIMAL_TAGBITS |
524 | 521 |
525 enum Lisp_Type | 522 enum Lisp_Type |
526 { | 523 { |
524 /* XRECORD_LHEADER (object) points to a struct lrecord_header | |
525 lheader->implementation determines the type (and GC behavior) | |
526 of the object. */ | |
527 Lisp_Type_Record, | |
528 | |
527 /* Integer. XINT(obj) is the integer value. */ | 529 /* Integer. XINT(obj) is the integer value. */ |
528 Lisp_Type_Int, | 530 Lisp_Type_Int, |
529 | |
530 /* XRECORD_LHEADER (object) points to a struct lrecord_header | |
531 lheader->implementation determines the type (and GC behaviour) | |
532 of the object. */ | |
533 Lisp_Type_Record, | |
534 | 531 |
535 #ifndef LRECORD_CONS | 532 #ifndef LRECORD_CONS |
536 /* Cons. XCONS (object) points to a struct Lisp_Cons. */ | 533 /* Cons. XCONS (object) points to a struct Lisp_Cons. */ |
537 Lisp_Type_Cons, | 534 Lisp_Type_Cons, |
538 #endif | 535 #endif |
572 | 569 |
573 #define POINTER_TYPE_P(type) ((type) == Lisp_Type_Record) | 570 #define POINTER_TYPE_P(type) ((type) == Lisp_Type_Record) |
574 | 571 |
575 #endif /* USE_MINIMAL_TAGBITS */ | 572 #endif /* USE_MINIMAL_TAGBITS */ |
576 | 573 |
577 /* This should be the underlying type into which a Lisp_Object must fit. | 574 /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit. |
578 In a strict ANSI world, this must be `int', since ANSI says you can't | 575 In particular, it must be large enough to contain a pointer. |
579 use bitfields on any type other than `int'. However, on a machine | 576 config.h can override this, e.g. to use `long long' for bigger lisp ints. */ |
580 where `int' and `long' are not the same size, this should be the | 577 |
581 longer of the two. (This also must be something into which a pointer | 578 #ifndef SIZEOF_EMACS_INT |
582 to an arbitrary object will fit, modulo any DATA_SEG_BITS cruft.) | 579 # define SIZEOF_EMACS_INT SIZEOF_VOID_P |
583 */ | 580 #endif |
584 /* ### We should be using uintptr_t and SIZEOF_VOID_P here */ | 581 |
585 #if (LONGBITS > INTBITS) | 582 #ifndef EMACS_INT |
586 # define EMACS_INT long | 583 # if SIZEOF_EMACS_INT == SIZEOF_LONG |
587 # define EMACS_UINT unsigned long | 584 # define EMACS_INT long |
588 # define SIZEOF_EMACS_INT SIZEOF_LONG | 585 # elif SIZEOF_EMACS_INT == SIZEOF_INT |
589 #else | 586 # define EMACS_INT int |
590 # define EMACS_INT int | 587 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG |
591 # define EMACS_UINT unsigned int | 588 # define EMACS_INT long long |
592 # define SIZEOF_EMACS_INT SIZEOF_INT | 589 # else |
590 # error Unable to determine suitable type for EMACS_INT | |
591 # endif | |
592 #endif | |
593 | |
594 #ifndef EMACS_UINT | |
595 # define EMACS_UINT unsigned EMACS_INT | |
593 #endif | 596 #endif |
594 | 597 |
595 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR) | 598 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR) |
596 | 599 |
597 /* Overridden by m/next.h */ | 600 /* Overridden by m/next.h */ |
667 | 670 |
668 /* OK, you can open them again */ | 671 /* OK, you can open them again */ |
669 | 672 |
670 | 673 |
671 /************************************************************************/ | 674 /************************************************************************/ |
672 /* Definitions of basic Lisp objects */ | 675 /* Definitions of basic Lisp objects */ |
673 /************************************************************************/ | 676 /************************************************************************/ |
674 | 677 |
675 #include "lrecord.h" | 678 #include "lrecord.h" |
676 | 679 |
677 /********** unbound ***********/ | 680 /*********** unbound ***********/ |
678 | 681 |
679 /* Qunbound is a special Lisp_Object (actually of type | 682 /* Qunbound is a special Lisp_Object (actually of type |
680 symbol-value-forward), that can never be visible to | 683 symbol-value-forward), that can never be visible to |
681 the Lisp caller and thus can be used in the C code | 684 the Lisp caller and thus can be used in the C code |
682 to mean "no such value". */ | 685 to mean "no such value". */ |
693 #ifdef LRECORD_CONS | 696 #ifdef LRECORD_CONS |
694 struct lrecord_header lheader; | 697 struct lrecord_header lheader; |
695 #endif | 698 #endif |
696 Lisp_Object car, cdr; | 699 Lisp_Object car, cdr; |
697 }; | 700 }; |
701 typedef struct Lisp_Cons Lisp_Cons; | |
698 | 702 |
699 #if 0 /* FSFmacs */ | 703 #if 0 /* FSFmacs */ |
700 /* Like a cons, but records info on where the text lives that it was read from */ | 704 /* Like a cons, but records info on where the text lives that it was read from */ |
701 /* This is not really in use now */ | 705 /* This is not really in use now */ |
702 | 706 |
708 }; | 712 }; |
709 #endif | 713 #endif |
710 | 714 |
711 #ifdef LRECORD_CONS | 715 #ifdef LRECORD_CONS |
712 | 716 |
713 DECLARE_LRECORD (cons, struct Lisp_Cons); | 717 DECLARE_LRECORD (cons, Lisp_Cons); |
714 #define XCONS(x) XRECORD (x, cons, struct Lisp_Cons) | 718 #define XCONS(x) XRECORD (x, cons, Lisp_Cons) |
715 #define XSETCONS(x, p) XSETRECORD (x, p, cons) | 719 #define XSETCONS(x, p) XSETRECORD (x, p, cons) |
716 #define CONSP(x) RECORDP (x, cons) | 720 #define CONSP(x) RECORDP (x, cons) |
717 #define GC_CONSP(x) GC_RECORDP (x, cons) | 721 #define GC_CONSP(x) GC_RECORDP (x, cons) |
718 #define CHECK_CONS(x) CHECK_RECORD (x, cons) | 722 #define CHECK_CONS(x) CHECK_RECORD (x, cons) |
719 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons) | 723 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons) |
721 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader)) | 725 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader)) |
722 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader)) | 726 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader)) |
723 | 727 |
724 #else /* ! LRECORD_CONS */ | 728 #else /* ! LRECORD_CONS */ |
725 | 729 |
726 DECLARE_NONRECORD (cons, Lisp_Type_Cons, struct Lisp_Cons); | 730 DECLARE_NONRECORD (cons, Lisp_Type_Cons, Lisp_Cons); |
727 #define XCONS(a) XNONRECORD (a, cons, Lisp_Type_Cons, struct Lisp_Cons) | 731 #define XCONS(a) XNONRECORD (a, cons, Lisp_Type_Cons, Lisp_Cons) |
728 #define XSETCONS(c, p) XSETOBJ (c, Lisp_Type_Cons, p) | 732 #define XSETCONS(c, p) XSETOBJ (c, Lisp_Type_Cons, p) |
729 #define CONSP(x) (XTYPE (x) == Lisp_Type_Cons) | 733 #define CONSP(x) (XTYPE (x) == Lisp_Type_Cons) |
730 #define GC_CONSP(x) (XGCTYPE (x) == Lisp_Type_Cons) | 734 #define GC_CONSP(x) (XGCTYPE (x) == Lisp_Type_Cons) |
731 #define CHECK_CONS(x) CHECK_NONRECORD (x, Lisp_Type_Cons, Qconsp) | 735 #define CHECK_CONS(x) CHECK_NONRECORD (x, Lisp_Type_Cons, Qconsp) |
732 #define CONCHECK_CONS(x) CONCHECK_NONRECORD (x, Lisp_Type_Cons, Qconsp) | 736 #define CONCHECK_CONS(x) CONCHECK_NONRECORD (x, Lisp_Type_Cons, Qconsp) |
736 #define CONS_MARKED_P(c) XMARKBIT (c->car) | 740 #define CONS_MARKED_P(c) XMARKBIT (c->car) |
737 #define MARK_CONS(c) XMARK (c->car) | 741 #define MARK_CONS(c) XMARK (c->car) |
738 | 742 |
739 #endif /* ! LRECORD_CONS */ | 743 #endif /* ! LRECORD_CONS */ |
740 | 744 |
745 extern Lisp_Object Qnil; | |
746 | |
741 #define NILP(x) EQ (x, Qnil) | 747 #define NILP(x) EQ (x, Qnil) |
742 #define GC_NILP(x) GC_EQ (x, Qnil) | 748 #define GC_NILP(x) GC_EQ (x, Qnil) |
743 #define XCAR(a) (XCONS (a)->car) | 749 #define XCAR(a) (XCONS (a)->car) |
744 #define XCDR(a) (XCONS (a)->cdr) | 750 #define XCDR(a) (XCONS (a)->cdr) |
745 #define LISTP(x) (CONSP(x) || NILP(x)) | 751 #define LISTP(x) (CONSP(x) || NILP(x)) |
754 x = wrong_type_argument (Qlistp, x); \ | 760 x = wrong_type_argument (Qlistp, x); \ |
755 } while (0) | 761 } while (0) |
756 | 762 |
757 /* For a list that's known to be in valid list format -- | 763 /* For a list that's known to be in valid list format -- |
758 will abort() if the list is not in valid format */ | 764 will abort() if the list is not in valid format */ |
759 #define LIST_LOOP(consvar, list) \ | 765 #define LIST_LOOP(tail, list) \ |
760 for (consvar = list; !NILP (consvar); consvar = XCDR (consvar)) | 766 for (tail = list; \ |
767 !NILP (tail); \ | |
768 tail = XCDR (tail)) | |
769 | |
770 #define LIST_LOOP_2(elt, list) \ | |
771 Lisp_Object tail##elt; \ | |
772 LIST_LOOP_3(elt, list, tail##elt) | |
773 | |
774 #define LIST_LOOP_3(elt, list, tail) \ | |
775 for (tail = list; \ | |
776 NILP (tail) ? \ | |
777 0 : (elt = XCAR (tail), 1); \ | |
778 tail = XCDR (tail)) | |
779 | |
780 #define GET_LIST_LENGTH(list, len) do { \ | |
781 Lisp_Object GLL_tail; \ | |
782 for (GLL_tail = list, len = 0; \ | |
783 !NILP (GLL_tail); \ | |
784 GLL_tail = XCDR (GLL_tail), ++len) \ | |
785 DO_NOTHING; \ | |
786 } while (0) | |
787 | |
788 #define GET_EXTERNAL_LIST_LENGTH(list, len) \ | |
789 do { \ | |
790 Lisp_Object GELL_elt, GELL_tail; \ | |
791 EXTERNAL_LIST_LOOP_4 (GELL_elt, list, GELL_tail, len) \ | |
792 ; \ | |
793 } while (0) | |
761 | 794 |
762 /* For a list that's known to be in valid list format, where we may | 795 /* For a list that's known to be in valid list format, where we may |
763 be deleting the current element out of the list -- | 796 be deleting the current element out of the list -- |
764 will abort() if the list is not in valid format */ | 797 will abort() if the list is not in valid format */ |
765 #define LIST_LOOP_DELETING(consvar, nextconsvar, list) \ | 798 #define LIST_LOOP_DELETING(consvar, nextconsvar, list) \ |
766 for (consvar = list; \ | 799 for (consvar = list; \ |
767 !NILP (consvar) ? (nextconsvar = XCDR (consvar), 1) : 0; \ | 800 !NILP (consvar) ? (nextconsvar = XCDR (consvar), 1) :0; \ |
768 consvar = nextconsvar) | 801 consvar = nextconsvar) |
802 | |
803 /* Delete all elements of external list LIST | |
804 satisfying CONDITION, an expression referring to variable ELT */ | |
805 #define EXTERNAL_LIST_LOOP_DELETE_IF(elt, list, condition) do { \ | |
806 Lisp_Object prev_tail_##list = Qnil; \ | |
807 Lisp_Object tail_##list; \ | |
808 int len_##list; \ | |
809 EXTERNAL_LIST_LOOP_4 (elt, list, tail_##list, len_##list) \ | |
810 { \ | |
811 if (condition) \ | |
812 { \ | |
813 if (NILP (prev_tail_##list)) \ | |
814 list = XCDR (tail_##list); \ | |
815 else \ | |
816 XCDR (prev_tail_##list) = XCDR (tail_##list); \ | |
817 /* Keep tortoise from ever passing hare. */ \ | |
818 len_##list = 0; \ | |
819 } \ | |
820 else \ | |
821 prev_tail_##list = tail_##list; \ | |
822 } \ | |
823 } while (0) | |
824 | |
825 /* Delete all elements of true non-circular list LIST | |
826 satisfying CONDITION, an expression referring to variable ELT */ | |
827 #define LIST_LOOP_DELETE_IF(elt, list, condition) do { \ | |
828 Lisp_Object prev_tail_##list = Qnil; \ | |
829 Lisp_Object tail_##list; \ | |
830 LIST_LOOP_3 (elt, list, tail_##list) \ | |
831 { \ | |
832 if (condition) \ | |
833 { \ | |
834 if (NILP (prev_tail_##list)) \ | |
835 list = XCDR (tail_##list); \ | |
836 else \ | |
837 XCDR (prev_tail_##list) = XCDR (tail_##list); \ | |
838 } \ | |
839 else \ | |
840 prev_tail_##list = tail_##list; \ | |
841 } \ | |
842 } while (0) | |
769 | 843 |
770 /* For a list that may not be in valid list format -- | 844 /* For a list that may not be in valid list format -- |
771 will signal an error if the list is not in valid format */ | 845 will signal an error if the list is not in valid format */ |
772 #define EXTERNAL_LIST_LOOP(consvar, listp) \ | 846 #define EXTERNAL_LIST_LOOP(tail, list) \ |
773 for (consvar = listp; !NILP (consvar); consvar = XCDR (consvar)) \ | 847 for (tail = list; !NILP (tail); tail = XCDR (tail)) \ |
774 if (!CONSP (consvar)) \ | 848 if (!CONSP (tail)) \ |
775 signal_simple_error ("Invalid list format", listp); \ | 849 signal_malformed_list_error (list); \ |
776 else | 850 else |
777 | 851 |
778 extern Lisp_Object Qnil; | 852 |
779 | 853 /* The following macros are for traversing lisp lists. |
854 Signal an error if LIST is not properly acyclic and nil-terminated. | |
855 | |
856 Use tortoise/hare algorithm to check for cycles, but only if it | |
857 looks like the list is getting too long. Not only is the hare | |
858 faster than the tortoise; it even gets a head start! */ | |
859 | |
860 /* Optimized and safe macros for looping over external lists. */ | |
861 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024 | |
862 | |
863 #define EXTERNAL_LIST_LOOP_1(list) \ | |
864 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \ | |
865 int ELL1_len; \ | |
866 EXTERNAL_LIST_LOOP_6(ELL1_elt, list, ELL1_len, ELL1_hare, \ | |
867 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH) | |
868 | |
869 #define EXTERNAL_LIST_LOOP_2(elt, list) \ | |
870 Lisp_Object hare_##elt, tortoise_##elt; \ | |
871 int len_##elt; \ | |
872 EXTERNAL_LIST_LOOP_6(elt, list, len_##elt, hare_##elt, \ | |
873 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) | |
874 | |
875 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \ | |
876 Lisp_Object tortoise_##elt; \ | |
877 int len_##elt; \ | |
878 EXTERNAL_LIST_LOOP_6(elt, list, len_##elt, tail, \ | |
879 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) | |
880 | |
881 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \ | |
882 Lisp_Object tortoise_##elt; \ | |
883 EXTERNAL_LIST_LOOP_6(elt, list, len, tail, \ | |
884 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) | |
885 | |
886 | |
887 #define EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \ | |
888 tortoise, suspicion_length) \ | |
889 for (tortoise = hare = list, len = 0; \ | |
890 \ | |
891 (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \ | |
892 (NILP (hare) ? 0 : \ | |
893 (signal_malformed_list_error (list), 0))); \ | |
894 \ | |
895 hare = XCDR (hare), \ | |
896 ((++len < suspicion_length) ? \ | |
897 ((void) 0) : \ | |
898 (((len & 1) ? \ | |
899 ((void) (tortoise = XCDR (tortoise))) : \ | |
900 ((void) 0)) \ | |
901 , \ | |
902 (EQ (hare, tortoise) ? \ | |
903 ((void) signal_circular_list_error (list)) : \ | |
904 ((void) 0))))) | |
905 | |
906 | |
907 | |
908 /* Optimized and safe macros for looping over external alists. */ | |
909 #define EXTERNAL_ALIST_LOOP_4(elt, elt_car, elt_cdr, list) \ | |
910 Lisp_Object hare_##elt, tortoise_##elt; \ | |
911 int len_##elt; \ | |
912 EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \ | |
913 len_##elt, hare_##elt, tortoise_##elt, \ | |
914 CIRCULAR_LIST_SUSPICION_LENGTH) | |
915 | |
916 #define EXTERNAL_ALIST_LOOP_5(elt, elt_car, elt_cdr, list, tail) \ | |
917 Lisp_Object tortoise_##elt; \ | |
918 int len_##elt; \ | |
919 EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, \ | |
920 len_##elt, tail, tortoise_##elt, \ | |
921 CIRCULAR_LIST_SUSPICION_LENGTH) | |
922 | |
923 #define EXTERNAL_ALIST_LOOP_6(elt, elt_car, elt_cdr, list, tail, len) \ | |
924 Lisp_Object tortoise_##elt; \ | |
925 EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, \ | |
926 len, tail, tortoise_##elt, \ | |
927 CIRCULAR_LIST_SUSPICION_LENGTH) | |
928 | |
929 | |
930 #define EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, len, hare, \ | |
931 tortoise, suspicion_length) \ | |
932 EXTERNAL_LIST_LOOP_6(elt, list, len, hare, tortoise, suspicion_length) \ | |
933 if (CONSP (elt) ? (elt_car = XCAR (elt), elt_cdr = XCDR (elt), 0) :1) \ | |
934 continue; \ | |
935 else | |
936 | |
937 | |
938 /* Optimized and safe macros for looping over external property lists. */ | |
939 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \ | |
940 Lisp_Object key, value, hare_##key, tortoise_##key; \ | |
941 int len_##key; \ | |
942 EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len_##key, hare_##key,\ | |
943 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) | |
944 | |
945 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \ | |
946 Lisp_Object key, value, tail, tortoise_##key; \ | |
947 int len_##key; \ | |
948 EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len_##key, tail, \ | |
949 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) | |
950 | |
951 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \ | |
952 Lisp_Object key, value, tail, tortoise_##key; \ | |
953 int len; \ | |
954 EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, tail, \ | |
955 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) | |
956 | |
957 | |
958 #define EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, hare, \ | |
959 tortoise, suspicion_length) \ | |
960 for (tortoise = hare = list, len = 0; \ | |
961 \ | |
962 ((CONSP (hare) && \ | |
963 (key = XCAR (hare), \ | |
964 hare = XCDR (hare), \ | |
965 CONSP (hare))) ? \ | |
966 (value = XCAR (hare), 1) : \ | |
967 (NILP (hare) ? 0 : \ | |
968 (signal_malformed_property_list_error (list), 0))); \ | |
969 \ | |
970 hare = XCDR (hare), \ | |
971 ((++len < suspicion_length) ? \ | |
972 ((void) 0) : \ | |
973 (((len & 1) ? \ | |
974 ((void) (tortoise = XCDR (XCDR (tortoise)))) : \ | |
975 ((void) 0)) \ | |
976 , \ | |
977 (EQ (hare, tortoise) ? \ | |
978 ((void) signal_circular_property_list_error (list)) : \ | |
979 ((void) 0))))) | |
980 | |
981 /* For a property list (alternating keywords/values) that may not be | |
982 in valid list format -- will signal an error if the list is not in | |
983 valid format. CONSVAR is used to keep track of the iterations | |
984 without modifying PLIST. | |
985 | |
986 We have to be tricky to still keep the same C format.*/ | |
987 #define EXTERNAL_PROPERTY_LIST_LOOP(tail, key, value, plist) \ | |
988 for (tail = plist; \ | |
989 (CONSP (tail) && CONSP (XCDR (tail)) ? \ | |
990 (key = XCAR (tail), value = XCAR (XCDR (tail))) : \ | |
991 (key = Qunbound, value = Qunbound)), \ | |
992 !NILP (tail); \ | |
993 tail = XCDR (XCDR (tail))) \ | |
994 if (UNBOUNDP (key)) \ | |
995 Fsignal (Qmalformed_property_list, list1 (plist)); \ | |
996 else | |
997 | |
998 #define PROPERTY_LIST_LOOP(tail, key, value, plist) \ | |
999 for (tail = plist; \ | |
1000 NILP (tail) ? 0 : \ | |
1001 (key = XCAR (tail), tail = XCDR (tail), \ | |
1002 value = XCAR (tail), tail = XCDR (tail), 1); \ | |
1003 ) | |
1004 | |
1005 /* Return 1 if LIST is properly acyclic and nil-terminated, else 0. */ | |
780 INLINE int TRUE_LIST_P (Lisp_Object object); | 1006 INLINE int TRUE_LIST_P (Lisp_Object object); |
781 INLINE int | 1007 INLINE int |
782 TRUE_LIST_P (Lisp_Object object) | 1008 TRUE_LIST_P (Lisp_Object object) |
783 { | 1009 { |
784 while (CONSP (object)) | 1010 Lisp_Object hare, tortoise; |
785 object = XCDR (object); | 1011 int len; |
786 return NILP (object); | 1012 |
1013 for (hare = tortoise = object, len = 0; | |
1014 CONSP (hare); | |
1015 hare = XCDR (hare), len++) | |
1016 { | |
1017 if (len < CIRCULAR_LIST_SUSPICION_LENGTH) | |
1018 continue; | |
1019 | |
1020 if (len & 1) | |
1021 tortoise = XCDR (tortoise); | |
1022 else if (EQ (hare, tortoise)) | |
1023 return 0; | |
1024 } | |
1025 | |
1026 return NILP (hare); | |
787 } | 1027 } |
788 | 1028 |
789 #define CHECK_TRUE_LIST(object) do { \ | 1029 /* Signal an error if LIST is not properly acyclic and nil-terminated. */ |
790 if (!TRUE_LIST_P (object)) \ | 1030 #define CHECK_TRUE_LIST(list) do { \ |
791 dead_wrong_type_argument (Qtrue_list_p, object); \ | 1031 Lisp_Object CTL_list = (list); \ |
1032 Lisp_Object CTL_hare, CTL_tortoise; \ | |
1033 int CTL_len; \ | |
1034 \ | |
1035 for (CTL_hare = CTL_tortoise = CTL_list, CTL_len = 0; \ | |
1036 CONSP (CTL_hare); \ | |
1037 CTL_hare = XCDR (CTL_hare), CTL_len++) \ | |
1038 { \ | |
1039 if (CTL_len < CIRCULAR_LIST_SUSPICION_LENGTH) \ | |
1040 continue; \ | |
1041 \ | |
1042 if (CTL_len & 1) \ | |
1043 CTL_tortoise = XCDR (CTL_tortoise); \ | |
1044 else if (EQ (CTL_hare, CTL_tortoise)) \ | |
1045 Fsignal (Qcircular_list, list1 (CTL_list)); \ | |
1046 } \ | |
1047 \ | |
1048 if (! NILP (CTL_hare)) \ | |
1049 signal_malformed_list_error (CTL_list); \ | |
792 } while (0) | 1050 } while (0) |
793 | 1051 |
794 /* For a property list (alternating keywords/values) that may not be | |
795 in valid list format -- will signal an error if the list is not in | |
796 valid format. CONSVAR is used to keep track of the iterations | |
797 without modifying LISTP. | |
798 | |
799 We have to be tricky to still keep the same C format.*/ | |
800 #define EXTERNAL_PROPERTY_LIST_LOOP(consvar, keyword, value, listp) \ | |
801 for (consvar = listp; \ | |
802 (CONSP (consvar) && CONSP (XCDR (consvar)) ? \ | |
803 (keyword = XCAR (consvar), value = XCAR (XCDR (consvar))) : \ | |
804 (keyword = Qunbound, value = Qunbound)), \ | |
805 !NILP (consvar); \ | |
806 consvar = XCDR (XCDR (consvar))) \ | |
807 if (UNBOUNDP (keyword)) \ | |
808 signal_simple_error ("Invalid property list format", listp); \ | |
809 else | |
810 | |
811 /*********** string ***********/ | 1052 /*********** string ***********/ |
812 | 1053 |
813 /* In a string or vector, the sign bit of the `size' is the gc mark bit */ | 1054 /* In a string, the markbit of the plist is used as the gc mark bit */ |
814 | 1055 |
815 /* (The size and data fields have underscores prepended to catch old | |
816 code that attempts to reference the fields directly) */ | |
817 struct Lisp_String | 1056 struct Lisp_String |
818 { | 1057 { |
819 #ifdef LRECORD_STRING | 1058 #ifdef LRECORD_STRING |
820 struct lrecord_header lheader; | 1059 struct lrecord_header lheader; |
821 #endif | 1060 #endif |
822 Bytecount _size; | 1061 Bytecount size; |
823 Bufbyte *_data; | 1062 Bufbyte *data; |
824 Lisp_Object plist; | 1063 Lisp_Object plist; |
825 }; | 1064 }; |
1065 typedef struct Lisp_String Lisp_String; | |
826 | 1066 |
827 #ifdef LRECORD_STRING | 1067 #ifdef LRECORD_STRING |
828 | 1068 |
829 DECLARE_LRECORD (string, struct Lisp_String); | 1069 DECLARE_LRECORD (string, Lisp_String); |
830 #define XSTRING(x) XRECORD (x, string, struct Lisp_String) | 1070 #define XSTRING(x) XRECORD (x, string, Lisp_String) |
831 #define XSETSTRING(x, p) XSETRECORD (x, p, string) | 1071 #define XSETSTRING(x, p) XSETRECORD (x, p, string) |
832 #define STRINGP(x) RECORDP (x, string) | 1072 #define STRINGP(x) RECORDP (x, string) |
833 #define GC_STRINGP(x) GC_RECORDP (x, string) | 1073 #define GC_STRINGP(x) GC_RECORDP (x, string) |
834 #define CHECK_STRING(x) CHECK_RECORD (x, string) | 1074 #define CHECK_STRING(x) CHECK_RECORD (x, string) |
835 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string) | 1075 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string) |
836 | 1076 |
837 #else /* ! LRECORD_STRING */ | 1077 #else /* ! LRECORD_STRING */ |
838 | 1078 |
839 DECLARE_NONRECORD (string, Lisp_Type_String, struct Lisp_String); | 1079 DECLARE_NONRECORD (string, Lisp_Type_String, Lisp_String); |
840 #define XSTRING(x) XNONRECORD (x, string, Lisp_Type_String, struct Lisp_String) | 1080 #define XSTRING(x) XNONRECORD (x, string, Lisp_Type_String, Lisp_String) |
841 #define XSETSTRING(x, p) XSETOBJ (x, Lisp_Type_String, p) | 1081 #define XSETSTRING(x, p) XSETOBJ (x, Lisp_Type_String, p) |
842 #define STRINGP(x) (XTYPE (x) == Lisp_Type_String) | 1082 #define STRINGP(x) (XTYPE (x) == Lisp_Type_String) |
843 #define GC_STRINGP(x) (XGCTYPE (x) == Lisp_Type_String) | 1083 #define GC_STRINGP(x) (XGCTYPE (x) == Lisp_Type_String) |
844 #define CHECK_STRING(x) CHECK_NONRECORD (x, Lisp_Type_String, Qstringp) | 1084 #define CHECK_STRING(x) CHECK_NONRECORD (x, Lisp_Type_String, Qstringp) |
845 #define CONCHECK_STRING(x) CONCHECK_NONRECORD (x, Lisp_Type_String, Qstringp) | 1085 #define CONCHECK_STRING(x) CONCHECK_NONRECORD (x, Lisp_Type_String, Qstringp) |
856 # define bytecount_to_charcount(ptr, len) (len) | 1096 # define bytecount_to_charcount(ptr, len) (len) |
857 # define charcount_to_bytecount(ptr, len) (len) | 1097 # define charcount_to_bytecount(ptr, len) (len) |
858 | 1098 |
859 #endif /* not MULE */ | 1099 #endif /* not MULE */ |
860 | 1100 |
861 #define string_length(s) ((s)->_size) | 1101 #define string_length(s) ((s)->size) |
862 #define XSTRING_LENGTH(s) string_length (XSTRING (s)) | 1102 #define XSTRING_LENGTH(s) string_length (XSTRING (s)) |
863 #define XSTRING_CHAR_LENGTH(s) string_char_length (XSTRING (s)) | 1103 #define XSTRING_CHAR_LENGTH(s) string_char_length (XSTRING (s)) |
864 #define string_data(s) ((s)->_data + 0) | 1104 #define string_data(s) ((s)->data + 0) |
865 #define XSTRING_DATA(s) string_data (XSTRING (s)) | 1105 #define XSTRING_DATA(s) string_data (XSTRING (s)) |
866 #define string_byte(s, i) ((s)->_data[i] + 0) | 1106 #define string_byte(s, i) ((s)->data[i] + 0) |
867 #define XSTRING_BYTE(s, i) string_byte (XSTRING (s), i) | 1107 #define XSTRING_BYTE(s, i) string_byte (XSTRING (s), i) |
868 #define string_byte_addr(s, i) (&((s)->_data[i])) | 1108 #define string_byte_addr(s, i) (&((s)->data[i])) |
869 #define set_string_length(s, len) ((void) ((s)->_size = (len))) | 1109 #define set_string_length(s, len) ((void) ((s)->size = (len))) |
870 #define set_string_data(s, ptr) ((void) ((s)->_data = (ptr))) | 1110 #define set_string_data(s, ptr) ((void) ((s)->data = (ptr))) |
871 #define set_string_byte(s, i, c) ((void) ((s)->_data[i] = (c))) | 1111 #define set_string_byte(s, i, c) ((void) ((s)->data[i] = (c))) |
872 | 1112 |
873 void resize_string (struct Lisp_String *s, Bytecount pos, Bytecount delta); | 1113 void resize_string (Lisp_String *s, Bytecount pos, Bytecount delta); |
874 | 1114 |
875 #ifdef MULE | 1115 #ifdef MULE |
876 | 1116 |
877 INLINE Charcount string_char_length (struct Lisp_String *s); | 1117 INLINE Charcount string_char_length (Lisp_String *s); |
878 INLINE Charcount | 1118 INLINE Charcount |
879 string_char_length (struct Lisp_String *s) | 1119 string_char_length (Lisp_String *s) |
880 { | 1120 { |
881 return bytecount_to_charcount (string_data (s), string_length (s)); | 1121 return bytecount_to_charcount (string_data (s), string_length (s)); |
882 } | 1122 } |
883 | 1123 |
884 # define string_char(s, i) charptr_emchar_n (string_data (s), i) | 1124 # define string_char(s, i) charptr_emchar_n (string_data (s), i) |
885 # define string_char_addr(s, i) charptr_n_addr (string_data (s), i) | 1125 # define string_char_addr(s, i) charptr_n_addr (string_data (s), i) |
886 void set_string_char (struct Lisp_String *s, Charcount i, Emchar c); | 1126 void set_string_char (Lisp_String *s, Charcount i, Emchar c); |
887 | 1127 |
888 #else /* not MULE */ | 1128 #else /* not MULE */ |
889 | 1129 |
890 # define string_char_length(s) string_length (s) | 1130 # define string_char_length(s) string_length (s) |
891 # define string_char(s, i) ((Emchar) string_byte (s, i)) | 1131 # define string_char(s, i) ((Emchar) string_byte (s, i)) |
905 /* next is now chained through v->contents[size], terminated by Qzero. | 1145 /* next is now chained through v->contents[size], terminated by Qzero. |
906 This means that pure vectors don't need a "next" */ | 1146 This means that pure vectors don't need a "next" */ |
907 /* struct Lisp_Vector *next; */ | 1147 /* struct Lisp_Vector *next; */ |
908 Lisp_Object contents[1]; | 1148 Lisp_Object contents[1]; |
909 }; | 1149 }; |
1150 typedef struct Lisp_Vector Lisp_Vector; | |
910 | 1151 |
911 #ifdef LRECORD_VECTOR | 1152 #ifdef LRECORD_VECTOR |
912 | 1153 |
913 DECLARE_LRECORD (vector, struct Lisp_Vector); | 1154 DECLARE_LRECORD (vector, Lisp_Vector); |
914 #define XVECTOR(x) XRECORD (x, vector, struct Lisp_Vector) | 1155 #define XVECTOR(x) XRECORD (x, vector, Lisp_Vector) |
915 #define XSETVECTOR(x, p) XSETRECORD (x, p, vector) | 1156 #define XSETVECTOR(x, p) XSETRECORD (x, p, vector) |
916 #define VECTORP(x) RECORDP (x, vector) | 1157 #define VECTORP(x) RECORDP (x, vector) |
917 #define GC_VECTORP(x) GC_RECORDP (x, vector) | 1158 #define GC_VECTORP(x) GC_RECORDP (x, vector) |
918 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector) | 1159 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector) |
919 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector) | 1160 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector) |
920 | 1161 |
921 #else | 1162 #else |
922 | 1163 |
923 DECLARE_NONRECORD (vector, Lisp_Type_Vector, struct Lisp_Vector); | 1164 DECLARE_NONRECORD (vector, Lisp_Type_Vector, Lisp_Vector); |
924 #define XVECTOR(x) XNONRECORD (x, vector, Lisp_Type_Vector, struct Lisp_Vector) | 1165 #define XVECTOR(x) XNONRECORD (x, vector, Lisp_Type_Vector, Lisp_Vector) |
925 #define XSETVECTOR(x, p) XSETOBJ (x, Lisp_Type_Vector, p) | 1166 #define XSETVECTOR(x, p) XSETOBJ (x, Lisp_Type_Vector, p) |
926 #define VECTORP(x) (XTYPE (x) == Lisp_Type_Vector) | 1167 #define VECTORP(x) (XTYPE (x) == Lisp_Type_Vector) |
927 #define GC_VECTORP(x) (XGCTYPE (x) == Lisp_Type_Vector) | 1168 #define GC_VECTORP(x) (XGCTYPE (x) == Lisp_Type_Vector) |
928 #define CHECK_VECTOR(x) CHECK_NONRECORD (x, Lisp_Type_Vector, Qvectorp) | 1169 #define CHECK_VECTOR(x) CHECK_NONRECORD (x, Lisp_Type_Vector, Qvectorp) |
929 #define CONCHECK_VECTOR(x) CONCHECK_NONRECORD (x, Lisp_Type_Vector, Qvectorp) | 1170 #define CONCHECK_VECTOR(x) CONCHECK_NONRECORD (x, Lisp_Type_Vector, Qvectorp) |
957 | 1198 |
958 struct Lisp_Bit_Vector | 1199 struct Lisp_Bit_Vector |
959 { | 1200 { |
960 struct lrecord_header lheader; | 1201 struct lrecord_header lheader; |
961 Lisp_Object next; | 1202 Lisp_Object next; |
962 long size; | 1203 size_t size; |
963 unsigned long bits[1]; | 1204 unsigned long bits[1]; |
964 }; | 1205 }; |
965 | 1206 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector; |
966 DECLARE_LRECORD (bit_vector, struct Lisp_Bit_Vector); | 1207 |
967 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, struct Lisp_Bit_Vector) | 1208 DECLARE_LRECORD (bit_vector, Lisp_Bit_Vector); |
1209 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, Lisp_Bit_Vector) | |
968 #define XSETBIT_VECTOR(x, p) XSETRECORD (x, p, bit_vector) | 1210 #define XSETBIT_VECTOR(x, p) XSETRECORD (x, p, bit_vector) |
969 #define BIT_VECTORP(x) RECORDP (x, bit_vector) | 1211 #define BIT_VECTORP(x) RECORDP (x, bit_vector) |
970 #define GC_BIT_VECTORP(x) GC_RECORDP (x, bit_vector) | 1212 #define GC_BIT_VECTORP(x) GC_RECORDP (x, bit_vector) |
971 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector) | 1213 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector) |
972 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector) | 1214 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector) |
985 } while (0) | 1227 } while (0) |
986 | 1228 |
987 #define bit_vector_length(v) ((v)->size) | 1229 #define bit_vector_length(v) ((v)->size) |
988 #define bit_vector_next(v) ((v)->next) | 1230 #define bit_vector_next(v) ((v)->next) |
989 | 1231 |
990 INLINE int bit_vector_bit (struct Lisp_Bit_Vector *v, int i); | 1232 INLINE int bit_vector_bit (Lisp_Bit_Vector *v, int i); |
991 INLINE int | 1233 INLINE int |
992 bit_vector_bit (struct Lisp_Bit_Vector *v, int i) | 1234 bit_vector_bit (Lisp_Bit_Vector *v, int i) |
993 { | 1235 { |
994 unsigned int ui = (unsigned int) i; | 1236 unsigned int ui = (unsigned int) i; |
995 | 1237 |
996 return (((v)->bits[ui >> LONGBITS_LOG2] >> (ui & (LONGBITS_POWER_OF_2 - 1))) | 1238 return (((v)->bits[ui >> LONGBITS_LOG2] >> (ui & (LONGBITS_POWER_OF_2 - 1))) |
997 & 1); | 1239 & 1); |
998 } | 1240 } |
999 | 1241 |
1000 INLINE void set_bit_vector_bit (struct Lisp_Bit_Vector *v, int i, int value); | 1242 INLINE void set_bit_vector_bit (Lisp_Bit_Vector *v, int i, int value); |
1001 INLINE void | 1243 INLINE void |
1002 set_bit_vector_bit (struct Lisp_Bit_Vector *v, int i, int value) | 1244 set_bit_vector_bit (Lisp_Bit_Vector *v, int i, int value) |
1003 { | 1245 { |
1004 unsigned int ui = (unsigned int) i; | 1246 unsigned int ui = (unsigned int) i; |
1005 if (value) | 1247 if (value) |
1006 (v)->bits[ui >> LONGBITS_LOG2] |= (1 << (ui & (LONGBITS_POWER_OF_2 - 1))); | 1248 (v)->bits[ui >> LONGBITS_LOG2] |= (1U << (ui & (LONGBITS_POWER_OF_2 - 1))); |
1007 else | 1249 else |
1008 (v)->bits[ui >> LONGBITS_LOG2] &= ~(1 << (ui & (LONGBITS_POWER_OF_2 - 1))); | 1250 (v)->bits[ui >> LONGBITS_LOG2] &= ~(1U << (ui & (LONGBITS_POWER_OF_2 - 1))); |
1009 } | 1251 } |
1010 | 1252 |
1011 /* Number of longs required to hold LEN bits */ | 1253 /* Number of longs required to hold LEN bits */ |
1012 #define BIT_VECTOR_LONG_STORAGE(len) \ | 1254 #define BIT_VECTOR_LONG_STORAGE(len) \ |
1013 ((len + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2) | 1255 ((len + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2) |
1029 Lisp_Object function; | 1271 Lisp_Object function; |
1030 /* non-nil if the symbol is interned in Vobarray */ | 1272 /* non-nil if the symbol is interned in Vobarray */ |
1031 Lisp_Object obarray; | 1273 Lisp_Object obarray; |
1032 Lisp_Object plist; | 1274 Lisp_Object plist; |
1033 }; | 1275 }; |
1276 typedef struct Lisp_Symbol Lisp_Symbol; | |
1034 | 1277 |
1035 #define SYMBOL_IS_KEYWORD(sym) (string_byte (XSYMBOL(sym)->name, 0) == ':') | 1278 #define SYMBOL_IS_KEYWORD(sym) (string_byte (XSYMBOL(sym)->name, 0) == ':') |
1036 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj)) | 1279 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj)) |
1037 | 1280 |
1038 #ifdef LRECORD_SYMBOL | 1281 #ifdef LRECORD_SYMBOL |
1039 | 1282 |
1040 DECLARE_LRECORD (symbol, struct Lisp_Symbol); | 1283 DECLARE_LRECORD (symbol, Lisp_Symbol); |
1041 #define XSYMBOL(x) XRECORD (x, symbol, struct Lisp_Symbol) | 1284 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol) |
1042 #define XSETSYMBOL(x, p) XSETRECORD (x, p, symbol) | 1285 #define XSETSYMBOL(x, p) XSETRECORD (x, p, symbol) |
1043 #define SYMBOLP(x) RECORDP (x, symbol) | 1286 #define SYMBOLP(x) RECORDP (x, symbol) |
1044 #define GC_SYMBOLP(x) GC_RECORDP (x, symbol) | 1287 #define GC_SYMBOLP(x) GC_RECORDP (x, symbol) |
1045 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol) | 1288 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol) |
1046 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol) | 1289 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol) |
1047 | 1290 |
1048 #else | 1291 #else |
1049 | 1292 |
1050 DECLARE_NONRECORD (symbol, Lisp_Type_Symbol, struct Lisp_Symbol); | 1293 DECLARE_NONRECORD (symbol, Lisp_Type_Symbol, Lisp_Symbol); |
1051 #define XSYMBOL(x) XNONRECORD (x, symbol, Lisp_Type_Symbol, struct Lisp_Symbol) | 1294 #define XSYMBOL(x) XNONRECORD (x, symbol, Lisp_Type_Symbol, Lisp_Symbol) |
1052 #define XSETSYMBOL(s, p) XSETOBJ ((s), Lisp_Type_Symbol, (p)) | 1295 #define XSETSYMBOL(s, p) XSETOBJ ((s), Lisp_Type_Symbol, (p)) |
1053 #define SYMBOLP(x) (XTYPE (x) == Lisp_Type_Symbol) | 1296 #define SYMBOLP(x) (XTYPE (x) == Lisp_Type_Symbol) |
1054 #define GC_SYMBOLP(x) (XGCTYPE (x) == Lisp_Type_Symbol) | 1297 #define GC_SYMBOLP(x) (XGCTYPE (x) == Lisp_Type_Symbol) |
1055 #define CHECK_SYMBOL(x) CHECK_NONRECORD (x, Lisp_Type_Symbol, Qsymbolp) | 1298 #define CHECK_SYMBOL(x) CHECK_NONRECORD (x, Lisp_Type_Symbol, Qsymbolp) |
1056 #define CONCHECK_SYMBOL(x) CONCHECK_NONRECORD (x, Lisp_Type_Symbol, Qsymbolp) | 1299 #define CONCHECK_SYMBOL(x) CONCHECK_NONRECORD (x, Lisp_Type_Symbol, Qsymbolp) |
1074 CONST char *prompt; | 1317 CONST char *prompt; |
1075 CONST char *doc; | 1318 CONST char *doc; |
1076 CONST char *name; | 1319 CONST char *name; |
1077 lisp_fn_t subr_fn; | 1320 lisp_fn_t subr_fn; |
1078 }; | 1321 }; |
1079 | 1322 typedef struct Lisp_Subr Lisp_Subr; |
1080 DECLARE_LRECORD (subr, struct Lisp_Subr); | 1323 |
1081 #define XSUBR(x) XRECORD (x, subr, struct Lisp_Subr) | 1324 DECLARE_LRECORD (subr, Lisp_Subr); |
1325 #define XSUBR(x) XRECORD (x, subr, Lisp_Subr) | |
1082 #define XSETSUBR(x, p) XSETRECORD (x, p, subr) | 1326 #define XSETSUBR(x, p) XSETRECORD (x, p, subr) |
1083 #define SUBRP(x) RECORDP (x, subr) | 1327 #define SUBRP(x) RECORDP (x, subr) |
1084 #define GC_SUBRP(x) GC_RECORDP (x, subr) | 1328 #define GC_SUBRP(x) GC_RECORDP (x, subr) |
1085 #define CHECK_SUBR(x) CHECK_RECORD (x, subr) | 1329 #define CHECK_SUBR(x) CHECK_RECORD (x, subr) |
1086 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr) | 1330 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr) |
1096 struct Lisp_Marker *next, *prev; | 1340 struct Lisp_Marker *next, *prev; |
1097 struct buffer *buffer; | 1341 struct buffer *buffer; |
1098 Memind memind; | 1342 Memind memind; |
1099 char insertion_type; | 1343 char insertion_type; |
1100 }; | 1344 }; |
1101 | 1345 typedef struct Lisp_Marker Lisp_Marker; |
1102 DECLARE_LRECORD (marker, struct Lisp_Marker); | 1346 |
1103 #define XMARKER(x) XRECORD (x, marker, struct Lisp_Marker) | 1347 DECLARE_LRECORD (marker, Lisp_Marker); |
1348 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker) | |
1104 #define XSETMARKER(x, p) XSETRECORD (x, p, marker) | 1349 #define XSETMARKER(x, p) XSETRECORD (x, p, marker) |
1105 #define MARKERP(x) RECORDP (x, marker) | 1350 #define MARKERP(x) RECORDP (x, marker) |
1106 #define GC_MARKERP(x) GC_RECORDP (x, marker) | 1351 #define GC_MARKERP(x) GC_RECORDP (x, marker) |
1107 #define CHECK_MARKER(x) CHECK_RECORD (x, marker) | 1352 #define CHECK_MARKER(x) CHECK_RECORD (x, marker) |
1108 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker) | 1353 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker) |
1140 | 1385 |
1141 /*********** float ***********/ | 1386 /*********** float ***********/ |
1142 | 1387 |
1143 #ifdef LISP_FLOAT_TYPE | 1388 #ifdef LISP_FLOAT_TYPE |
1144 | 1389 |
1145 /* Note: the 'unused__next__' field exists only to ensure that the | 1390 /* Note: the 'unused_next_' field exists only to ensure that the |
1146 `next' pointer fits within the structure, for the purposes of the | 1391 `next' pointer fits within the structure, for the purposes of the |
1147 free list. This makes a difference in the unlikely case of | 1392 free list. This makes a difference in the unlikely case of |
1148 sizeof(double) being smaller than sizeof(void *). */ | 1393 sizeof(double) being smaller than sizeof(void *). */ |
1149 | 1394 |
1150 struct Lisp_Float | 1395 struct Lisp_Float |
1151 { | 1396 { |
1152 struct lrecord_header lheader; | 1397 struct lrecord_header lheader; |
1153 union { double d; struct Lisp_Float *unused__next__; } data; | 1398 union { double d; struct Lisp_Float *unused_next_; } data; |
1154 }; | 1399 }; |
1155 | 1400 typedef struct Lisp_Float Lisp_Float; |
1156 DECLARE_LRECORD (float, struct Lisp_Float); | 1401 |
1157 #define XFLOAT(x) XRECORD (x, float, struct Lisp_Float) | 1402 DECLARE_LRECORD (float, Lisp_Float); |
1403 #define XFLOAT(x) XRECORD (x, float, Lisp_Float) | |
1158 #define XSETFLOAT(x, p) XSETRECORD (x, p, float) | 1404 #define XSETFLOAT(x, p) XSETRECORD (x, p, float) |
1159 #define FLOATP(x) RECORDP (x, float) | 1405 #define FLOATP(x) RECORDP (x, float) |
1160 #define GC_FLOATP(x) GC_RECORDP (x, float) | 1406 #define GC_FLOATP(x) GC_RECORDP (x, float) |
1161 #define CHECK_FLOAT(x) CHECK_RECORD (x, float) | 1407 #define CHECK_FLOAT(x) CHECK_RECORD (x, float) |
1162 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float) | 1408 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float) |
1163 | 1409 |
1164 #define float_data(f) ((f)->data.d) | 1410 #define float_data(f) ((f)->data.d) |
1411 #define XFLOAT_DATA(x) float_data (XFLOAT (x)) | |
1165 | 1412 |
1166 #define XFLOATINT(n) extract_float (n) | 1413 #define XFLOATINT(n) extract_float (n) |
1167 | 1414 |
1168 #define CHECK_INT_OR_FLOAT(x) do { \ | 1415 #define CHECK_INT_OR_FLOAT(x) do { \ |
1169 if (!INT_OR_FLOATP (x)) \ | 1416 if (!INT_OR_FLOATP (x)) \ |
1171 } while (0) | 1418 } while (0) |
1172 | 1419 |
1173 #define CONCHECK_INT_OR_FLOAT(x) do { \ | 1420 #define CONCHECK_INT_OR_FLOAT(x) do { \ |
1174 if (!INT_OR_FLOATP (x)) \ | 1421 if (!INT_OR_FLOATP (x)) \ |
1175 x = wrong_type_argument (Qnumberp, x); \ | 1422 x = wrong_type_argument (Qnumberp, x); \ |
1176 } while (0) | |
1177 | |
1178 /* These are always continuable because they change their arguments | |
1179 even when no error is signalled. */ | |
1180 | |
1181 #define CHECK_INT_OR_FLOAT_COERCE_MARKER(x) do { \ | |
1182 if (INT_OR_FLOATP (x)) \ | |
1183 ; \ | |
1184 else if (MARKERP (x)) \ | |
1185 x = make_int (marker_position (x)); \ | |
1186 else \ | |
1187 x = wrong_type_argument (Qnumber_or_marker_p, x); \ | |
1188 } while (0) | |
1189 | |
1190 #define CHECK_INT_OR_FLOAT_COERCE_CHAR_OR_MARKER(x) do { \ | |
1191 if (INT_OR_FLOATP (x)) \ | |
1192 ; \ | |
1193 else if (CHARP (x)) \ | |
1194 x = make_int (XCHAR (x)); \ | |
1195 else if (MARKERP (x)) \ | |
1196 x = make_int (marker_position (x)); \ | |
1197 else \ | |
1198 x = wrong_type_argument (Qnumber_char_or_marker_p, x); \ | |
1199 } while (0) | 1423 } while (0) |
1200 | 1424 |
1201 # define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x)) | 1425 # define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x)) |
1202 # define GC_INT_OR_FLOATP(x) (GC_INTP (x) || GC_FLOATP (x)) | 1426 # define GC_INT_OR_FLOATP(x) (GC_INTP (x) || GC_FLOATP (x)) |
1203 | 1427 |
1211 #define CONCHECK_FLOAT(x) --- error! No float support. --- | 1435 #define CONCHECK_FLOAT(x) --- error! No float support. --- |
1212 | 1436 |
1213 #define XFLOATINT(n) XINT(n) | 1437 #define XFLOATINT(n) XINT(n) |
1214 #define CHECK_INT_OR_FLOAT CHECK_INT | 1438 #define CHECK_INT_OR_FLOAT CHECK_INT |
1215 #define CONCHECK_INT_OR_FLOAT CONCHECK_INT | 1439 #define CONCHECK_INT_OR_FLOAT CONCHECK_INT |
1216 #define CHECK_INT_OR_FLOAT_COERCE_MARKER CHECK_INT_COERCE_MARKER | |
1217 #define CHECK_INT_OR_FLOAT_COERCE_CHAR_OR_MARKER \ | |
1218 CHECK_INT_COERCE_CHAR_OR_MARKER | |
1219 #define INT_OR_FLOATP(x) (INTP (x)) | 1440 #define INT_OR_FLOATP(x) (INTP (x)) |
1220 # define GC_INT_OR_FLOATP(x) (GC_INTP (x)) | 1441 # define GC_INT_OR_FLOATP(x) (GC_INTP (x)) |
1221 | 1442 |
1222 #endif /* not LISP_FLOAT_TYPE */ | 1443 #endif /* not LISP_FLOAT_TYPE */ |
1223 | 1444 |
1303 else if (MARKERP (x)) \ | 1524 else if (MARKERP (x)) \ |
1304 x = make_int (marker_position (x)); \ | 1525 x = make_int (marker_position (x)); \ |
1305 else \ | 1526 else \ |
1306 x = wrong_type_argument (Qinteger_char_or_marker_p, x); \ | 1527 x = wrong_type_argument (Qinteger_char_or_marker_p, x); \ |
1307 } while (0) | 1528 } while (0) |
1529 | |
1308 | 1530 |
1309 /*********** pure space ***********/ | 1531 /*********** pure space ***********/ |
1310 | 1532 |
1311 #define CHECK_IMPURE(obj) \ | 1533 #define CHECK_IMPURE(obj) \ |
1312 do { if (purified (obj)) pure_write_error (obj); } while (0) | 1534 do { if (purified (obj)) pure_write_error (obj); } while (0) |
1417 Lisp_Object allocate_managed_lcrecord (Lisp_Object lcrecord_list); | 1639 Lisp_Object allocate_managed_lcrecord (Lisp_Object lcrecord_list); |
1418 void free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord); | 1640 void free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord); |
1419 | 1641 |
1420 | 1642 |
1421 /************************************************************************/ | 1643 /************************************************************************/ |
1422 /* Definitions of primitive Lisp functions and variables */ | 1644 /* Definitions of primitive Lisp functions and variables */ |
1423 /************************************************************************/ | 1645 /************************************************************************/ |
1424 | 1646 |
1425 | 1647 |
1426 /* DEFUN - Define a built-in Lisp-visible C function or `subr'. | 1648 /* DEFUN - Define a built-in Lisp-visible C function or `subr'. |
1427 `lname' should be the name to give the function in Lisp, | 1649 `lname' should be the name to give the function in Lisp, |
1428 as a null-terminated C string. | 1650 as a null-terminated C string. |
1429 `Fname' should be the C equivalent of `lname', using only characters | 1651 `Fname' should be the C equivalent of `lname', using only characters |
1430 valid in a C identifier, with an "F" prepended. | 1652 valid in a C identifier, with an "F" prepended. |
1431 The name of the C constant structure that records information | 1653 The name of the C constant structure that records information |
1432 on this function for internal use is "S" concatenated with Fname. | 1654 on this function for internal use is "S" concatenated with Fname. |
1433 `minargs' should be a number, the minimum number of arguments allowed. | 1655 `min_args' should be a number, the minimum number of arguments allowed. |
1434 `maxargs' should be a number, the maximum number of arguments allowed, | 1656 `max_args' should be a number, the maximum number of arguments allowed, |
1435 or else MANY or UNEVALLED. | 1657 or else MANY or UNEVALLED. |
1436 MANY means pass a vector of evaluated arguments, | 1658 MANY means pass a vector of evaluated arguments, |
1437 in the form of an integer number-of-arguments | 1659 in the form of an integer number-of-arguments |
1438 followed by the address of a vector of Lisp_Objects | 1660 followed by the address of a vector of Lisp_Objects |
1439 which contains the argument values. | 1661 which contains the argument values. |
1460 Lisp_Object,Lisp_Object | 1682 Lisp_Object,Lisp_Object |
1461 #define EXFUN_8 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \ | 1683 #define EXFUN_8 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \ |
1462 Lisp_Object,Lisp_Object,Lisp_Object | 1684 Lisp_Object,Lisp_Object,Lisp_Object |
1463 #define EXFUN_MANY int, Lisp_Object* | 1685 #define EXFUN_MANY int, Lisp_Object* |
1464 #define EXFUN_UNEVALLED Lisp_Object | 1686 #define EXFUN_UNEVALLED Lisp_Object |
1465 #define EXFUN(sym, maxargs) Lisp_Object sym (EXFUN_##maxargs) | 1687 #define EXFUN(sym, max_args) Lisp_Object sym (EXFUN_##max_args) |
1466 | 1688 |
1467 #define SUBR_MAX_ARGS 8 | 1689 #define SUBR_MAX_ARGS 8 |
1468 #define MANY -2 | 1690 #define MANY -2 |
1469 #define UNEVALLED -1 | 1691 #define UNEVALLED -1 |
1470 | 1692 |
1475 # define subr_lheader_initializer { 0, 0, 0 } | 1697 # define subr_lheader_initializer { 0, 0, 0 } |
1476 #else | 1698 #else |
1477 # define subr_lheader_initializer { lrecord_subr } | 1699 # define subr_lheader_initializer { lrecord_subr } |
1478 #endif | 1700 #endif |
1479 | 1701 |
1480 #define DEFUN(lname, Fname, minargs, maxargs, prompt, arglist) \ | 1702 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \ |
1481 Lisp_Object Fname (EXFUN_##maxargs); \ | 1703 Lisp_Object Fname (EXFUN_##max_args); \ |
1482 static struct Lisp_Subr S##Fname = { subr_lheader_initializer, \ | 1704 static struct Lisp_Subr S##Fname = { subr_lheader_initializer, \ |
1483 minargs, maxargs, prompt, 0, lname, (lisp_fn_t) Fname }; \ | 1705 min_args, max_args, prompt, 0, lname, (lisp_fn_t) Fname }; \ |
1484 Lisp_Object Fname (DEFUN_##maxargs arglist) | 1706 Lisp_Object Fname (DEFUN_##max_args arglist) |
1485 | 1707 |
1486 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a | 1708 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a |
1487 prototype that matches maxargs, and add the obligatory | 1709 prototype that matches max_args, and add the obligatory |
1488 `Lisp_Object' type declaration to the formal C arguments. */ | 1710 `Lisp_Object' type declaration to the formal C arguments. */ |
1489 | 1711 |
1490 #define DEFUN_MANY(named_int, named_Lisp_Object) named_int, named_Lisp_Object | 1712 #define DEFUN_MANY(named_int, named_Lisp_Object) named_int, named_Lisp_Object |
1491 #define DEFUN_UNEVALLED(args) Lisp_Object args | 1713 #define DEFUN_UNEVALLED(args) Lisp_Object args |
1492 #define DEFUN_0() void | 1714 #define DEFUN_0() void |
1497 #define DEFUN_5(a,b,c,d,e) DEFUN_4(a,b,c,d), Lisp_Object e | 1719 #define DEFUN_5(a,b,c,d,e) DEFUN_4(a,b,c,d), Lisp_Object e |
1498 #define DEFUN_6(a,b,c,d,e,f) DEFUN_5(a,b,c,d,e), Lisp_Object f | 1720 #define DEFUN_6(a,b,c,d,e,f) DEFUN_5(a,b,c,d,e), Lisp_Object f |
1499 #define DEFUN_7(a,b,c,d,e,f,g) DEFUN_6(a,b,c,d,e,f), Lisp_Object g | 1721 #define DEFUN_7(a,b,c,d,e,f,g) DEFUN_6(a,b,c,d,e,f), Lisp_Object g |
1500 #define DEFUN_8(a,b,c,d,e,f,g,h) DEFUN_7(a,b,c,d,e,f,g),Lisp_Object h | 1722 #define DEFUN_8(a,b,c,d,e,f,g,h) DEFUN_7(a,b,c,d,e,f,g),Lisp_Object h |
1501 | 1723 |
1502 /* WARNING: If you add defines here for higher values of maxargs, | 1724 /* WARNING: If you add defines here for higher values of max_args, |
1503 make sure to also fix the clauses in inline_funcall_fn(), | 1725 make sure to also fix the clauses in PRIMITIVE_FUNCALL(), |
1504 and change the define of SUBR_MAX_ARGS above. */ | 1726 and change the define of SUBR_MAX_ARGS above. */ |
1505 | 1727 |
1506 #include "symeval.h" | 1728 #include "symeval.h" |
1507 | 1729 |
1508 /* Depth of special binding/unwind-protect stack. Use as arg to `unbind_to' */ | 1730 /* `specpdl' is the special binding/unwind-protect stack. |
1509 int specpdl_depth (void); | 1731 |
1732 Knuth says (see the Jargon File): | |
1733 At MIT, `pdl' [abbreviation for `Push Down List'] used to | |
1734 be a more common synonym for `stack'. | |
1735 Everywhere else `stack' seems to be the preferred term. | |
1736 | |
1737 specpdl_depth is the current depth of `specpdl'. | |
1738 Save this for use later as arg to `unbind_to'. */ | |
1739 extern int specpdl_depth_counter; | |
1740 #define specpdl_depth() specpdl_depth_counter | |
1510 | 1741 |
1511 | 1742 |
1512 /************************************************************************/ | 1743 /************************************************************************/ |
1513 /* Checking for QUIT */ | 1744 /* Checking for QUIT */ |
1514 /************************************************************************/ | 1745 /************************************************************************/ |
1515 | 1746 |
1516 /* Asynchronous events set something_happened, and then are processed | 1747 /* Asynchronous events set something_happened, and then are processed |
1517 within the QUIT macro. At this point, we are guaranteed to not be in | 1748 within the QUIT macro. At this point, we are guaranteed to not be in |
1518 any sensitive code. */ | 1749 any sensitive code. */ |
1552 | 1783 |
1553 #define REALLY_QUIT do { if (INTERNAL_REALLY_QUITP) signal_quit (); } while (0) | 1784 #define REALLY_QUIT do { if (INTERNAL_REALLY_QUITP) signal_quit (); } while (0) |
1554 | 1785 |
1555 | 1786 |
1556 /************************************************************************/ | 1787 /************************************************************************/ |
1557 /* hashing */ | 1788 /* hashing */ |
1558 /************************************************************************/ | 1789 /************************************************************************/ |
1559 | 1790 |
1560 /* #### for a 64-bit machine, we should substitute a prime just over 2^32 */ | 1791 /* #### for a 64-bit machine, we should substitute a prime just over 2^32 */ |
1561 #define GOOD_HASH 65599 /* prime number just over 2^16; Dragon book, p. 435 */ | 1792 #define GOOD_HASH 65599 /* prime number just over 2^16; Dragon book, p. 435 */ |
1562 #define HASH2(a,b) (GOOD_HASH * (a) + (b)) | 1793 #define HASH2(a,b) (GOOD_HASH * (a) + (b)) |
1566 #define HASH6(a,b,c,d,e,f) (GOOD_HASH * HASH5 (a,b,c,d,e) + (f)) | 1797 #define HASH6(a,b,c,d,e,f) (GOOD_HASH * HASH5 (a,b,c,d,e) + (f)) |
1567 #define HASH7(a,b,c,d,e,f,g) (GOOD_HASH * HASH6 (a,b,c,d,e,f) + (g)) | 1798 #define HASH7(a,b,c,d,e,f,g) (GOOD_HASH * HASH6 (a,b,c,d,e,f) + (g)) |
1568 #define HASH8(a,b,c,d,e,f,g,h) (GOOD_HASH * HASH7 (a,b,c,d,e,f,g) + (h)) | 1799 #define HASH8(a,b,c,d,e,f,g,h) (GOOD_HASH * HASH7 (a,b,c,d,e,f,g) + (h)) |
1569 #define HASH9(a,b,c,d,e,f,g,h,i) (GOOD_HASH * HASH8 (a,b,c,d,e,f,g,h) + (i)) | 1800 #define HASH9(a,b,c,d,e,f,g,h,i) (GOOD_HASH * HASH8 (a,b,c,d,e,f,g,h) + (i)) |
1570 | 1801 |
1571 /* Enough already! */ | |
1572 | |
1573 #define LISP_HASH(obj) ((unsigned long) LISP_TO_VOID (obj)) | 1802 #define LISP_HASH(obj) ((unsigned long) LISP_TO_VOID (obj)) |
1574 unsigned long string_hash (CONST void *xv); | 1803 unsigned long string_hash (CONST void *xv); |
1575 unsigned long memory_hash (CONST void *xv, size_t size); | 1804 unsigned long memory_hash (CONST void *xv, size_t size); |
1576 unsigned long internal_hash (Lisp_Object obj, int depth); | 1805 unsigned long internal_hash (Lisp_Object obj, int depth); |
1577 unsigned long internal_array_hash (Lisp_Object *arr, int size, int depth); | 1806 unsigned long internal_array_hash (Lisp_Object *arr, int size, int depth); |
1578 | 1807 |
1579 | 1808 |
1580 /************************************************************************/ | 1809 /************************************************************************/ |
1581 /* String translation */ | 1810 /* String translation */ |
1582 /************************************************************************/ | 1811 /************************************************************************/ |
1583 | 1812 |
1584 #ifdef I18N3 | 1813 #ifdef I18N3 |
1585 #ifdef HAVE_LIBINTL_H | 1814 #ifdef HAVE_LIBINTL_H |
1586 #include <libintl.h> | 1815 #include <libintl.h> |
1604 */ | 1833 */ |
1605 #define DEFER_GETTEXT(x) (x) | 1834 #define DEFER_GETTEXT(x) (x) |
1606 | 1835 |
1607 | 1836 |
1608 /************************************************************************/ | 1837 /************************************************************************/ |
1609 /* Garbage collection / GC-protection */ | 1838 /* Garbage collection / GC-protection */ |
1610 /************************************************************************/ | 1839 /************************************************************************/ |
1611 | 1840 |
1612 /* number of bytes of structure consed since last GC */ | 1841 /* number of bytes of structure consed since last GC */ |
1613 | 1842 |
1614 extern EMACS_INT consing_since_gc; | 1843 extern EMACS_INT consing_since_gc; |
1706 #define NUNNGCPRO \ | 1935 #define NUNNGCPRO \ |
1707 debug_ungcpro(__FILE__, __LINE__,&nngcpro1) | 1936 debug_ungcpro(__FILE__, __LINE__,&nngcpro1) |
1708 | 1937 |
1709 #else /* ! DEBUG_GCPRO */ | 1938 #else /* ! DEBUG_GCPRO */ |
1710 | 1939 |
1711 #define GCPRO1(varname) \ | 1940 #define GCPRO1(var1) ((void) ( \ |
1712 {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \ | 1941 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \ |
1713 gcprolist = &gcpro1; } | 1942 gcprolist = &gcpro1 )) |
1714 | 1943 |
1715 #define GCPRO2(varname1, varname2) \ | 1944 #define GCPRO2(var1, var2) ((void) ( \ |
1716 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ | 1945 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \ |
1717 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ | 1946 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \ |
1718 gcprolist = &gcpro2; } | 1947 gcprolist = &gcpro2 )) |
1719 | 1948 |
1720 #define GCPRO3(varname1, varname2, varname3) \ | 1949 #define GCPRO3(var1, var2, var3) ((void) ( \ |
1721 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ | 1950 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \ |
1722 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ | 1951 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \ |
1723 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ | 1952 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \ |
1724 gcprolist = &gcpro3; } | 1953 gcprolist = &gcpro3 )) |
1725 | 1954 |
1726 #define GCPRO4(varname1, varname2, varname3, varname4) \ | 1955 #define GCPRO4(var1, var2, var3, var4) ((void) ( \ |
1727 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ | 1956 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \ |
1728 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ | 1957 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \ |
1729 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ | 1958 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \ |
1730 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ | 1959 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \ |
1731 gcprolist = &gcpro4; } | 1960 gcprolist = &gcpro4 )) |
1732 | 1961 |
1733 #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ | 1962 #define GCPRO5(var1, var2, var3, var4, var5) \ |
1734 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ | 1963 ((void) ( \ |
1735 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ | 1964 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \ |
1736 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ | 1965 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \ |
1737 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ | 1966 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \ |
1738 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ | 1967 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \ |
1739 gcprolist = &gcpro5; } | 1968 gcpro5.next = &gcpro4, gcpro5.var = &var5, gcpro5.nvars = 1, \ |
1740 | 1969 gcprolist = &gcpro5 )) |
1741 #define UNGCPRO (gcprolist = gcpro1.next) | 1970 |
1742 | 1971 #define UNGCPRO ((void) (gcprolist = gcpro1.next)) |
1743 #define NGCPRO1(varname) \ | 1972 |
1744 {ngcpro1.next = gcprolist; ngcpro1.var = &varname; ngcpro1.nvars = 1; \ | 1973 #define NGCPRO1(var1) ((void) ( \ |
1745 gcprolist = &ngcpro1; } | 1974 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \ |
1746 | 1975 gcprolist = &ngcpro1 )) |
1747 #define NGCPRO2(varname1, varname2) \ | 1976 |
1748 {ngcpro1.next = gcprolist; ngcpro1.var = &varname1; ngcpro1.nvars = 1; \ | 1977 #define NGCPRO2(var1, var2) ((void) ( \ |
1749 ngcpro2.next = &ngcpro1; ngcpro2.var = &varname2; ngcpro2.nvars = 1; \ | 1978 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \ |
1750 gcprolist = &ngcpro2; } | 1979 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \ |
1751 | 1980 gcprolist = &ngcpro2 )) |
1752 #define NGCPRO3(varname1, varname2, varname3) \ | 1981 |
1753 {ngcpro1.next = gcprolist; ngcpro1.var = &varname1; ngcpro1.nvars = 1; \ | 1982 #define NGCPRO3(var1, var2, var3) ((void) ( \ |
1754 ngcpro2.next = &ngcpro1; ngcpro2.var = &varname2; ngcpro2.nvars = 1; \ | 1983 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \ |
1755 ngcpro3.next = &ngcpro2; ngcpro3.var = &varname3; ngcpro3.nvars = 1; \ | 1984 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \ |
1756 gcprolist = &ngcpro3; } | 1985 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \ |
1757 | 1986 gcprolist = &ngcpro3 )) |
1758 #define NGCPRO4(varname1, varname2, varname3, varname4) \ | 1987 |
1759 {ngcpro1.next = gcprolist; ngcpro1.var = &varname1; ngcpro1.nvars = 1; \ | 1988 #define NGCPRO4(var1, var2, var3, var4) ((void) ( \ |
1760 ngcpro2.next = &ngcpro1; ngcpro2.var = &varname2; ngcpro2.nvars = 1; \ | 1989 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \ |
1761 ngcpro3.next = &ngcpro2; ngcpro3.var = &varname3; ngcpro3.nvars = 1; \ | 1990 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \ |
1762 ngcpro4.next = &ngcpro3; ngcpro4.var = &varname4; ngcpro4.nvars = 1; \ | 1991 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \ |
1763 gcprolist = &ngcpro4; } | 1992 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \ |
1764 | 1993 gcprolist = &ngcpro4 )) |
1765 #define NGCPRO5(varname1, varname2, varname3, varname4, varname5) \ | 1994 |
1766 {ngcpro1.next = gcprolist; ngcpro1.var = &varname1; ngcpro1.nvars = 1; \ | 1995 #define NGCPRO5(var1, var2, var3, var4, var5) \ |
1767 ngcpro2.next = &ngcpro1; ngcpro2.var = &varname2; ngcpro2.nvars = 1; \ | 1996 ((void) ( \ |
1768 ngcpro3.next = &ngcpro2; ngcpro3.var = &varname3; ngcpro3.nvars = 1; \ | 1997 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \ |
1769 ngcpro4.next = &ngcpro3; ngcpro4.var = &varname4; ngcpro4.nvars = 1; \ | 1998 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \ |
1770 ngcpro5.next = &ngcpro4; ngcpro5.var = &varname5; ngcpro5.nvars = 1; \ | 1999 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \ |
1771 gcprolist = &ngcpro5; } | 2000 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \ |
1772 | 2001 ngcpro5.next = &ngcpro4, ngcpro5.var = &var5, ngcpro5.nvars = 1, \ |
1773 #define NUNGCPRO (gcprolist = ngcpro1.next) | 2002 gcprolist = &ngcpro5 )) |
1774 | 2003 |
1775 #define NNGCPRO1(varname) \ | 2004 #define NUNGCPRO ((void) (gcprolist = ngcpro1.next)) |
1776 {nngcpro1.next = gcprolist; nngcpro1.var = &varname; nngcpro1.nvars = 1; \ | 2005 |
1777 gcprolist = &nngcpro1; } | 2006 #define NNGCPRO1(var1) ((void) ( \ |
1778 | 2007 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \ |
1779 #define NNGCPRO2(varname1, varname2) \ | 2008 gcprolist = &nngcpro1 )) |
1780 {nngcpro1.next = gcprolist; nngcpro1.var = &varname1; nngcpro1.nvars = 1; \ | 2009 |
1781 nngcpro2.next = &nngcpro1; nngcpro2.var = &varname2; nngcpro2.nvars = 1; \ | 2010 #define NNGCPRO2(var1, var2) ((void) ( \ |
1782 gcprolist = &nngcpro2; } | 2011 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \ |
1783 | 2012 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \ |
1784 #define NNGCPRO3(varname1, varname2, varname3) \ | 2013 gcprolist = &nngcpro2 )) |
1785 {nngcpro1.next = gcprolist; nngcpro1.var = &varname1; nngcpro1.nvars = 1; \ | 2014 |
1786 nngcpro2.next = &nngcpro1; nngcpro2.var = &varname2; nngcpro2.nvars = 1; \ | 2015 #define NNGCPRO3(var1, var2, var3) ((void) ( \ |
1787 nngcpro3.next = &nngcpro2; nngcpro3.var = &varname3; nngcpro3.nvars = 1; \ | 2016 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \ |
1788 gcprolist = &nngcpro3; } | 2017 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \ |
1789 | 2018 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \ |
1790 #define NNGCPRO4(varname1, varname2, varname3, varname4) \ | 2019 gcprolist = &nngcpro3 )) |
1791 {nngcpro1.next = gcprolist; nngcpro1.var = &varname1; nngcpro1.nvars = 1; \ | 2020 |
1792 nngcpro2.next = &nngcpro1; nngcpro2.var = &varname2; nngcpro2.nvars = 1; \ | 2021 #define NNGCPRO4(var1, var2, var3, var4) ((void) ( \ |
1793 nngcpro3.next = &nngcpro2; nngcpro3.var = &varname3; nngcpro3.nvars = 1; \ | 2022 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \ |
1794 nngcpro4.next = &nngcpro3; nngcpro4.var = &varname4; nngcpro4.nvars = 1; \ | 2023 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \ |
1795 gcprolist = &nngcpro4; } | 2024 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \ |
1796 | 2025 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \ |
1797 #define NNGCPRO5(varname1, varname2, varname3, varname4, varname5) \ | 2026 gcprolist = &nngcpro4 )) |
1798 {nngcpro1.next = gcprolist; nngcpro1.var = &varname1; nngcpro1.nvars = 1; \ | 2027 |
1799 nngcpro2.next = &nngcpro1; nngcpro2.var = &varname2; nngcpro2.nvars = 1; \ | 2028 #define NNGCPRO5(var1, var2, var3, var4, var5) \ |
1800 nngcpro3.next = &nngcpro2; nngcpro3.var = &varname3; nngcpro3.nvars = 1; \ | 2029 ((void) ( \ |
1801 nngcpro4.next = &nngcpro3; nngcpro4.var = &varname4; nngcpro4.nvars = 1; \ | 2030 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \ |
1802 nngcpro5.next = &nngcpro4; nngcpro5.var = &varname5; nngcpro5.nvars = 1; \ | 2031 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \ |
1803 gcprolist = &nngcpro5; } | 2032 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \ |
1804 | 2033 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \ |
1805 #define NNUNGCPRO (gcprolist = nngcpro1.next) | 2034 nngcpro5.next = &nngcpro4, nngcpro5.var = &var5, nngcpro5.nvars = 1, \ |
2035 gcprolist = &nngcpro5 )) | |
2036 | |
2037 #define NNUNGCPRO ((void) (gcprolist = nngcpro1.next)) | |
1806 | 2038 |
1807 #endif /* ! DEBUG_GCPRO */ | 2039 #endif /* ! DEBUG_GCPRO */ |
1808 | 2040 |
1809 /* Another try to fix SunPro C compiler warnings */ | 2041 /* Another try to fix SunPro C compiler warnings */ |
1810 /* "end-of-loop code not reached" */ | 2042 /* "end-of-loop code not reached" */ |
1811 /* "statement not reached */ | 2043 /* "statement not reached */ |
1812 #ifdef __SUNPRO_C | 2044 #ifdef __SUNPRO_C |
1813 #define RETURN__ if (1) return | 2045 #define RETURN_SANS_WARNINGS if (1) return |
1814 #define RETURN_NOT_REACHED(value) | 2046 #define RETURN_NOT_REACHED(value) |
1815 #else | 2047 #else |
1816 #define RETURN__ return | 2048 #define RETURN_SANS_WARNINGS return |
1817 #define RETURN_NOT_REACHED(value) return value; | 2049 #define RETURN_NOT_REACHED(value) return value; |
1818 #endif | 2050 #endif |
1819 | 2051 |
1820 /* Evaluate expr, UNGCPRO, and then return the value of expr. */ | 2052 /* Evaluate expr, UNGCPRO, and then return the value of expr. */ |
1821 #define RETURN_UNGCPRO(expr) do \ | 2053 #define RETURN_UNGCPRO(expr) do \ |
1822 { \ | 2054 { \ |
1823 Lisp_Object ret_ungc_val = (expr); \ | 2055 Lisp_Object ret_ungc_val = (expr); \ |
1824 UNGCPRO; \ | 2056 UNGCPRO; \ |
1825 RETURN__ ret_ungc_val; \ | 2057 RETURN_SANS_WARNINGS ret_ungc_val; \ |
1826 } while (0) | 2058 } while (0) |
1827 | 2059 |
1828 /* Evaluate expr, NUNGCPRO, UNGCPRO, and then return the value of expr. */ | 2060 /* Evaluate expr, NUNGCPRO, UNGCPRO, and then return the value of expr. */ |
1829 #define RETURN_NUNGCPRO(expr) do \ | 2061 #define RETURN_NUNGCPRO(expr) do \ |
1830 { \ | 2062 { \ |
1831 Lisp_Object ret_ungc_val = (expr); \ | 2063 Lisp_Object ret_ungc_val = (expr); \ |
1832 NUNGCPRO; \ | 2064 NUNGCPRO; \ |
1833 UNGCPRO; \ | 2065 UNGCPRO; \ |
1834 RETURN__ ret_ungc_val; \ | 2066 RETURN_SANS_WARNINGS ret_ungc_val; \ |
1835 } while (0) | 2067 } while (0) |
1836 | 2068 |
1837 /* Evaluate expr, NNUNGCPRO, NUNGCPRO, UNGCPRO, and then return the | 2069 /* Evaluate expr, NNUNGCPRO, NUNGCPRO, UNGCPRO, and then return the |
1838 value of expr. */ | 2070 value of expr. */ |
1839 #define RETURN_NNUNGCPRO(expr) do \ | 2071 #define RETURN_NNUNGCPRO(expr) do \ |
1840 { \ | 2072 { \ |
1841 Lisp_Object ret_ungc_val = (expr); \ | 2073 Lisp_Object ret_ungc_val = (expr); \ |
1842 NNUNGCPRO; \ | 2074 NNUNGCPRO; \ |
1843 NUNGCPRO; \ | 2075 NUNGCPRO; \ |
1844 UNGCPRO; \ | 2076 UNGCPRO; \ |
1845 RETURN__ ret_ungc_val; \ | 2077 RETURN_SANS_WARNINGS ret_ungc_val; \ |
1846 } while (0) | 2078 } while (0) |
1847 | 2079 |
1848 /* Evaluate expr, return it if it's not Qunbound. */ | 2080 /* Evaluate expr, return it if it's not Qunbound. */ |
1849 #define RETURN_IF_NOT_UNBOUND(expr) do \ | 2081 #define RETURN_IF_NOT_UNBOUND(expr) do \ |
1850 { \ | 2082 { \ |
1851 Lisp_Object ret_nunb_val = (expr); \ | 2083 Lisp_Object ret_nunb_val = (expr); \ |
1852 if (!UNBOUNDP (ret_nunb_val)) \ | 2084 if (!UNBOUNDP (ret_nunb_val)) \ |
1853 RETURN__ ret_nunb_val; \ | 2085 RETURN_SANS_WARNINGS ret_nunb_val; \ |
1854 } while (0) | 2086 } while (0) |
1855 | 2087 |
1856 /* Call staticpro (&var) to protect static variable `var'. */ | 2088 /* Call staticpro (&var) to protect static variable `var'. */ |
1857 void staticpro (Lisp_Object *); | 2089 void staticpro (Lisp_Object *); |
1858 | 2090 |
1893 | 2125 |
1894 #ifndef DIRECTORY_SEP | 2126 #ifndef DIRECTORY_SEP |
1895 #define DIRECTORY_SEP '/' | 2127 #define DIRECTORY_SEP '/' |
1896 #endif | 2128 #endif |
1897 #ifndef IS_DIRECTORY_SEP | 2129 #ifndef IS_DIRECTORY_SEP |
1898 #define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP) | 2130 #define IS_DIRECTORY_SEP(c) ((c) == DIRECTORY_SEP) |
1899 #endif | 2131 #endif |
1900 #ifndef IS_DEVICE_SEP | 2132 #ifndef IS_DEVICE_SEP |
1901 #ifndef DEVICE_SEP | 2133 #ifndef DEVICE_SEP |
1902 #define IS_DEVICE_SEP(_c_) 0 | 2134 #define IS_DEVICE_SEP(c) 0 |
1903 #else | 2135 #else |
1904 #define IS_DEVICE_SEP(_c_) ((_c_) == DEVICE_SEP) | 2136 #define IS_DEVICE_SEP(c) ((c) == DEVICE_SEP) |
1905 #endif | 2137 #endif |
1906 #endif | 2138 #endif |
1907 #ifndef IS_ANY_SEP | 2139 #ifndef IS_ANY_SEP |
1908 #define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_)) | 2140 #define IS_ANY_SEP(c) (IS_DIRECTORY_SEP (c)) |
1909 #endif | 2141 #endif |
1910 | 2142 |
1911 #ifdef HAVE_INTTYPES_H | 2143 #ifdef HAVE_INTTYPES_H |
1912 #include <inttypes.h> | 2144 #include <inttypes.h> |
1913 #elif SIZEOF_VOID_P == SIZEOF_INT | 2145 #elif SIZEOF_VOID_P == SIZEOF_INT |
1966 Lisp_Object make_pure_string (CONST Bufbyte *, Bytecount, Lisp_Object, int); | 2198 Lisp_Object make_pure_string (CONST Bufbyte *, Bytecount, Lisp_Object, int); |
1967 Lisp_Object make_pure_pname (CONST Bufbyte *, Bytecount, int); | 2199 Lisp_Object make_pure_pname (CONST Bufbyte *, Bytecount, int); |
1968 Lisp_Object pure_cons (Lisp_Object, Lisp_Object); | 2200 Lisp_Object pure_cons (Lisp_Object, Lisp_Object); |
1969 Lisp_Object pure_list (int, Lisp_Object *); | 2201 Lisp_Object pure_list (int, Lisp_Object *); |
1970 Lisp_Object make_pure_vector (size_t, Lisp_Object); | 2202 Lisp_Object make_pure_vector (size_t, Lisp_Object); |
1971 void free_cons (struct Lisp_Cons *); | 2203 void free_cons (Lisp_Cons *); |
1972 void free_list (Lisp_Object); | 2204 void free_list (Lisp_Object); |
1973 void free_alist (Lisp_Object); | 2205 void free_alist (Lisp_Object); |
1974 void mark_conses_in_list (Lisp_Object); | 2206 void mark_conses_in_list (Lisp_Object); |
1975 void free_marker (struct Lisp_Marker *); | 2207 void free_marker (Lisp_Marker *); |
1976 int object_dead_p (Lisp_Object); | 2208 int object_dead_p (Lisp_Object); |
1977 | 2209 |
1978 #ifdef MEMORY_USAGE_STATS | 2210 #ifdef MEMORY_USAGE_STATS |
1979 size_t malloced_storage_size (void *, size_t, struct overhead_stats *); | 2211 size_t malloced_storage_size (void *, size_t, struct overhead_stats *); |
1980 size_t fixed_type_block_overhead (size_t); | 2212 size_t fixed_type_block_overhead (size_t); |
2056 | 2288 |
2057 /* Defined in emacsfns.c */ | 2289 /* Defined in emacsfns.c */ |
2058 Lisp_Object save_current_buffer_restore (Lisp_Object); | 2290 Lisp_Object save_current_buffer_restore (Lisp_Object); |
2059 | 2291 |
2060 /* Defined in emacs.c */ | 2292 /* Defined in emacs.c */ |
2061 DECLARE_DOESNT_RETURN_GCC__ATTRIBUTE__SYNTAX_SUCKS (fatal (CONST char *, | 2293 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (fatal (CONST char *, |
2062 ...), 1, 2); | 2294 ...), 1, 2); |
2063 int stderr_out (CONST char *, ...) PRINTF_ARGS (1, 2); | 2295 int stderr_out (CONST char *, ...) PRINTF_ARGS (1, 2); |
2064 int stdout_out (CONST char *, ...) PRINTF_ARGS (1, 2); | 2296 int stdout_out (CONST char *, ...) PRINTF_ARGS (1, 2); |
2065 SIGTYPE fatal_error_signal (int); | 2297 SIGTYPE fatal_error_signal (int); |
2066 Lisp_Object make_arg_list (int, char **); | 2298 Lisp_Object make_arg_list (int, char **); |
2078 /* Defined in eval.c */ | 2310 /* Defined in eval.c */ |
2079 DECLARE_DOESNT_RETURN (signal_error (Lisp_Object, Lisp_Object)); | 2311 DECLARE_DOESNT_RETURN (signal_error (Lisp_Object, Lisp_Object)); |
2080 void maybe_signal_error (Lisp_Object, Lisp_Object, Lisp_Object, Error_behavior); | 2312 void maybe_signal_error (Lisp_Object, Lisp_Object, Lisp_Object, Error_behavior); |
2081 Lisp_Object maybe_signal_continuable_error (Lisp_Object, Lisp_Object, | 2313 Lisp_Object maybe_signal_continuable_error (Lisp_Object, Lisp_Object, |
2082 Lisp_Object, Error_behavior); | 2314 Lisp_Object, Error_behavior); |
2083 DECLARE_DOESNT_RETURN_GCC__ATTRIBUTE__SYNTAX_SUCKS (error (CONST char *, | 2315 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (error (CONST char *, |
2084 ...), 1, 2); | 2316 ...), 1, 2); |
2085 void maybe_error (Lisp_Object, Error_behavior, CONST char *, | 2317 void maybe_error (Lisp_Object, Error_behavior, CONST char *, |
2086 ...) PRINTF_ARGS (3, 4); | 2318 ...) PRINTF_ARGS (3, 4); |
2087 Lisp_Object continuable_error (CONST char *, ...) PRINTF_ARGS (1, 2); | 2319 Lisp_Object continuable_error (CONST char *, ...) PRINTF_ARGS (1, 2); |
2088 Lisp_Object maybe_continuable_error (Lisp_Object, Error_behavior, | 2320 Lisp_Object maybe_continuable_error (Lisp_Object, Error_behavior, |
2091 void maybe_signal_simple_error (CONST char *, Lisp_Object, | 2323 void maybe_signal_simple_error (CONST char *, Lisp_Object, |
2092 Lisp_Object, Error_behavior); | 2324 Lisp_Object, Error_behavior); |
2093 Lisp_Object signal_simple_continuable_error (CONST char *, Lisp_Object); | 2325 Lisp_Object signal_simple_continuable_error (CONST char *, Lisp_Object); |
2094 Lisp_Object maybe_signal_simple_continuable_error (CONST char *, Lisp_Object, | 2326 Lisp_Object maybe_signal_simple_continuable_error (CONST char *, Lisp_Object, |
2095 Lisp_Object, Error_behavior); | 2327 Lisp_Object, Error_behavior); |
2096 DECLARE_DOESNT_RETURN_GCC__ATTRIBUTE__SYNTAX_SUCKS (error_with_frob | 2328 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (error_with_frob |
2097 (Lisp_Object, CONST char *, | 2329 (Lisp_Object, CONST char *, |
2098 ...), 2, 3); | 2330 ...), 2, 3); |
2099 void maybe_error_with_frob (Lisp_Object, Lisp_Object, Error_behavior, | 2331 void maybe_error_with_frob (Lisp_Object, Lisp_Object, Error_behavior, |
2100 CONST char *, ...) PRINTF_ARGS (4, 5); | 2332 CONST char *, ...) PRINTF_ARGS (4, 5); |
2101 Lisp_Object continuable_error_with_frob (Lisp_Object, CONST char *, | 2333 Lisp_Object continuable_error_with_frob (Lisp_Object, CONST char *, |
2109 Lisp_Object signal_simple_continuable_error_2 (CONST char *, | 2341 Lisp_Object signal_simple_continuable_error_2 (CONST char *, |
2110 Lisp_Object, Lisp_Object); | 2342 Lisp_Object, Lisp_Object); |
2111 Lisp_Object maybe_signal_simple_continuable_error_2 (CONST char *, Lisp_Object, | 2343 Lisp_Object maybe_signal_simple_continuable_error_2 (CONST char *, Lisp_Object, |
2112 Lisp_Object, Lisp_Object, | 2344 Lisp_Object, Lisp_Object, |
2113 Error_behavior); | 2345 Error_behavior); |
2114 Lisp_Object funcall_recording_as (Lisp_Object, int, Lisp_Object *); | 2346 void signal_malformed_list_error (Lisp_Object); |
2347 void signal_malformed_property_list_error (Lisp_Object); | |
2348 void signal_circular_list_error (Lisp_Object); | |
2349 void signal_circular_property_list_error (Lisp_Object); | |
2350 void signal_void_function_error (Lisp_Object); | |
2115 Lisp_Object run_hook_with_args_in_buffer (struct buffer *, int, Lisp_Object *, | 2351 Lisp_Object run_hook_with_args_in_buffer (struct buffer *, int, Lisp_Object *, |
2116 enum run_hooks_condition); | 2352 enum run_hooks_condition); |
2117 Lisp_Object run_hook_with_args (int, Lisp_Object *, enum run_hooks_condition); | 2353 Lisp_Object run_hook_with_args (int, Lisp_Object *, enum run_hooks_condition); |
2118 void va_run_hook_with_args (Lisp_Object, int, ...); | 2354 void va_run_hook_with_args (Lisp_Object, int, ...); |
2119 void va_run_hook_with_args_in_buffer (struct buffer *, Lisp_Object, int, ...); | 2355 void va_run_hook_with_args_in_buffer (struct buffer *, Lisp_Object, int, ...); |
2193 | 2429 |
2194 | 2430 |
2195 /* Defined in events.c */ | 2431 /* Defined in events.c */ |
2196 void clear_event_resource (void); | 2432 void clear_event_resource (void); |
2197 Lisp_Object allocate_event (void); | 2433 Lisp_Object allocate_event (void); |
2198 int event_to_character (struct Lisp_Event *, int, int, int); | 2434 int event_to_character (Lisp_Event *, int, int, int); |
2199 | 2435 |
2200 /* Defined in fileio.c */ | 2436 /* Defined in fileio.c */ |
2201 void record_auto_save (void); | 2437 void record_auto_save (void); |
2202 void force_auto_save_soon (void); | 2438 void force_auto_save_soon (void); |
2203 DECLARE_DOESNT_RETURN (report_file_error (CONST char *, Lisp_Object)); | 2439 DECLARE_DOESNT_RETURN (report_file_error (CONST char *, Lisp_Object)); |
2263 Lisp_Object concat2 (Lisp_Object, Lisp_Object); | 2499 Lisp_Object concat2 (Lisp_Object, Lisp_Object); |
2264 Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object); | 2500 Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object); |
2265 Lisp_Object vconcat2 (Lisp_Object, Lisp_Object); | 2501 Lisp_Object vconcat2 (Lisp_Object, Lisp_Object); |
2266 Lisp_Object vconcat3 (Lisp_Object, Lisp_Object, Lisp_Object); | 2502 Lisp_Object vconcat3 (Lisp_Object, Lisp_Object, Lisp_Object); |
2267 Lisp_Object nconc2 (Lisp_Object, Lisp_Object); | 2503 Lisp_Object nconc2 (Lisp_Object, Lisp_Object); |
2504 Lisp_Object bytecode_nconc2 (Lisp_Object *); | |
2268 void check_losing_bytecode (CONST char *, Lisp_Object); | 2505 void check_losing_bytecode (CONST char *, Lisp_Object); |
2269 | 2506 |
2270 /* Defined in getloadavg.c */ | 2507 /* Defined in getloadavg.c */ |
2271 int getloadavg (double[], int); | 2508 int getloadavg (double[], int); |
2272 | 2509 |
2352 void write_string_to_stdio_stream (FILE *, struct console *, | 2589 void write_string_to_stdio_stream (FILE *, struct console *, |
2353 CONST Bufbyte *, Bytecount, Bytecount, | 2590 CONST Bufbyte *, Bytecount, Bytecount, |
2354 enum external_data_format); | 2591 enum external_data_format); |
2355 void debug_print (Lisp_Object); | 2592 void debug_print (Lisp_Object); |
2356 void debug_short_backtrace (int); | 2593 void debug_short_backtrace (int); |
2357 void temp_output_buffer_setup (CONST char *); | 2594 void temp_output_buffer_setup (Lisp_Object); |
2358 void temp_output_buffer_show (Lisp_Object, Lisp_Object); | 2595 void temp_output_buffer_show (Lisp_Object, Lisp_Object); |
2359 /* NOTE: Do not call this with the data of a Lisp_String. Use princ. | 2596 /* NOTE: Do not call this with the data of a Lisp_String. Use princ. |
2360 * Note: stream should be defaulted before calling | 2597 * Note: stream should be defaulted before calling |
2361 * (eg Qnil means stdout, not Vstandard_output, etc) */ | 2598 * (eg Qnil means stdout, not Vstandard_output, etc) */ |
2362 void write_c_string (CONST char *, Lisp_Object); | 2599 void write_c_string (CONST char *, Lisp_Object); |
2367 void print_string (Lisp_Object, Lisp_Object, int); | 2604 void print_string (Lisp_Object, Lisp_Object, int); |
2368 void long_to_string (char *, long); | 2605 void long_to_string (char *, long); |
2369 void print_internal (Lisp_Object, Lisp_Object, int); | 2606 void print_internal (Lisp_Object, Lisp_Object, int); |
2370 void print_symbol (Lisp_Object, Lisp_Object, int); | 2607 void print_symbol (Lisp_Object, Lisp_Object, int); |
2371 void print_float (Lisp_Object, Lisp_Object, int); | 2608 void print_float (Lisp_Object, Lisp_Object, int); |
2372 void print_compiled_function (Lisp_Object, Lisp_Object, int); | |
2373 extern int print_escape_newlines; | 2609 extern int print_escape_newlines; |
2374 extern int print_readably; | 2610 extern int print_readably; |
2375 Lisp_Object internal_with_output_to_temp_buffer (CONST char *, | 2611 Lisp_Object internal_with_output_to_temp_buffer (Lisp_Object, |
2376 Lisp_Object (*) (Lisp_Object), | 2612 Lisp_Object (*) (Lisp_Object), |
2377 Lisp_Object, Lisp_Object); | 2613 Lisp_Object, Lisp_Object); |
2378 void float_to_string (char *, double); | 2614 void float_to_string (char *, double); |
2379 void internal_object_printer (Lisp_Object, Lisp_Object, int); | 2615 void internal_object_printer (Lisp_Object, Lisp_Object, int); |
2380 | 2616 |
2435 void kill_buffer_local_variables (struct buffer *); | 2671 void kill_buffer_local_variables (struct buffer *); |
2436 int symbol_value_buffer_local_info (Lisp_Object, struct buffer *); | 2672 int symbol_value_buffer_local_info (Lisp_Object, struct buffer *); |
2437 Lisp_Object find_symbol_value (Lisp_Object); | 2673 Lisp_Object find_symbol_value (Lisp_Object); |
2438 Lisp_Object find_symbol_value_quickly (Lisp_Object, int); | 2674 Lisp_Object find_symbol_value_quickly (Lisp_Object, int); |
2439 Lisp_Object top_level_value (Lisp_Object); | 2675 Lisp_Object top_level_value (Lisp_Object); |
2676 void reject_constant_symbols (Lisp_Object sym, Lisp_Object newval, | |
2677 int function_p, | |
2678 Lisp_Object follow_past_lisp_magic); | |
2440 | 2679 |
2441 /* Defined in syntax.c */ | 2680 /* Defined in syntax.c */ |
2442 int scan_words (struct buffer *, int, int); | 2681 int scan_words (struct buffer *, int, int); |
2443 | 2682 |
2444 /* Defined in undo.c */ | 2683 /* Defined in undo.c */ |
2490 EXFUN (Fcdr, 1); | 2729 EXFUN (Fcdr, 1); |
2491 EXFUN (Fchar_after, 2); | 2730 EXFUN (Fchar_after, 2); |
2492 EXFUN (Fchar_to_string, 1); | 2731 EXFUN (Fchar_to_string, 1); |
2493 EXFUN (Fcheck_valid_plist, 1); | 2732 EXFUN (Fcheck_valid_plist, 1); |
2494 EXFUN (Fclear_range_table, 1); | 2733 EXFUN (Fclear_range_table, 1); |
2495 EXFUN (Fclrhash, 1); | |
2496 EXFUN (Fcoding_category_list, 0); | 2734 EXFUN (Fcoding_category_list, 0); |
2497 EXFUN (Fcoding_category_system, 1); | 2735 EXFUN (Fcoding_category_system, 1); |
2498 EXFUN (Fcoding_priority_list, 0); | 2736 EXFUN (Fcoding_priority_list, 0); |
2499 EXFUN (Fcoding_system_charset, 2); | 2737 EXFUN (Fcoding_system_charset, 2); |
2500 EXFUN (Fcoding_system_doc_string, 1); | 2738 EXFUN (Fcoding_system_doc_string, 1); |
2503 EXFUN (Fcoding_system_p, 1); | 2741 EXFUN (Fcoding_system_p, 1); |
2504 EXFUN (Fcoding_system_property, 2); | 2742 EXFUN (Fcoding_system_property, 2); |
2505 EXFUN (Fcoding_system_type, 1); | 2743 EXFUN (Fcoding_system_type, 1); |
2506 EXFUN (Fcommand_execute, 3); | 2744 EXFUN (Fcommand_execute, 3); |
2507 EXFUN (Fcommandp, 1); | 2745 EXFUN (Fcommandp, 1); |
2508 EXFUN (Fcompiled_function_domain, 1); | |
2509 EXFUN (Fconcat, MANY); | 2746 EXFUN (Fconcat, MANY); |
2510 EXFUN (Fcons, 2); | 2747 EXFUN (Fcons, 2); |
2511 EXFUN (Fcopy_alist, 1); | 2748 EXFUN (Fcopy_alist, 1); |
2512 EXFUN (Fcopy_coding_system, 2); | 2749 EXFUN (Fcopy_coding_system, 2); |
2513 EXFUN (Fcopy_event, 2); | 2750 EXFUN (Fcopy_event, 2); |
2751 EXFUN (Fcopy_list, 1); | |
2514 EXFUN (Fcopy_marker, 2); | 2752 EXFUN (Fcopy_marker, 2); |
2515 EXFUN (Fcopy_sequence, 1); | 2753 EXFUN (Fcopy_sequence, 1); |
2516 EXFUN (Fcopy_tree, 2); | 2754 EXFUN (Fcopy_tree, 2); |
2517 EXFUN (Fcurrent_window_configuration, 1); | 2755 EXFUN (Fcurrent_window_configuration, 1); |
2518 EXFUN (Fdecode_big5_char, 1); | 2756 EXFUN (Fdecode_big5_char, 1); |
2575 EXFUN (Fget, 3); | 2813 EXFUN (Fget, 3); |
2576 EXFUN (Fget_buffer_process, 1); | 2814 EXFUN (Fget_buffer_process, 1); |
2577 EXFUN (Fget_coding_system, 1); | 2815 EXFUN (Fget_coding_system, 1); |
2578 EXFUN (Fget_process, 1); | 2816 EXFUN (Fget_process, 1); |
2579 EXFUN (Fget_range_table, 3); | 2817 EXFUN (Fget_range_table, 3); |
2580 EXFUN (Fgethash, 3); | |
2581 EXFUN (Fgettext, 1); | 2818 EXFUN (Fgettext, 1); |
2582 EXFUN (Fgoto_char, 2); | 2819 EXFUN (Fgoto_char, 2); |
2583 EXFUN (Fgtr, MANY); | 2820 EXFUN (Fgtr, MANY); |
2584 EXFUN (Fhashtablep, 1); | |
2585 EXFUN (Findent_to, 3); | 2821 EXFUN (Findent_to, 3); |
2586 EXFUN (Findirect_function, 1); | 2822 EXFUN (Findirect_function, 1); |
2587 EXFUN (Finsert, MANY); | 2823 EXFUN (Finsert, MANY); |
2588 EXFUN (Finsert_buffer_substring, 3); | 2824 EXFUN (Finsert_buffer_substring, 3); |
2589 EXFUN (Finsert_char, 4); | 2825 EXFUN (Finsert_char, 4); |
2602 EXFUN (Flistp, 1); | 2838 EXFUN (Flistp, 1); |
2603 EXFUN (Flss, MANY); | 2839 EXFUN (Flss, MANY); |
2604 EXFUN (Fmake_byte_code, MANY); | 2840 EXFUN (Fmake_byte_code, MANY); |
2605 EXFUN (Fmake_coding_system, 4); | 2841 EXFUN (Fmake_coding_system, 4); |
2606 EXFUN (Fmake_glyph_internal, 1); | 2842 EXFUN (Fmake_glyph_internal, 1); |
2607 EXFUN (Fmake_hashtable, 2); | |
2608 EXFUN (Fmake_list, 2); | 2843 EXFUN (Fmake_list, 2); |
2609 EXFUN (Fmake_marker, 0); | 2844 EXFUN (Fmake_marker, 0); |
2610 EXFUN (Fmake_range_table, 0); | 2845 EXFUN (Fmake_range_table, 0); |
2611 EXFUN (Fmake_sparse_keymap, 1); | 2846 EXFUN (Fmake_sparse_keymap, 1); |
2612 EXFUN (Fmake_string, 2); | 2847 EXFUN (Fmake_string, 2); |
2650 EXFUN (Fprovide, 1); | 2885 EXFUN (Fprovide, 1); |
2651 EXFUN (Fpurecopy, 1); | 2886 EXFUN (Fpurecopy, 1); |
2652 EXFUN (Fput, 3); | 2887 EXFUN (Fput, 3); |
2653 EXFUN (Fput_range_table, 4); | 2888 EXFUN (Fput_range_table, 4); |
2654 EXFUN (Fput_text_property, 5); | 2889 EXFUN (Fput_text_property, 5); |
2655 EXFUN (Fputhash, 3); | |
2656 EXFUN (Fquo, MANY); | 2890 EXFUN (Fquo, MANY); |
2657 EXFUN (Frassq, 2); | 2891 EXFUN (Frassq, 2); |
2658 EXFUN (Fread, 1); | 2892 EXFUN (Fread, 1); |
2659 EXFUN (Fread_key_sequence, 3); | 2893 EXFUN (Fread_key_sequence, 3); |
2660 EXFUN (Freally_free, 1); | 2894 EXFUN (Freally_free, 1); |
2718 extern Lisp_Object Qbuffer_glyph_p, Qbuffer_live_p, Qbuffer_read_only, Qbutton; | 2952 extern Lisp_Object Qbuffer_glyph_p, Qbuffer_live_p, Qbuffer_read_only, Qbutton; |
2719 extern Lisp_Object Qbyte_code, Qcall_interactively, Qcategory; | 2953 extern Lisp_Object Qbyte_code, Qcall_interactively, Qcategory; |
2720 extern Lisp_Object Qcategory_designator_p, Qcategory_table_value_p, Qccl, Qcdr; | 2954 extern Lisp_Object Qcategory_designator_p, Qcategory_table_value_p, Qccl, Qcdr; |
2721 extern Lisp_Object Qchannel, Qchar, Qchar_or_string_p, Qcharacter, Qcharacterp; | 2955 extern Lisp_Object Qchannel, Qchar, Qchar_or_string_p, Qcharacter, Qcharacterp; |
2722 extern Lisp_Object Qchars, Qcharset_g0, Qcharset_g1, Qcharset_g2, Qcharset_g3; | 2956 extern Lisp_Object Qchars, Qcharset_g0, Qcharset_g1, Qcharset_g2, Qcharset_g3; |
2723 extern Lisp_Object Qcircular_property_list, Qcoding_system_error; | 2957 extern Lisp_Object Qcircular_list, Qcircular_property_list; |
2724 extern Lisp_Object Qcoding_system_p, Qcolor, Qcolor_pixmap_image_instance_p; | 2958 extern Lisp_Object Qcoding_system_error, Qcoding_system_p; |
2959 extern Lisp_Object Qcolor, Qcolor_pixmap_image_instance_p; | |
2725 extern Lisp_Object Qcolumns, Qcommand, Qcommandp, Qcompletion_ignore_case; | 2960 extern Lisp_Object Qcolumns, Qcommand, Qcommandp, Qcompletion_ignore_case; |
2726 extern Lisp_Object Qconsole, Qconsole_live_p, Qconst_specifier, Qcr, Qcritical; | 2961 extern Lisp_Object Qconsole, Qconsole_live_p, Qconst_specifier, Qcr, Qcritical; |
2727 extern Lisp_Object Qcrlf, Qctext, Qcurrent_menubar, Qcursor; | 2962 extern Lisp_Object Qcrlf, Qctext, Qcurrent_menubar, Qcursor; |
2728 extern Lisp_Object Qcyclic_variable_indirection, Qdata, Qdead, Qdecode; | 2963 extern Lisp_Object Qcyclic_variable_indirection, Qdata, Qdead, Qdecode; |
2729 extern Lisp_Object Qdefault, Qdefun, Qdelete, Qdelq, Qdevice, Qdevice_live_p; | 2964 extern Lisp_Object Qdefault, Qdefun, Qdelete, Qdelq, Qdevice, Qdevice_live_p; |
2744 extern Lisp_Object Qinteger_char_or_marker_p, Qinteger_or_char_p; | 2979 extern Lisp_Object Qinteger_char_or_marker_p, Qinteger_or_char_p; |
2745 extern Lisp_Object Qinteger_or_marker_p, Qintegerp, Qinteractive, Qinternal; | 2980 extern Lisp_Object Qinteger_or_marker_p, Qintegerp, Qinteractive, Qinternal; |
2746 extern Lisp_Object Qinvalid_function, Qinvalid_read_syntax, Qio_error; | 2981 extern Lisp_Object Qinvalid_function, Qinvalid_read_syntax, Qio_error; |
2747 extern Lisp_Object Qiso2022, Qkey, Qkey_assoc, Qkeymap, Qlambda, Qleft, Qlf; | 2982 extern Lisp_Object Qiso2022, Qkey, Qkey_assoc, Qkeymap, Qlambda, Qleft, Qlf; |
2748 extern Lisp_Object Qlist, Qlistp, Qload, Qlock_shift, Qmacro, Qmagic; | 2983 extern Lisp_Object Qlist, Qlistp, Qload, Qlock_shift, Qmacro, Qmagic; |
2749 extern Lisp_Object Qmalformed_property_list, Qmalloc_overhead, Qmark, Qmarkers; | 2984 extern Lisp_Object Qmalformed_list, Qmalformed_property_list; |
2985 extern Lisp_Object Qmalloc_overhead, Qmark, Qmarkers; | |
2750 extern Lisp_Object Qmax, Qmemory, Qmessage, Qminus, Qmnemonic, Qmodifiers; | 2986 extern Lisp_Object Qmax, Qmemory, Qmessage, Qminus, Qmnemonic, Qmodifiers; |
2751 extern Lisp_Object Qmono_pixmap_image_instance_p, Qmotion; | 2987 extern Lisp_Object Qmono_pixmap_image_instance_p, Qmotion; |
2752 extern Lisp_Object Qmouse_leave_buffer_hook, Qmswindows, Qname, Qnas, Qnatnump; | 2988 extern Lisp_Object Qmouse_leave_buffer_hook, Qmswindows, Qname, Qnas, Qnatnump; |
2753 extern Lisp_Object Qnil, Qno_ascii_cntl, Qno_ascii_eol, Qno_catch; | 2989 extern Lisp_Object Qno_ascii_cntl, Qno_ascii_eol, Qno_catch; |
2754 extern Lisp_Object Qno_conversion, Qno_iso6429, Qnone, Qnot, Qnothing; | 2990 extern Lisp_Object Qno_conversion, Qno_iso6429, Qnone, Qnot, Qnothing; |
2755 extern Lisp_Object Qnothing_image_instance_p, Qnotice; | 2991 extern Lisp_Object Qnothing_image_instance_p, Qnotice; |
2756 extern Lisp_Object Qnumber_char_or_marker_p, Qnumber_or_marker_p, Qnumberp; | 2992 extern Lisp_Object Qnumber_char_or_marker_p, Qnumber_or_marker_p, Qnumberp; |
2757 extern Lisp_Object Qobject, Qold_assoc, Qold_delete, Qold_delq, Qold_rassoc; | 2993 extern Lisp_Object Qobject, Qold_assoc, Qold_delete, Qold_delq, Qold_rassoc; |
2758 extern Lisp_Object Qold_rassq, Qonly, Qor, Qother, Qoutput_charset_conversion; | 2994 extern Lisp_Object Qold_rassq, Qonly, Qor, Qother, Qoutput_charset_conversion; |
2783 extern Lisp_Object Vascii_downcase_table, Vascii_eqv_table; | 3019 extern Lisp_Object Vascii_downcase_table, Vascii_eqv_table; |
2784 extern Lisp_Object Vascii_upcase_table, Vautoload_queue, Vbinary_process_input; | 3020 extern Lisp_Object Vascii_upcase_table, Vautoload_queue, Vbinary_process_input; |
2785 extern Lisp_Object Vbinary_process_output, Vblank_menubar; | 3021 extern Lisp_Object Vbinary_process_output, Vblank_menubar; |
2786 extern Lisp_Object Vcharset_ascii, Vcharset_composite, Vcharset_control_1; | 3022 extern Lisp_Object Vcharset_ascii, Vcharset_composite, Vcharset_control_1; |
2787 extern Lisp_Object Vcoding_system_for_read, Vcoding_system_for_write; | 3023 extern Lisp_Object Vcoding_system_for_read, Vcoding_system_for_write; |
2788 extern Lisp_Object Vcoding_system_hashtable, Vcommand_history; | 3024 extern Lisp_Object Vcoding_system_hash_table, Vcommand_history; |
2789 extern Lisp_Object Vcommand_line_args, Vconfigure_info_directory; | 3025 extern Lisp_Object Vcommand_line_args, Vconfigure_info_directory; |
2790 extern Lisp_Object Vconsole_list, Vcontrolling_terminal; | 3026 extern Lisp_Object Vconsole_list, Vcontrolling_terminal; |
2791 extern Lisp_Object Vcurrent_compiled_function_annotation, Vcurrent_load_list; | 3027 extern Lisp_Object Vcurrent_compiled_function_annotation, Vcurrent_load_list; |
2792 extern Lisp_Object Vcurrent_mouse_event, Vcurrent_prefix_arg, Vdata_directory; | 3028 extern Lisp_Object Vcurrent_mouse_event, Vcurrent_prefix_arg, Vdata_directory; |
2793 extern Lisp_Object Vdisabled_command_hook, Vdoc_directory, Vinternal_doc_file_name; | 3029 extern Lisp_Object Vdisabled_command_hook, Vdoc_directory, Vinternal_doc_file_name; |
2813 extern Lisp_Object Vsynchronous_sounds, Vsystem_name, Vterminal_coding_system; | 3049 extern Lisp_Object Vsynchronous_sounds, Vsystem_name, Vterminal_coding_system; |
2814 extern Lisp_Object Vthis_command_keys, Vunread_command_event; | 3050 extern Lisp_Object Vthis_command_keys, Vunread_command_event; |
2815 extern Lisp_Object Vwin32_generate_fake_inodes, Vwin32_pipe_read_delay; | 3051 extern Lisp_Object Vwin32_generate_fake_inodes, Vwin32_pipe_read_delay; |
2816 extern Lisp_Object Vx_initial_argv_list; | 3052 extern Lisp_Object Vx_initial_argv_list; |
2817 | 3053 |
3054 extern Lisp_Object Qmakunbound, Qset; | |
2818 | 3055 |
2819 #endif /* _XEMACS_LISP_H_ */ | 3056 #endif /* _XEMACS_LISP_H_ */ |