comparison src/lisp.h @ 424:11054d720c21 r21-2-20

Import from CVS: tag r21-2-20
author cvs
date Mon, 13 Aug 2007 11:26:11 +0200
parents 41dbb7a9d5f2
children
comparison
equal deleted inserted replaced
423:28d9c139be4c 424:11054d720c21
248 #define register 248 #define register
249 /*#else*/ 249 /*#else*/
250 /*#define REGISTER register*/ 250 /*#define REGISTER register*/
251 /*#endif*/ 251 /*#endif*/
252 252
253
254 /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit.
255 In particular, it must be large enough to contain a pointer.
256 config.h can override this, e.g. to use `long long' for bigger lisp ints. */
257
258 #ifndef SIZEOF_EMACS_INT
259 # define SIZEOF_EMACS_INT SIZEOF_VOID_P
260 #endif
261
262 #ifndef EMACS_INT
263 # if SIZEOF_EMACS_INT == SIZEOF_LONG
264 # define EMACS_INT long
265 # elif SIZEOF_EMACS_INT == SIZEOF_INT
266 # define EMACS_INT int
267 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG
268 # define EMACS_INT long long
269 # else
270 # error Unable to determine suitable type for EMACS_INT
271 # endif
272 #endif
273
274 #ifndef EMACS_UINT
275 # define EMACS_UINT unsigned EMACS_INT
276 #endif
277
278 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR)
279
253 280
254 /************************************************************************/ 281 /************************************************************************/
255 /* typedefs */ 282 /* typedefs */
256 /************************************************************************/ 283 /************************************************************************/
257 284
282 sort of position is being used. See extents.c for a description 309 sort of position is being used. See extents.c for a description
283 of the different positions. We put them here instead of in 310 of the different positions. We put them here instead of in
284 buffer.h (where they rightfully belong) to avoid syntax errors 311 buffer.h (where they rightfully belong) to avoid syntax errors
285 in function prototypes. */ 312 in function prototypes. */
286 313
287 typedef int Bufpos; 314 typedef EMACS_INT Bufpos;
288 typedef int Bytind; 315 typedef EMACS_INT Bytind;
289 typedef int Memind; 316 typedef EMACS_INT Memind;
290 317
291 /* Counts of bytes or chars */ 318 /* Counts of bytes or chars */
292 319
293 typedef int Bytecount; 320 typedef EMACS_INT Bytecount;
294 typedef int Charcount; 321 typedef EMACS_INT Charcount;
295 322
296 /* Length in bytes of a string in external format */ 323 /* Length in bytes of a string in external format */
297 typedef int Extcount; 324 typedef EMACS_INT Extcount;
298 325
299 typedef struct lstream Lstream; 326 typedef struct lstream Lstream;
300 327
301 typedef unsigned int face_index; 328 typedef unsigned int face_index;
302 329
338 struct Lisp_Image_Instance; 365 struct Lisp_Image_Instance;
339 typedef struct Lisp_Image_Instance Lisp_Image_Instance; 366 typedef struct Lisp_Image_Instance Lisp_Image_Instance;
340 struct Lisp_Gui_Item; 367 struct Lisp_Gui_Item;
341 typedef struct Lisp_Gui_Item Lisp_Gui_Item; 368 typedef struct Lisp_Gui_Item Lisp_Gui_Item;
342 struct display_line; 369 struct display_line;
370 struct display_glyph_area;
371 struct display_box;
343 struct redisplay_info; 372 struct redisplay_info;
344 struct window_mirror; 373 struct window_mirror;
345 struct scrollbar_instance; 374 struct scrollbar_instance;
346 struct font_metric_info; 375 struct font_metric_info;
347 struct face_cachel; 376 struct face_cachel;
465 LEFT_TOOLBAR, 494 LEFT_TOOLBAR,
466 RIGHT_TOOLBAR 495 RIGHT_TOOLBAR
467 }; 496 };
468 #endif 497 #endif
469 498
499 enum edge_style
500 {
501 EDGE_ETCHED_IN,
502 EDGE_ETCHED_OUT,
503 EDGE_BEVEL_IN,
504 EDGE_BEVEL_OUT
505 };
506
470 #ifndef ERROR_CHECK_TYPECHECK 507 #ifndef ERROR_CHECK_TYPECHECK
471 508
472 typedef enum error_behavior 509 typedef enum error_behavior
473 { 510 {
474 ERROR_ME, 511 ERROR_ME,
521 Lisp_Type_Int_Odd 558 Lisp_Type_Int_Odd
522 }; 559 };
523 560
524 #define POINTER_TYPE_P(type) ((type) == Lisp_Type_Record) 561 #define POINTER_TYPE_P(type) ((type) == Lisp_Type_Record)
525 562
526 /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit.
527 In particular, it must be large enough to contain a pointer.
528 config.h can override this, e.g. to use `long long' for bigger lisp ints. */
529
530 #ifndef SIZEOF_EMACS_INT
531 # define SIZEOF_EMACS_INT SIZEOF_VOID_P
532 #endif
533
534 #ifndef EMACS_INT
535 # if SIZEOF_EMACS_INT == SIZEOF_LONG
536 # define EMACS_INT long
537 # elif SIZEOF_EMACS_INT == SIZEOF_INT
538 # define EMACS_INT int
539 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG
540 # define EMACS_INT long long
541 # else
542 # error Unable to determine suitable type for EMACS_INT
543 # endif
544 #endif
545
546 #ifndef EMACS_UINT
547 # define EMACS_UINT unsigned EMACS_INT
548 #endif
549
550 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR)
551
552 /* Overridden by m/next.h */ 563 /* Overridden by m/next.h */
553 #ifndef ASSERT_VALID_POINTER 564 #ifndef ASSERT_VALID_POINTER
554 # define ASSERT_VALID_POINTER(pnt) (assert ((((EMACS_UINT) pnt) & 3) == 0)) 565 # define ASSERT_VALID_POINTER(pnt) (assert ((((EMACS_UINT) pnt) & 3) == 0))
555 #endif 566 #endif
556 567
567 # include "lisp-union.h" 578 # include "lisp-union.h"
568 #else /* !USE_UNION_TYPE */ 579 #else /* !USE_UNION_TYPE */
569 # include "lisp-disunion.h" 580 # include "lisp-disunion.h"
570 #endif /* !USE_UNION_TYPE */ 581 #endif /* !USE_UNION_TYPE */
571 582
572 #define XPNTR(x) ((void *) (XPNTRVAL(x))) 583 #define XPNTR(x) ((void *) XPNTRVAL(x))
573 584
574 /* WARNING WARNING WARNING. You must ensure on your own that proper 585 /* WARNING WARNING WARNING. You must ensure on your own that proper
575 GC protection is provided for the elements in this array. */ 586 GC protection is provided for the elements in this array. */
576 typedef struct 587 typedef struct
577 { 588 {
579 } Lisp_Object_dynarr; 590 } Lisp_Object_dynarr;
580 591
581 /* Close your eyes now lest you vomit or spontaneously combust ... */ 592 /* Close your eyes now lest you vomit or spontaneously combust ... */
582 593
583 #define HACKEQ_UNSAFE(obj1, obj2) \ 594 #define HACKEQ_UNSAFE(obj1, obj2) \
584 (EQ (obj1, obj2) || (!POINTER_TYPE_P (XGCTYPE (obj1)) \ 595 (EQ (obj1, obj2) || (!POINTER_TYPE_P (XTYPE (obj1)) \
585 && !POINTER_TYPE_P (XGCTYPE (obj2)) \ 596 && !POINTER_TYPE_P (XTYPE (obj2)) \
586 && XCHAR_OR_INT (obj1) == XCHAR_OR_INT (obj2))) 597 && XCHAR_OR_INT (obj1) == XCHAR_OR_INT (obj2)))
587 598
588 #ifdef DEBUG_XEMACS 599 #ifdef DEBUG_XEMACS
589 extern int debug_issue_ebola_notices; 600 extern int debug_issue_ebola_notices;
590 int eq_with_ebola_notice (Lisp_Object, Lisp_Object); 601 int eq_with_ebola_notice (Lisp_Object, Lisp_Object);
610 symbol-value-forward), that can never be visible to 621 symbol-value-forward), that can never be visible to
611 the Lisp caller and thus can be used in the C code 622 the Lisp caller and thus can be used in the C code
612 to mean "no such value". */ 623 to mean "no such value". */
613 624
614 #define UNBOUNDP(val) EQ (val, Qunbound) 625 #define UNBOUNDP(val) EQ (val, Qunbound)
615 #define GC_UNBOUNDP(val) GC_EQ (val, Qunbound)
616 626
617 /*********** cons ***********/ 627 /*********** cons ***********/
618 628
619 /* In a cons, the markbit of the car is the gc mark bit */ 629 /* In a cons, the markbit of the car is the gc mark bit */
620 630
639 649
640 DECLARE_LRECORD (cons, Lisp_Cons); 650 DECLARE_LRECORD (cons, Lisp_Cons);
641 #define XCONS(x) XRECORD (x, cons, Lisp_Cons) 651 #define XCONS(x) XRECORD (x, cons, Lisp_Cons)
642 #define XSETCONS(x, p) XSETRECORD (x, p, cons) 652 #define XSETCONS(x, p) XSETRECORD (x, p, cons)
643 #define CONSP(x) RECORDP (x, cons) 653 #define CONSP(x) RECORDP (x, cons)
644 #define GC_CONSP(x) GC_RECORDP (x, cons)
645 #define CHECK_CONS(x) CHECK_RECORD (x, cons) 654 #define CHECK_CONS(x) CHECK_RECORD (x, cons)
646 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons) 655 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons)
647 656
648 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader)) 657 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader))
649 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader)) 658 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader))
650 659
651 extern Lisp_Object Qnil; 660 extern Lisp_Object Qnil;
652 661
653 #define NILP(x) EQ (x, Qnil) 662 #define NILP(x) EQ (x, Qnil)
654 #define GC_NILP(x) GC_EQ (x, Qnil)
655 #define XCAR(a) (XCONS (a)->car) 663 #define XCAR(a) (XCONS (a)->car)
656 #define XCDR(a) (XCONS (a)->cdr) 664 #define XCDR(a) (XCONS (a)->cdr)
657 #define LISTP(x) (CONSP(x) || NILP(x)) 665 #define LISTP(x) (CONSP(x) || NILP(x))
658 666
659 #define CHECK_LIST(x) do { \ 667 #define CHECK_LIST(x) do { \
709 /* Delete all elements of external list LIST 717 /* Delete all elements of external list LIST
710 satisfying CONDITION, an expression referring to variable ELT */ 718 satisfying CONDITION, an expression referring to variable ELT */
711 #define EXTERNAL_LIST_LOOP_DELETE_IF(elt, list, condition) do { \ 719 #define EXTERNAL_LIST_LOOP_DELETE_IF(elt, list, condition) do { \
712 Lisp_Object prev_tail_##list = Qnil; \ 720 Lisp_Object prev_tail_##list = Qnil; \
713 Lisp_Object tail_##list; \ 721 Lisp_Object tail_##list; \
714 int len_##list; \ 722 EMACS_INT len_##list; \
715 EXTERNAL_LIST_LOOP_4 (elt, list, tail_##list, len_##list) \ 723 EXTERNAL_LIST_LOOP_4 (elt, list, tail_##list, len_##list) \
716 { \ 724 { \
717 if (condition) \ 725 if (condition) \
718 { \ 726 { \
719 if (NILP (prev_tail_##list)) \ 727 if (NILP (prev_tail_##list)) \
766 /* Optimized and safe macros for looping over external lists. */ 774 /* Optimized and safe macros for looping over external lists. */
767 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024 775 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024
768 776
769 #define EXTERNAL_LIST_LOOP_1(list) \ 777 #define EXTERNAL_LIST_LOOP_1(list) \
770 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \ 778 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \
771 int ELL1_len; \ 779 EMACS_INT ELL1_len; \
772 EXTERNAL_LIST_LOOP_6(ELL1_elt, list, ELL1_len, ELL1_hare, \ 780 EXTERNAL_LIST_LOOP_6 (ELL1_elt, list, ELL1_len, ELL1_hare, \
773 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH) 781 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH)
774 782
775 #define EXTERNAL_LIST_LOOP_2(elt, list) \ 783 #define EXTERNAL_LIST_LOOP_2(elt, list) \
776 Lisp_Object hare_##elt, tortoise_##elt; \ 784 Lisp_Object hare_##elt, tortoise_##elt; \
777 int len_##elt; \ 785 EMACS_INT len_##elt; \
778 EXTERNAL_LIST_LOOP_6(elt, list, len_##elt, hare_##elt, \ 786 EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \
779 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) 787 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
780 788
781 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \ 789 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \
782 Lisp_Object tortoise_##elt; \ 790 Lisp_Object tortoise_##elt; \
783 int len_##elt; \ 791 EMACS_INT len_##elt; \
784 EXTERNAL_LIST_LOOP_6(elt, list, len_##elt, tail, \ 792 EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, tail, \
785 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) 793 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
786 794
787 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \ 795 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \
788 Lisp_Object tortoise_##elt; \ 796 Lisp_Object tortoise_##elt; \
789 EXTERNAL_LIST_LOOP_6(elt, list, len, tail, \ 797 EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
790 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) 798 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
791 799
792 800
793 #define EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \ 801 #define EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \
794 tortoise, suspicion_length) \ 802 tortoise, suspicion_length) \
795 for (tortoise = hare = list, len = 0; \ 803 for (tortoise = hare = list, len = 0; \
810 ((void) 0))))) 818 ((void) 0)))))
811 819
812 820
813 821
814 /* Optimized and safe macros for looping over external alists. */ 822 /* Optimized and safe macros for looping over external alists. */
815 #define EXTERNAL_ALIST_LOOP_4(elt, elt_car, elt_cdr, list) \ 823 #define EXTERNAL_ALIST_LOOP_4(elt, elt_car, elt_cdr, list) \
816 Lisp_Object hare_##elt, tortoise_##elt; \ 824 Lisp_Object hare_##elt, tortoise_##elt; \
817 int len_##elt; \ 825 EMACS_INT len_##elt; \
818 EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \ 826 EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
819 len_##elt, hare_##elt, tortoise_##elt, \ 827 len_##elt, hare_##elt, tortoise_##elt, \
820 CIRCULAR_LIST_SUSPICION_LENGTH) 828 CIRCULAR_LIST_SUSPICION_LENGTH)
821 829
822 #define EXTERNAL_ALIST_LOOP_5(elt, elt_car, elt_cdr, list, tail) \ 830 #define EXTERNAL_ALIST_LOOP_5(elt, elt_car, elt_cdr, list, tail) \
823 Lisp_Object tortoise_##elt; \ 831 Lisp_Object tortoise_##elt; \
824 int len_##elt; \ 832 EMACS_INT len_##elt; \
825 EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, \ 833 EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
826 len_##elt, tail, tortoise_##elt, \ 834 len_##elt, tail, tortoise_##elt, \
827 CIRCULAR_LIST_SUSPICION_LENGTH) 835 CIRCULAR_LIST_SUSPICION_LENGTH) \
828 836
829 #define EXTERNAL_ALIST_LOOP_6(elt, elt_car, elt_cdr, list, tail, len) \ 837 #define EXTERNAL_ALIST_LOOP_6(elt, elt_car, elt_cdr, list, tail, len) \
830 Lisp_Object tortoise_##elt; \ 838 Lisp_Object tortoise_##elt; \
831 EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, \ 839 EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
832 len, tail, tortoise_##elt, \ 840 len, tail, tortoise_##elt, \
833 CIRCULAR_LIST_SUSPICION_LENGTH) 841 CIRCULAR_LIST_SUSPICION_LENGTH)
834 842
835 843
836 #define EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, len, hare, \ 844 #define EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, len, hare, \
837 tortoise, suspicion_length) \ 845 tortoise, suspicion_length) \
838 EXTERNAL_LIST_LOOP_6(elt, list, len, hare, tortoise, suspicion_length) \ 846 EXTERNAL_LIST_LOOP_6 (elt, list, len, hare, tortoise, suspicion_length) \
839 if (CONSP (elt) ? (elt_car = XCAR (elt), elt_cdr = XCDR (elt), 0) :1) \ 847 if (CONSP (elt) ? (elt_car = XCAR (elt), elt_cdr = XCDR (elt), 0) :1) \
840 continue; \ 848 continue; \
841 else 849 else
842 850
843 851
844 /* Optimized and safe macros for looping over external property lists. */ 852 /* Optimized and safe macros for looping over external property lists. */
845 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \ 853 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \
846 Lisp_Object key, value, hare_##key, tortoise_##key; \ 854 Lisp_Object key, value, hare_##key, tortoise_##key; \
847 int len_##key; \ 855 EMACS_INT len_##key; \
848 EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len_##key, hare_##key,\ 856 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, hare_##key, \
849 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) 857 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
850 858
851 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \ 859 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \
852 Lisp_Object key, value, tail, tortoise_##key; \ 860 Lisp_Object key, value, tail, tortoise_##key; \
853 int len_##key; \ 861 EMACS_INT len_##key; \
854 EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len_##key, tail, \ 862 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, tail, \
855 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) 863 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
856 864
857 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \ 865 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \
858 Lisp_Object key, value, tail, tortoise_##key; \ 866 Lisp_Object key, value, tail, tortoise_##key; \
859 int len; \ 867 EMACS_INT len; \
860 EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, tail, \ 868 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
861 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) 869 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
862 870
863 871
864 #define EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, hare, \ 872 #define EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, hare, \
865 tortoise, suspicion_length) \ 873 tortoise, suspicion_length) \
912 INLINE int TRUE_LIST_P (Lisp_Object object); 920 INLINE int TRUE_LIST_P (Lisp_Object object);
913 INLINE int 921 INLINE int
914 TRUE_LIST_P (Lisp_Object object) 922 TRUE_LIST_P (Lisp_Object object)
915 { 923 {
916 Lisp_Object hare, tortoise; 924 Lisp_Object hare, tortoise;
917 int len; 925 EMACS_INT len;
918 926
919 for (hare = tortoise = object, len = 0; 927 for (hare = tortoise = object, len = 0;
920 CONSP (hare); 928 CONSP (hare);
921 hare = XCDR (hare), len++) 929 hare = XCDR (hare), len++)
922 { 930 {
934 942
935 /* Signal an error if LIST is not properly acyclic and nil-terminated. */ 943 /* Signal an error if LIST is not properly acyclic and nil-terminated. */
936 #define CHECK_TRUE_LIST(list) do { \ 944 #define CHECK_TRUE_LIST(list) do { \
937 Lisp_Object CTL_list = (list); \ 945 Lisp_Object CTL_list = (list); \
938 Lisp_Object CTL_hare, CTL_tortoise; \ 946 Lisp_Object CTL_hare, CTL_tortoise; \
939 int CTL_len; \ 947 EMACS_INT CTL_len; \
940 \ 948 \
941 for (CTL_hare = CTL_tortoise = CTL_list, CTL_len = 0; \ 949 for (CTL_hare = CTL_tortoise = CTL_list, CTL_len = 0; \
942 CONSP (CTL_hare); \ 950 CONSP (CTL_hare); \
943 CTL_hare = XCDR (CTL_hare), CTL_len++) \ 951 CTL_hare = XCDR (CTL_hare), CTL_len++) \
944 { \ 952 { \
968 976
969 DECLARE_LRECORD (string, Lisp_String); 977 DECLARE_LRECORD (string, Lisp_String);
970 #define XSTRING(x) XRECORD (x, string, Lisp_String) 978 #define XSTRING(x) XRECORD (x, string, Lisp_String)
971 #define XSETSTRING(x, p) XSETRECORD (x, p, string) 979 #define XSETSTRING(x, p) XSETRECORD (x, p, string)
972 #define STRINGP(x) RECORDP (x, string) 980 #define STRINGP(x) RECORDP (x, string)
973 #define GC_STRINGP(x) GC_RECORDP (x, string)
974 #define CHECK_STRING(x) CHECK_RECORD (x, string) 981 #define CHECK_STRING(x) CHECK_RECORD (x, string)
975 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string) 982 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string)
976 983
977 #ifdef MULE 984 #ifdef MULE
978 985
1037 1044
1038 DECLARE_LRECORD (vector, Lisp_Vector); 1045 DECLARE_LRECORD (vector, Lisp_Vector);
1039 #define XVECTOR(x) XRECORD (x, vector, Lisp_Vector) 1046 #define XVECTOR(x) XRECORD (x, vector, Lisp_Vector)
1040 #define XSETVECTOR(x, p) XSETRECORD (x, p, vector) 1047 #define XSETVECTOR(x, p) XSETRECORD (x, p, vector)
1041 #define VECTORP(x) RECORDP (x, vector) 1048 #define VECTORP(x) RECORDP (x, vector)
1042 #define GC_VECTORP(x) GC_RECORDP (x, vector)
1043 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector) 1049 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector)
1044 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector) 1050 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector)
1045 1051
1046 #define vector_length(v) ((v)->size) 1052 #define vector_length(v) ((v)->size)
1047 #define XVECTOR_LENGTH(s) vector_length (XVECTOR (s)) 1053 #define XVECTOR_LENGTH(s) vector_length (XVECTOR (s))
1076 1082
1077 DECLARE_LRECORD (bit_vector, Lisp_Bit_Vector); 1083 DECLARE_LRECORD (bit_vector, Lisp_Bit_Vector);
1078 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, Lisp_Bit_Vector) 1084 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, Lisp_Bit_Vector)
1079 #define XSETBIT_VECTOR(x, p) XSETRECORD (x, p, bit_vector) 1085 #define XSETBIT_VECTOR(x, p) XSETRECORD (x, p, bit_vector)
1080 #define BIT_VECTORP(x) RECORDP (x, bit_vector) 1086 #define BIT_VECTORP(x) RECORDP (x, bit_vector)
1081 #define GC_BIT_VECTORP(x) GC_RECORDP (x, bit_vector)
1082 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector) 1087 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector)
1083 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector) 1088 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector)
1084 1089
1085 #define BITP(x) (INTP (x) && (XINT (x) == 0 || XINT (x) == 1)) 1090 #define BITP(x) (INTP (x) && (XINT (x) == 0 || XINT (x) == 1))
1086 #define GC_BITP(x) (GC_INTP (x) && (XINT (x) == 0 || XINT (x) == 1))
1087 1091
1088 #define CHECK_BIT(x) do { \ 1092 #define CHECK_BIT(x) do { \
1089 if (!BITP (x)) \ 1093 if (!BITP (x)) \
1090 dead_wrong_type_argument (Qbitp, x);\ 1094 dead_wrong_type_argument (Qbitp, x);\
1091 } while (0) 1095 } while (0)
1096 } while (0) 1100 } while (0)
1097 1101
1098 #define bit_vector_length(v) ((v)->size) 1102 #define bit_vector_length(v) ((v)->size)
1099 #define bit_vector_next(v) ((v)->next) 1103 #define bit_vector_next(v) ((v)->next)
1100 1104
1101 INLINE int bit_vector_bit (Lisp_Bit_Vector *v, int i); 1105 INLINE int bit_vector_bit (Lisp_Bit_Vector *v, size_t n);
1102 INLINE int 1106 INLINE int
1103 bit_vector_bit (Lisp_Bit_Vector *v, int i) 1107 bit_vector_bit (Lisp_Bit_Vector *v, size_t n)
1104 { 1108 {
1105 unsigned int ui = (unsigned int) i; 1109 return ((v->bits[n >> LONGBITS_LOG2] >> (n & (LONGBITS_POWER_OF_2 - 1)))
1106
1107 return (((v)->bits[ui >> LONGBITS_LOG2] >> (ui & (LONGBITS_POWER_OF_2 - 1)))
1108 & 1); 1110 & 1);
1109 } 1111 }
1110 1112
1111 INLINE void set_bit_vector_bit (Lisp_Bit_Vector *v, int i, int value); 1113 INLINE void set_bit_vector_bit (Lisp_Bit_Vector *v, size_t n, int value);
1112 INLINE void 1114 INLINE void
1113 set_bit_vector_bit (Lisp_Bit_Vector *v, int i, int value) 1115 set_bit_vector_bit (Lisp_Bit_Vector *v, size_t n, int value)
1114 { 1116 {
1115 unsigned int ui = (unsigned int) i;
1116 if (value) 1117 if (value)
1117 (v)->bits[ui >> LONGBITS_LOG2] |= (1UL << (ui & (LONGBITS_POWER_OF_2 - 1))); 1118 v->bits[n >> LONGBITS_LOG2] |= (1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
1118 else 1119 else
1119 (v)->bits[ui >> LONGBITS_LOG2] &= ~(1UL << (ui & (LONGBITS_POWER_OF_2 - 1))); 1120 v->bits[n >> LONGBITS_LOG2] &= ~(1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
1120 } 1121 }
1121 1122
1122 /* Number of longs required to hold LEN bits */ 1123 /* Number of longs required to hold LEN bits */
1123 #define BIT_VECTOR_LONG_STORAGE(len) \ 1124 #define BIT_VECTOR_LONG_STORAGE(len) \
1124 ((len + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2) 1125 ((len + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2)
1147 1148
1148 DECLARE_LRECORD (symbol, Lisp_Symbol); 1149 DECLARE_LRECORD (symbol, Lisp_Symbol);
1149 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol) 1150 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol)
1150 #define XSETSYMBOL(x, p) XSETRECORD (x, p, symbol) 1151 #define XSETSYMBOL(x, p) XSETRECORD (x, p, symbol)
1151 #define SYMBOLP(x) RECORDP (x, symbol) 1152 #define SYMBOLP(x) RECORDP (x, symbol)
1152 #define GC_SYMBOLP(x) GC_RECORDP (x, symbol)
1153 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol) 1153 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol)
1154 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol) 1154 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol)
1155 1155
1156 #define symbol_next(s) ((s)->next) 1156 #define symbol_next(s) ((s)->next)
1157 #define symbol_name(s) ((s)->name) 1157 #define symbol_name(s) ((s)->name)
1176 1176
1177 DECLARE_LRECORD (subr, Lisp_Subr); 1177 DECLARE_LRECORD (subr, Lisp_Subr);
1178 #define XSUBR(x) XRECORD (x, subr, Lisp_Subr) 1178 #define XSUBR(x) XRECORD (x, subr, Lisp_Subr)
1179 #define XSETSUBR(x, p) XSETRECORD (x, p, subr) 1179 #define XSETSUBR(x, p) XSETRECORD (x, p, subr)
1180 #define SUBRP(x) RECORDP (x, subr) 1180 #define SUBRP(x) RECORDP (x, subr)
1181 #define GC_SUBRP(x) GC_RECORDP (x, subr)
1182 #define CHECK_SUBR(x) CHECK_RECORD (x, subr) 1181 #define CHECK_SUBR(x) CHECK_RECORD (x, subr)
1183 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr) 1182 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr)
1184 1183
1185 #define subr_function(subr) (subr)->subr_fn 1184 #define subr_function(subr) (subr)->subr_fn
1186 #define subr_name(subr) (subr)->name 1185 #define subr_name(subr) (subr)->name
1199 1198
1200 DECLARE_LRECORD (marker, Lisp_Marker); 1199 DECLARE_LRECORD (marker, Lisp_Marker);
1201 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker) 1200 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker)
1202 #define XSETMARKER(x, p) XSETRECORD (x, p, marker) 1201 #define XSETMARKER(x, p) XSETRECORD (x, p, marker)
1203 #define MARKERP(x) RECORDP (x, marker) 1202 #define MARKERP(x) RECORDP (x, marker)
1204 #define GC_MARKERP(x) GC_RECORDP (x, marker)
1205 #define CHECK_MARKER(x) CHECK_RECORD (x, marker) 1203 #define CHECK_MARKER(x) CHECK_RECORD (x, marker)
1206 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker) 1204 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker)
1207 1205
1208 /* The second check was looking for GCed markers still in use */ 1206 /* The second check was looking for GCed markers still in use */
1209 /* if (INTP (XMARKER (x)->lheader.next.v)) abort (); */ 1207 /* if (INTP (XMARKER (x)->lheader.next.v)) abort (); */
1212 #define marker_prev(m) ((m)->prev) 1210 #define marker_prev(m) ((m)->prev)
1213 1211
1214 /*********** char ***********/ 1212 /*********** char ***********/
1215 1213
1216 #define CHARP(x) (XTYPE (x) == Lisp_Type_Char) 1214 #define CHARP(x) (XTYPE (x) == Lisp_Type_Char)
1217 #define GC_CHARP(x) (XGCTYPE (x) == Lisp_Type_Char)
1218 1215
1219 #ifdef ERROR_CHECK_TYPECHECK 1216 #ifdef ERROR_CHECK_TYPECHECK
1220 1217
1221 INLINE Emchar XCHAR (Lisp_Object obj); 1218 INLINE Emchar XCHAR (Lisp_Object obj);
1222 INLINE Emchar 1219 INLINE Emchar
1254 1251
1255 DECLARE_LRECORD (float, Lisp_Float); 1252 DECLARE_LRECORD (float, Lisp_Float);
1256 #define XFLOAT(x) XRECORD (x, float, Lisp_Float) 1253 #define XFLOAT(x) XRECORD (x, float, Lisp_Float)
1257 #define XSETFLOAT(x, p) XSETRECORD (x, p, float) 1254 #define XSETFLOAT(x, p) XSETRECORD (x, p, float)
1258 #define FLOATP(x) RECORDP (x, float) 1255 #define FLOATP(x) RECORDP (x, float)
1259 #define GC_FLOATP(x) GC_RECORDP (x, float)
1260 #define CHECK_FLOAT(x) CHECK_RECORD (x, float) 1256 #define CHECK_FLOAT(x) CHECK_RECORD (x, float)
1261 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float) 1257 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float)
1262 1258
1263 #define float_data(f) ((f)->data.d) 1259 #define float_data(f) ((f)->data.d)
1264 #define XFLOAT_DATA(x) float_data (XFLOAT (x)) 1260 #define XFLOAT_DATA(x) float_data (XFLOAT (x))
1274 if (!INT_OR_FLOATP (x)) \ 1270 if (!INT_OR_FLOATP (x)) \
1275 x = wrong_type_argument (Qnumberp, x); \ 1271 x = wrong_type_argument (Qnumberp, x); \
1276 } while (0) 1272 } while (0)
1277 1273
1278 # define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x)) 1274 # define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x))
1279 # define GC_INT_OR_FLOATP(x) (GC_INTP (x) || GC_FLOATP (x))
1280 1275
1281 #else /* not LISP_FLOAT_TYPE */ 1276 #else /* not LISP_FLOAT_TYPE */
1282 1277
1283 #define XFLOAT(x) --- error! No float support. --- 1278 #define XFLOAT(x) --- error! No float support. ---
1284 #define XSETFLOAT(x, p) --- error! No float support. --- 1279 #define XSETFLOAT(x, p) --- error! No float support. ---
1285 #define FLOATP(x) 0 1280 #define FLOATP(x) 0
1286 #define GC_FLOATP(x) 0
1287 #define CHECK_FLOAT(x) --- error! No float support. --- 1281 #define CHECK_FLOAT(x) --- error! No float support. ---
1288 #define CONCHECK_FLOAT(x) --- error! No float support. --- 1282 #define CONCHECK_FLOAT(x) --- error! No float support. ---
1289 1283
1290 #define XFLOATINT(n) XINT(n) 1284 #define XFLOATINT(n) XINT(n)
1291 #define CHECK_INT_OR_FLOAT CHECK_INT 1285 #define CHECK_INT_OR_FLOAT CHECK_INT
1292 #define CONCHECK_INT_OR_FLOAT CONCHECK_INT 1286 #define CONCHECK_INT_OR_FLOAT CONCHECK_INT
1293 #define INT_OR_FLOATP(x) (INTP (x)) 1287 #define INT_OR_FLOATP(x) INTP (x)
1294 # define GC_INT_OR_FLOATP(x) (GC_INTP (x))
1295 1288
1296 #endif /* not LISP_FLOAT_TYPE */ 1289 #endif /* not LISP_FLOAT_TYPE */
1297 1290
1298 /*********** int ***********/ 1291 /*********** int ***********/
1299 1292
1300 #define GC_INTP(x) INTP (x)
1301
1302 #define ZEROP(x) EQ (x, Qzero) 1293 #define ZEROP(x) EQ (x, Qzero)
1303 #define GC_ZEROP(x) GC_EQ (x, Qzero)
1304 1294
1305 #ifdef ERROR_CHECK_TYPECHECK 1295 #ifdef ERROR_CHECK_TYPECHECK
1306 1296
1307 INLINE EMACS_INT XINT (Lisp_Object obj); 1297 INLINE EMACS_INT XINT (Lisp_Object obj);
1308 INLINE EMACS_INT 1298 INLINE EMACS_INT
1336 if (!INTP (x)) \ 1326 if (!INTP (x)) \
1337 x = wrong_type_argument (Qintegerp, x); \ 1327 x = wrong_type_argument (Qintegerp, x); \
1338 } while (0) 1328 } while (0)
1339 1329
1340 #define NATNUMP(x) (INTP (x) && XINT (x) >= 0) 1330 #define NATNUMP(x) (INTP (x) && XINT (x) >= 0)
1341 #define GC_NATNUMP(x) (GC_INTP (x) && XINT (x) >= 0)
1342 1331
1343 #define CHECK_NATNUM(x) do { \ 1332 #define CHECK_NATNUM(x) do { \
1344 if (!NATNUMP (x)) \ 1333 if (!NATNUMP (x)) \
1345 dead_wrong_type_argument (Qnatnump, x); \ 1334 dead_wrong_type_argument (Qnatnump, x); \
1346 } while (0) 1335 } while (0)
1458 1447
1459 DECLARE_LRECORD (weak_list, struct weak_list); 1448 DECLARE_LRECORD (weak_list, struct weak_list);
1460 #define XWEAK_LIST(x) XRECORD (x, weak_list, struct weak_list) 1449 #define XWEAK_LIST(x) XRECORD (x, weak_list, struct weak_list)
1461 #define XSETWEAK_LIST(x, p) XSETRECORD (x, p, weak_list) 1450 #define XSETWEAK_LIST(x, p) XSETRECORD (x, p, weak_list)
1462 #define WEAK_LISTP(x) RECORDP (x, weak_list) 1451 #define WEAK_LISTP(x) RECORDP (x, weak_list)
1463 #define GC_WEAK_LISTP(x) GC_RECORDP (x, weak_list)
1464 #define CHECK_WEAK_LIST(x) CHECK_RECORD (x, weak_list) 1452 #define CHECK_WEAK_LIST(x) CHECK_RECORD (x, weak_list)
1465 #define CONCHECK_WEAK_LIST(x) CONCHECK_RECORD (x, weak_list) 1453 #define CONCHECK_WEAK_LIST(x) CONCHECK_RECORD (x, weak_list)
1466 1454
1467 #define weak_list_list(w) ((w)->list) 1455 #define weak_list_list(w) ((w)->list)
1468 #define XWEAK_LIST_LIST(w) (XWEAK_LIST (w)->list) 1456 #define XWEAK_LIST_LIST(w) (XWEAK_LIST (w)->list)
1469 1457
1470 Lisp_Object make_weak_list (enum weak_list_type type); 1458 Lisp_Object make_weak_list (enum weak_list_type type);
1471 /* The following two are only called by the garbage collector */ 1459 /* The following two are only called by the garbage collector */
1472 int finish_marking_weak_lists (int (*obj_marked_p) (Lisp_Object), 1460 int finish_marking_weak_lists (void);
1473 void (*markobj) (Lisp_Object)); 1461 void prune_weak_lists (void);
1474 void prune_weak_lists (int (*obj_marked_p) (Lisp_Object));
1475 1462
1476 /*********** lcrecord lists ***********/ 1463 /*********** lcrecord lists ***********/
1477 1464
1478 struct lcrecord_list 1465 struct lcrecord_list
1479 { 1466 {
1485 1472
1486 DECLARE_LRECORD (lcrecord_list, struct lcrecord_list); 1473 DECLARE_LRECORD (lcrecord_list, struct lcrecord_list);
1487 #define XLCRECORD_LIST(x) XRECORD (x, lcrecord_list, struct lcrecord_list) 1474 #define XLCRECORD_LIST(x) XRECORD (x, lcrecord_list, struct lcrecord_list)
1488 #define XSETLCRECORD_LIST(x, p) XSETRECORD (x, p, lcrecord_list) 1475 #define XSETLCRECORD_LIST(x, p) XSETRECORD (x, p, lcrecord_list)
1489 #define LCRECORD_LISTP(x) RECORDP (x, lcrecord_list) 1476 #define LCRECORD_LISTP(x) RECORDP (x, lcrecord_list)
1490 #define GC_LCRECORD_LISTP(x) GC_RECORDP (x, lcrecord_list)
1491 /* #define CHECK_LCRECORD_LIST(x) CHECK_RECORD (x, lcrecord_list) 1477 /* #define CHECK_LCRECORD_LIST(x) CHECK_RECORD (x, lcrecord_list)
1492 Lcrecord lists should never escape to the Lisp level, so 1478 Lcrecord lists should never escape to the Lisp level, so
1493 functions should not be doing this. */ 1479 functions should not be doing this. */
1494 1480
1495 Lisp_Object make_lcrecord_list (size_t size, 1481 Lisp_Object make_lcrecord_list (size_t size,
1812 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \ 1798 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
1813 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \ 1799 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \
1814 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \ 1800 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \
1815 gcprolist = &gcpro4 )) 1801 gcprolist = &gcpro4 ))
1816 1802
1817 #define GCPRO5(var1, var2, var3, var4, var5) \ 1803 #define GCPRO5(var1, var2, var3, var4, var5) ((void) ( \
1818 ((void) ( \
1819 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \ 1804 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
1820 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \ 1805 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
1821 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \ 1806 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \
1822 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \ 1807 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \
1823 gcpro5.next = &gcpro4, gcpro5.var = &var5, gcpro5.nvars = 1, \ 1808 gcpro5.next = &gcpro4, gcpro5.var = &var5, gcpro5.nvars = 1, \
1845 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \ 1830 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
1846 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \ 1831 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \
1847 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \ 1832 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \
1848 gcprolist = &ngcpro4 )) 1833 gcprolist = &ngcpro4 ))
1849 1834
1850 #define NGCPRO5(var1, var2, var3, var4, var5) \ 1835 #define NGCPRO5(var1, var2, var3, var4, var5) ((void) ( \
1851 ((void) ( \
1852 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \ 1836 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
1853 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \ 1837 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
1854 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \ 1838 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \
1855 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \ 1839 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \
1856 ngcpro5.next = &ngcpro4, ngcpro5.var = &var5, ngcpro5.nvars = 1, \ 1840 ngcpro5.next = &ngcpro4, ngcpro5.var = &var5, ngcpro5.nvars = 1, \
1878 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \ 1862 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
1879 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \ 1863 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \
1880 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \ 1864 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \
1881 gcprolist = &nngcpro4 )) 1865 gcprolist = &nngcpro4 ))
1882 1866
1883 #define NNGCPRO5(var1, var2, var3, var4, var5) \ 1867 #define NNGCPRO5(var1, var2, var3, var4, var5) ((void) ( \
1884 ((void) ( \
1885 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \ 1868 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
1886 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \ 1869 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
1887 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \ 1870 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \
1888 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \ 1871 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \
1889 nngcpro5.next = &nngcpro4, nngcpro5.var = &var5, nngcpro5.nvars = 1, \ 1872 nngcpro5.next = &nngcpro4, nngcpro5.var = &var5, nngcpro5.nvars = 1, \
1940 RETURN_SANS_WARNINGS ret_nunb_val; \ 1923 RETURN_SANS_WARNINGS ret_nunb_val; \
1941 } while (0) 1924 } while (0)
1942 1925
1943 /* Call staticpro (&var) to protect static variable `var'. */ 1926 /* Call staticpro (&var) to protect static variable `var'. */
1944 void staticpro (Lisp_Object *); 1927 void staticpro (Lisp_Object *);
1928
1929 /* Call staticpro_nodump (&var) to protect static variable `var'. */
1930 /* var will not be saved at dump time */
1931 void staticpro_nodump (Lisp_Object *);
1932
1933 /* Call dumpstruct(&var, &desc) to dump the structure pointed to by `var'. */
1934 void dumpstruct (void *, const struct struct_description *);
1935
1936 /* Call pdump_wire(&var) to ensure that var is properly updated after pdump. */
1937 void pdump_wire (Lisp_Object *);
1938
1939 /* Call pdump_wire(&var) to ensure that var is properly updated after
1940 pdump. var must point to a linked list of objects out of which
1941 some may not be dumped */
1942 void pdump_wire_list (Lisp_Object *);
1945 1943
1946 /* Nonzero means Emacs has already been initialized. 1944 /* Nonzero means Emacs has already been initialized.
1947 Used during startup to detect startup of dumped Emacs. */ 1945 Used during startup to detect startup of dumped Emacs. */
1948 extern int initialized; 1946 extern int initialized;
1949 1947
1990 #else 1988 #else
1991 #define IS_DEVICE_SEP(c) ((c) == DEVICE_SEP) 1989 #define IS_DEVICE_SEP(c) ((c) == DEVICE_SEP)
1992 #endif 1990 #endif
1993 #endif 1991 #endif
1994 #ifndef IS_ANY_SEP 1992 #ifndef IS_ANY_SEP
1995 #define IS_ANY_SEP(c) (IS_DIRECTORY_SEP (c)) 1993 #define IS_ANY_SEP(c) IS_DIRECTORY_SEP (c)
1996 #endif 1994 #endif
1997 1995
1998 #ifdef HAVE_INTTYPES_H 1996 #ifdef HAVE_INTTYPES_H
1999 #include <inttypes.h> 1997 #include <inttypes.h>
2000 #elif SIZEOF_VOID_P == SIZEOF_INT 1998 #elif SIZEOF_VOID_P == SIZEOF_INT
2054 void free_list (Lisp_Object); 2052 void free_list (Lisp_Object);
2055 void free_alist (Lisp_Object); 2053 void free_alist (Lisp_Object);
2056 void mark_conses_in_list (Lisp_Object); 2054 void mark_conses_in_list (Lisp_Object);
2057 void free_marker (Lisp_Marker *); 2055 void free_marker (Lisp_Marker *);
2058 int object_dead_p (Lisp_Object); 2056 int object_dead_p (Lisp_Object);
2057 void mark_object (Lisp_Object obj);
2058 int marked_p (Lisp_Object obj);
2059 2059
2060 #ifdef MEMORY_USAGE_STATS 2060 #ifdef MEMORY_USAGE_STATS
2061 size_t malloced_storage_size (void *, size_t, struct overhead_stats *); 2061 size_t malloced_storage_size (void *, size_t, struct overhead_stats *);
2062 size_t fixed_type_block_overhead (size_t); 2062 size_t fixed_type_block_overhead (size_t);
2063 #endif
2064 #ifdef PDUMP
2065 void pdump (void);
2066 int pdump_load (void);
2067
2068 extern char *pdump_start, *pdump_end;
2069 #define DUMPEDP(adr) ((((char *)(adr)) < pdump_end) && (((char *)(adr)) >= pdump_start))
2070 #else
2071 #define DUMPEDP(adr) 0
2063 #endif 2072 #endif
2064 2073
2065 /* Defined in buffer.c */ 2074 /* Defined in buffer.c */
2066 Lisp_Object make_buffer (struct buffer *); 2075 Lisp_Object make_buffer (struct buffer *);
2067 Lisp_Object get_truename_buffer (Lisp_Object); 2076 Lisp_Object get_truename_buffer (Lisp_Object);
2081 DECLARE_DOESNT_RETURN (args_out_of_range (Lisp_Object, Lisp_Object)); 2090 DECLARE_DOESNT_RETURN (args_out_of_range (Lisp_Object, Lisp_Object));
2082 DECLARE_DOESNT_RETURN (args_out_of_range_3 (Lisp_Object, Lisp_Object, 2091 DECLARE_DOESNT_RETURN (args_out_of_range_3 (Lisp_Object, Lisp_Object,
2083 Lisp_Object)); 2092 Lisp_Object));
2084 Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object); 2093 Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
2085 DECLARE_DOESNT_RETURN (dead_wrong_type_argument (Lisp_Object, Lisp_Object)); 2094 DECLARE_DOESNT_RETURN (dead_wrong_type_argument (Lisp_Object, Lisp_Object));
2086 void check_int_range (int, int, int); 2095 void check_int_range (EMACS_INT, EMACS_INT, EMACS_INT);
2087 2096
2088 enum arith_comparison { 2097 enum arith_comparison {
2089 arith_equal, 2098 arith_equal,
2090 arith_notequal, 2099 arith_notequal,
2091 arith_less, 2100 arith_less,
2128 char *get_home_directory (void); 2137 char *get_home_directory (void);
2129 char *user_login_name (int *); 2138 char *user_login_name (int *);
2130 Bufpos bufpos_clip_to_bounds (Bufpos, Bufpos, Bufpos); 2139 Bufpos bufpos_clip_to_bounds (Bufpos, Bufpos, Bufpos);
2131 Bytind bytind_clip_to_bounds (Bytind, Bytind, Bytind); 2140 Bytind bytind_clip_to_bounds (Bytind, Bytind, Bytind);
2132 void buffer_insert1 (struct buffer *, Lisp_Object); 2141 void buffer_insert1 (struct buffer *, Lisp_Object);
2133 Lisp_Object make_string_from_buffer (struct buffer *, int, int); 2142 Lisp_Object make_string_from_buffer (struct buffer *, Bufpos, Charcount);
2134 Lisp_Object make_string_from_buffer_no_extents (struct buffer *, int, int); 2143 Lisp_Object make_string_from_buffer_no_extents (struct buffer *, Bufpos, Charcount);
2135 Lisp_Object save_excursion_save (void); 2144 Lisp_Object save_excursion_save (void);
2136 Lisp_Object save_restriction_save (void); 2145 Lisp_Object save_restriction_save (void);
2137 Lisp_Object save_excursion_restore (Lisp_Object); 2146 Lisp_Object save_excursion_restore (Lisp_Object);
2138 Lisp_Object save_restriction_restore (Lisp_Object); 2147 Lisp_Object save_restriction_restore (Lisp_Object);
2139 2148
2334 Lisp_Object delq_no_quit_and_free_cons (Lisp_Object, Lisp_Object); 2343 Lisp_Object delq_no_quit_and_free_cons (Lisp_Object, Lisp_Object);
2335 Lisp_Object remassoc_no_quit (Lisp_Object, Lisp_Object); 2344 Lisp_Object remassoc_no_quit (Lisp_Object, Lisp_Object);
2336 Lisp_Object remassq_no_quit (Lisp_Object, Lisp_Object); 2345 Lisp_Object remassq_no_quit (Lisp_Object, Lisp_Object);
2337 Lisp_Object remrassq_no_quit (Lisp_Object, Lisp_Object); 2346 Lisp_Object remrassq_no_quit (Lisp_Object, Lisp_Object);
2338 2347
2339 void pure_put (Lisp_Object, Lisp_Object, Lisp_Object);
2340 int plists_differ (Lisp_Object, Lisp_Object, int, int, int); 2348 int plists_differ (Lisp_Object, Lisp_Object, int, int, int);
2341 Lisp_Object internal_plist_get (Lisp_Object, Lisp_Object); 2349 Lisp_Object internal_plist_get (Lisp_Object, Lisp_Object);
2342 void internal_plist_put (Lisp_Object *, Lisp_Object, Lisp_Object); 2350 void internal_plist_put (Lisp_Object *, Lisp_Object, Lisp_Object);
2343 int internal_remprop (Lisp_Object *, Lisp_Object); 2351 int internal_remprop (Lisp_Object *, Lisp_Object);
2344 Lisp_Object external_plist_get (Lisp_Object *, Lisp_Object, 2352 Lisp_Object external_plist_get (Lisp_Object *, Lisp_Object,
2363 Lisp_Object encode_error_behavior_flag (Error_behavior); 2371 Lisp_Object encode_error_behavior_flag (Error_behavior);
2364 2372
2365 /* Defined in indent.c */ 2373 /* Defined in indent.c */
2366 int bi_spaces_at_point (struct buffer *, Bytind); 2374 int bi_spaces_at_point (struct buffer *, Bytind);
2367 int column_at_point (struct buffer *, Bufpos, int); 2375 int column_at_point (struct buffer *, Bufpos, int);
2376 int string_column_at_point (struct Lisp_String *, Bufpos, int);
2368 int current_column (struct buffer *); 2377 int current_column (struct buffer *);
2369 void invalidate_current_column (void); 2378 void invalidate_current_column (void);
2370 Bufpos vmotion (struct window *, Bufpos, int, int *); 2379 Bufpos vmotion (struct window *, Bufpos, int, int *);
2371 Bufpos vmotion_pixels (Lisp_Object, Bufpos, int, int, int *); 2380 Bufpos vmotion_pixels (Lisp_Object, Bufpos, int, int, int *);
2372 2381
2465 Lisp_Object, Lisp_Object); 2474 Lisp_Object, Lisp_Object);
2466 void float_to_string (char *, double); 2475 void float_to_string (char *, double);
2467 void internal_object_printer (Lisp_Object, Lisp_Object, int); 2476 void internal_object_printer (Lisp_Object, Lisp_Object, int);
2468 2477
2469 /* Defined in profile.c */ 2478 /* Defined in profile.c */
2470 void mark_profiling_info (void (*) (Lisp_Object)); 2479 void mark_profiling_info (void);
2471 void profile_increase_call_count (Lisp_Object); 2480 void profile_increase_call_count (Lisp_Object);
2472 extern int profiling_active; 2481 extern int profiling_active;
2473 extern int profiling_redisplay_flag; 2482 extern int profiling_redisplay_flag;
2474 2483
2475 /* Defined in rangetab.c */ 2484 /* Defined in rangetab.c */
2487 struct re_registers; 2496 struct re_registers;
2488 Bufpos scan_buffer (struct buffer *, Emchar, Bufpos, Bufpos, EMACS_INT, EMACS_INT *, int); 2497 Bufpos scan_buffer (struct buffer *, Emchar, Bufpos, Bufpos, EMACS_INT, EMACS_INT *, int);
2489 Bufpos find_next_newline (struct buffer *, Bufpos, int); 2498 Bufpos find_next_newline (struct buffer *, Bufpos, int);
2490 Bufpos find_next_newline_no_quit (struct buffer *, Bufpos, int); 2499 Bufpos find_next_newline_no_quit (struct buffer *, Bufpos, int);
2491 Bytind bi_find_next_newline_no_quit (struct buffer *, Bytind, int); 2500 Bytind bi_find_next_newline_no_quit (struct buffer *, Bytind, int);
2501 Bytind bi_find_next_emchar_in_string (struct Lisp_String*, Emchar, Bytind, EMACS_INT);
2492 Bufpos find_before_next_newline (struct buffer *, Bufpos, Bufpos, int); 2502 Bufpos find_before_next_newline (struct buffer *, Bufpos, Bufpos, int);
2493 struct re_pattern_buffer *compile_pattern (Lisp_Object, struct re_registers *, 2503 struct re_pattern_buffer *compile_pattern (Lisp_Object, struct re_registers *,
2494 char *, int, Error_behavior); 2504 char *, int, Error_behavior);
2495 Bytecount fast_string_match (Lisp_Object, CONST Bufbyte *, 2505 Bytecount fast_string_match (Lisp_Object, CONST Bufbyte *,
2496 Lisp_Object, Bytecount, 2506 Lisp_Object, Bytecount,
2528 void reject_constant_symbols (Lisp_Object sym, Lisp_Object newval, 2538 void reject_constant_symbols (Lisp_Object sym, Lisp_Object newval,
2529 int function_p, 2539 int function_p,
2530 Lisp_Object follow_past_lisp_magic); 2540 Lisp_Object follow_past_lisp_magic);
2531 2541
2532 /* Defined in syntax.c */ 2542 /* Defined in syntax.c */
2533 int scan_words (struct buffer *, int, int); 2543 Bufpos scan_words (struct buffer *, Bufpos, int);
2534 2544
2535 /* Defined in undo.c */ 2545 /* Defined in undo.c */
2536 Lisp_Object truncate_undo_list (Lisp_Object, int, int); 2546 Lisp_Object truncate_undo_list (Lisp_Object, int, int);
2537 void record_extent (Lisp_Object, int); 2547 void record_extent (Lisp_Object, int);
2538 void record_insert (struct buffer *, Bufpos, Charcount); 2548 void record_insert (struct buffer *, Bufpos, Charcount);
2738 EXFUN (Fprinc, 2); 2748 EXFUN (Fprinc, 2);
2739 EXFUN (Fprint, 2); 2749 EXFUN (Fprint, 2);
2740 EXFUN (Fprocess_status, 1); 2750 EXFUN (Fprocess_status, 1);
2741 EXFUN (Fprogn, UNEVALLED); 2751 EXFUN (Fprogn, UNEVALLED);
2742 EXFUN (Fprovide, 1); 2752 EXFUN (Fprovide, 1);
2743 EXFUN (Fpurecopy, 1);
2744 EXFUN (Fput, 3); 2753 EXFUN (Fput, 3);
2745 EXFUN (Fput_range_table, 4); 2754 EXFUN (Fput_range_table, 4);
2746 EXFUN (Fput_text_property, 5); 2755 EXFUN (Fput_text_property, 5);
2747 EXFUN (Fquo, MANY); 2756 EXFUN (Fquo, MANY);
2748 EXFUN (Frassq, 2); 2757 EXFUN (Frassq, 2);
2803 extern Lisp_Object Q_style, Qactually_requested, Qactivate_menubar_hook; 2812 extern Lisp_Object Q_style, Qactually_requested, Qactivate_menubar_hook;
2804 extern Lisp_Object Qafter, Qall, Qand; 2813 extern Lisp_Object Qafter, Qall, Qand;
2805 extern Lisp_Object Qarith_error, Qarrayp, Qassoc, Qat, Qautodetect, Qautoload; 2814 extern Lisp_Object Qarith_error, Qarrayp, Qassoc, Qat, Qautodetect, Qautoload;
2806 extern Lisp_Object Qbackground, Qbackground_pixmap, Qbad_variable, Qbefore; 2815 extern Lisp_Object Qbackground, Qbackground_pixmap, Qbad_variable, Qbefore;
2807 extern Lisp_Object Qbeginning_of_buffer, Qbig5, Qbinary, Qbitmap, Qbitp, Qblinking; 2816 extern Lisp_Object Qbeginning_of_buffer, Qbig5, Qbinary, Qbitmap, Qbitp, Qblinking;
2808 extern Lisp_Object Qboolean, Qbottom, Qbuffer, Qbuffer_file_coding_system; 2817 extern Lisp_Object Qboolean, Qbottom, Qbuffer;
2809 extern Lisp_Object Qbuffer_glyph_p, Qbuffer_live_p, Qbuffer_read_only, Qbutton; 2818 extern Lisp_Object Qbuffer_glyph_p, Qbuffer_live_p, Qbuffer_read_only, Qbutton;
2810 extern Lisp_Object Qbyte_code, Qcall_interactively, Qcategory; 2819 extern Lisp_Object Qbyte_code, Qcall_interactively, Qcategory;
2811 extern Lisp_Object Qcategory_designator_p, Qcategory_table_value_p, Qccl, Qcdr; 2820 extern Lisp_Object Qcategory_designator_p, Qcategory_table_value_p, Qccl, Qcdr;
2812 extern Lisp_Object Qchannel, Qchar, Qchar_or_string_p, Qcharacter, Qcharacterp; 2821 extern Lisp_Object Qchannel, Qchar, Qchar_or_string_p, Qcharacter, Qcharacterp;
2813 extern Lisp_Object Qchars, Qcharset_g0, Qcharset_g1, Qcharset_g2, Qcharset_g3; 2822 extern Lisp_Object Qchars, Qcharset_g0, Qcharset_g1, Qcharset_g2, Qcharset_g3;
2814 extern Lisp_Object Qcircular_list, Qcircular_property_list; 2823 extern Lisp_Object Qcenter, Qcircular_list, Qcircular_property_list;
2815 extern Lisp_Object Qcoding_system_error, Qcoding_system_p; 2824 extern Lisp_Object Qcoding_system_error;
2816 extern Lisp_Object Qcolor, Qcolor_pixmap_image_instance_p; 2825 extern Lisp_Object Qcolor, Qcolor_pixmap_image_instance_p;
2817 extern Lisp_Object Qcolumns, Qcommand, Qcommandp, Qcompletion_ignore_case; 2826 extern Lisp_Object Qcolumns, Qcommand, Qcommandp, Qcompletion_ignore_case;
2818 extern Lisp_Object Qconsole, Qconsole_live_p, Qconst_specifier, Qcr, Qcritical; 2827 extern Lisp_Object Qconsole, Qconsole_live_p, Qconst_specifier, Qcr, Qcritical;
2819 extern Lisp_Object Qcrlf, Qctext, Qcurrent_menubar, Qcursor; 2828 extern Lisp_Object Qcrlf, Qctext, Qcurrent_menubar, Qcursor;
2820 extern Lisp_Object Qcyclic_variable_indirection, Qdata, Qdead, Qdecode; 2829 extern Lisp_Object Qcyclic_variable_indirection, Qdata, Qdead, Qdecode;
2827 extern Lisp_Object Qeval, Qevent_live_p, Qexit, Qextent_live_p, Qextents; 2836 extern Lisp_Object Qeval, Qevent_live_p, Qexit, Qextent_live_p, Qextents;
2828 extern Lisp_Object Qexternal_debugging_output, Qface, Qfeaturep, Qfile_error; 2837 extern Lisp_Object Qexternal_debugging_output, Qface, Qfeaturep, Qfile_error;
2829 extern Lisp_Object Qfont, Qforce_g0_on_output, Qforce_g1_on_output; 2838 extern Lisp_Object Qfont, Qforce_g0_on_output, Qforce_g1_on_output;
2830 extern Lisp_Object Qforce_g2_on_output, Qforce_g3_on_output, Qforeground; 2839 extern Lisp_Object Qforce_g2_on_output, Qforce_g3_on_output, Qforeground;
2831 extern Lisp_Object Qformat, Qframe, Qframe_live_p, Qfunction, Qgap_overhead; 2840 extern Lisp_Object Qformat, Qframe, Qframe_live_p, Qfunction, Qgap_overhead;
2832 extern Lisp_Object Qgeneric, Qgeometry, Qglobal, Qheight, Qhighlight, Qicon; 2841 extern Lisp_Object Qgeneric, Qgeometry, Qglobal, Qheight, Qhighlight, Qhorizontal, Qicon;
2833 extern Lisp_Object Qicon_glyph_p, Qid, Qidentity, Qimage, Qinfo, Qinherit; 2842 extern Lisp_Object Qicon_glyph_p, Qid, Qidentity, Qimage, Qinfo, Qinherit;
2834 extern Lisp_Object Qinhibit_quit, Qinhibit_read_only; 2843 extern Lisp_Object Qinhibit_quit, Qinhibit_read_only;
2835 extern Lisp_Object Qinput_charset_conversion, Qinteger; 2844 extern Lisp_Object Qinput_charset_conversion, Qinteger;
2836 extern Lisp_Object Qinteger_char_or_marker_p, Qinteger_or_char_p; 2845 extern Lisp_Object Qinteger_char_or_marker_p, Qinteger_or_char_p;
2837 extern Lisp_Object Qinteger_or_marker_p, Qintegerp, Qinteractive, Qinternal; 2846 extern Lisp_Object Qinteger_or_marker_p, Qintegerp, Qinteractive, Qinternal;
2838 extern Lisp_Object Qinvalid_function, Qinvalid_read_syntax, Qio_error; 2847 extern Lisp_Object Qinvalid_function, Qinvalid_read_syntax, Qio_error;
2839 extern Lisp_Object Qiso2022, Qkey, Qkey_assoc, Qkeymap, Qlambda, Qleft, Qlf; 2848 extern Lisp_Object Qiso2022, Qkey, Qkey_assoc, Qkeymap, Qlambda, Qlayout, Qleft, Qlf;
2840 extern Lisp_Object Qlist, Qlistp, Qload, Qlock_shift, Qmacro, Qmagic; 2849 extern Lisp_Object Qlist, Qlistp, Qload, Qlock_shift, Qmacro, Qmagic;
2841 extern Lisp_Object Qmalformed_list, Qmalformed_property_list; 2850 extern Lisp_Object Qmalformed_list, Qmalformed_property_list;
2842 extern Lisp_Object Qmalloc_overhead, Qmark, Qmarkers; 2851 extern Lisp_Object Qmalloc_overhead, Qmark, Qmarkers;
2843 extern Lisp_Object Qmax, Qmemory, Qmessage, Qminus, Qmnemonic, Qmodifiers; 2852 extern Lisp_Object Qmax, Qmemory, Qmessage, Qminus, Qmnemonic, Qmodifiers;
2844 extern Lisp_Object Qmono_pixmap_image_instance_p, Qmotion; 2853 extern Lisp_Object Qmono_pixmap_image_instance_p, Qmotion;
2845 extern Lisp_Object Qmouse_leave_buffer_hook, Qmswindows, Qname, Qnas, Qnatnump; 2854 extern Lisp_Object Qmouse_leave_buffer_hook, Qmswindows, Qname, Qnas, Qnatnump;
2846 extern Lisp_Object Qno_ascii_cntl, Qno_ascii_eol, Qno_catch; 2855 extern Lisp_Object Qno_ascii_cntl, Qno_ascii_eol, Qno_catch;
2847 extern Lisp_Object Qno_conversion, Qno_iso6429, Qnone, Qnot, Qnothing; 2856 extern Lisp_Object Qno_conversion, Qno_iso6429, Qnone, Qnot, Qnothing;
2848 extern Lisp_Object Qnothing_image_instance_p, Qnotice; 2857 extern Lisp_Object Qnothing_image_instance_p, Qnotice;
2849 extern Lisp_Object Qnumber_char_or_marker_p, Qnumber_or_marker_p, Qnumberp; 2858 extern Lisp_Object Qnumber_char_or_marker_p, Qnumberp;
2850 extern Lisp_Object Qobject, Qold_assoc, Qold_delete, Qold_delq, Qold_rassoc; 2859 extern Lisp_Object Qobject, Qold_assoc, Qold_delete, Qold_delq, Qold_rassoc;
2851 extern Lisp_Object Qold_rassq, Qonly, Qor, Qother, Qoutput_charset_conversion; 2860 extern Lisp_Object Qold_rassq, Qonly, Qor, Qother, Qoutput_charset_conversion;
2852 extern Lisp_Object Qoverflow_error, Qpath, Qpoint, Qpointer, Qpointer_glyph_p; 2861 extern Lisp_Object Qoverflow_error, Qpoint, Qpointer, Qpointer_glyph_p;
2853 extern Lisp_Object Qpointer_image_instance_p, Qpost_read_conversion; 2862 extern Lisp_Object Qpointer_image_instance_p, Qpost_read_conversion;
2854 extern Lisp_Object Qpre_write_conversion, Qprint, Qprint_length; 2863 extern Lisp_Object Qpre_write_conversion, Qprint, Qprint_length;
2855 extern Lisp_Object Qprint_string_length, Qprocess, Qprogn, Qprovide, Qquit; 2864 extern Lisp_Object Qprint_string_length, Qprocess, Qprogn, Qprovide, Qquit;
2856 extern Lisp_Object Qquote, Qrange_error, Qrassoc, Qrassq, Qread_char; 2865 extern Lisp_Object Qquote, Qrange_error, Qrassoc, Qrassq, Qread_char;
2857 extern Lisp_Object Qread_from_minibuffer, Qreally_early_error_handler; 2866 extern Lisp_Object Qread_from_minibuffer, Qreally_early_error_handler;
2866 extern Lisp_Object Qtext, Qtext_image_instance_p, Qtimeout, Qtimestamp; 2875 extern Lisp_Object Qtext, Qtext_image_instance_p, Qtimeout, Qtimestamp;
2867 extern Lisp_Object Qtoolbar, Qtop, Qtop_level, Qtrue_list_p, Qtty, Qtype; 2876 extern Lisp_Object Qtoolbar, Qtop, Qtop_level, Qtrue_list_p, Qtty, Qtype;
2868 extern Lisp_Object Qunbound, Qundecided, Qundefined, Qunderflow_error; 2877 extern Lisp_Object Qunbound, Qundecided, Qundefined, Qunderflow_error;
2869 extern Lisp_Object Qunderline, Qunimplemented, Quser_files_and_directories; 2878 extern Lisp_Object Qunderline, Qunimplemented, Quser_files_and_directories;
2870 extern Lisp_Object Qvalue_assoc, Qvalues; 2879 extern Lisp_Object Qvalue_assoc, Qvalues;
2871 extern Lisp_Object Qvariable_documentation, Qvariable_domain, Qvector; 2880 extern Lisp_Object Qvariable_documentation, Qvariable_domain, Qvertical;
2872 extern Lisp_Object Qvoid_function, Qvoid_variable, Qwarning, Qwidth, Qwidget, Qwindow; 2881 extern Lisp_Object Qvoid_function, Qvoid_variable, Qwarning, Qwidth, Qwidget, Qwindow;
2873 extern Lisp_Object Qwindow_live_p, Qwindow_system, Qwrong_number_of_arguments; 2882 extern Lisp_Object Qwindow_live_p, Qwindow_system, Qwrong_number_of_arguments;
2874 extern Lisp_Object Qwrong_type_argument, Qx, Qy, Qyes_or_no_p; 2883 extern Lisp_Object Qwrong_type_argument, Qx, Qy, Qyes_or_no_p;
2875 extern Lisp_Object Vactivate_menubar_hook, Vascii_canon_table; 2884 extern Lisp_Object Vactivate_menubar_hook, Vascii_canon_table;
2876 extern Lisp_Object Vascii_downcase_table, Vascii_eqv_table; 2885 extern Lisp_Object Vascii_downcase_table, Vascii_eqv_table;