comparison src/lisp.h @ 5120:d1247f3cc363 ben-lisp-object

latest work on lisp-object workspace; more changes eliminating LCRECORD in place of LISP_OBJECT; now compiles and runs.
author Ben Wing <ben@xemacs.org>
date Mon, 28 Dec 2009 01:15:52 -0600
parents e0db3c197671
children 623d57b7fbe8
comparison
equal deleted inserted replaced
5119:d877c14318b3 5120:d1247f3cc363
1816 1816
1817 /* In a cons, the markbit of the car is the gc mark bit */ 1817 /* In a cons, the markbit of the car is the gc mark bit */
1818 1818
1819 struct Lisp_Cons 1819 struct Lisp_Cons
1820 { 1820 {
1821 struct lrecord_header lheader; 1821 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
1822 Lisp_Object car_, cdr_; 1822 Lisp_Object car_, cdr_;
1823 }; 1823 };
1824 typedef struct Lisp_Cons Lisp_Cons; 1824 typedef struct Lisp_Cons Lisp_Cons;
1825 1825
1826 #if 0 /* FSFmacs */ 1826 #if 0 /* FSFmacs */
1833 struct buffer *buffer; 1833 struct buffer *buffer;
1834 int charbpos; 1834 int charbpos;
1835 }; 1835 };
1836 #endif 1836 #endif
1837 1837
1838 DECLARE_MODULE_API_LRECORD (cons, Lisp_Cons); 1838 DECLARE_MODULE_API_LISP_OBJECT (cons, Lisp_Cons);
1839 #define XCONS(x) XRECORD (x, cons, Lisp_Cons) 1839 #define XCONS(x) XRECORD (x, cons, Lisp_Cons)
1840 #define wrap_cons(p) wrap_record (p, cons) 1840 #define wrap_cons(p) wrap_record (p, cons)
1841 #define CONSP(x) RECORDP (x, cons) 1841 #define CONSP(x) RECORDP (x, cons)
1842 #define CHECK_CONS(x) CHECK_RECORD (x, cons) 1842 #define CHECK_CONS(x) CHECK_RECORD (x, cons)
1843 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons) 1843 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons)
2371 /*------------------------------ string --------------------------------*/ 2371 /*------------------------------ string --------------------------------*/
2372 2372
2373 #ifdef NEW_GC 2373 #ifdef NEW_GC
2374 struct Lisp_String_Direct_Data 2374 struct Lisp_String_Direct_Data
2375 { 2375 {
2376 struct lrecord_header header; 2376 LISP_OBJECT_HEADER header;
2377 Bytecount size; 2377 Bytecount size;
2378 Ibyte data[1]; 2378 Ibyte data[1];
2379 }; 2379 };
2380 typedef struct Lisp_String_Direct_Data Lisp_String_Direct_Data; 2380 typedef struct Lisp_String_Direct_Data Lisp_String_Direct_Data;
2381 2381
2382 DECLARE_MODULE_API_LRECORD (string_direct_data, Lisp_String_Direct_Data); 2382 DECLARE_MODULE_API_LISP_OBJECT (string_direct_data, Lisp_String_Direct_Data);
2383 #define XSTRING_DIRECT_DATA(x) \ 2383 #define XSTRING_DIRECT_DATA(x) \
2384 XRECORD (x, string_direct_data, Lisp_String_Direct_Data) 2384 XRECORD (x, string_direct_data, Lisp_String_Direct_Data)
2385 #define wrap_string_direct_data(p) wrap_record (p, string_direct_data) 2385 #define wrap_string_direct_data(p) wrap_record (p, string_direct_data)
2386 #define STRING_DIRECT_DATAP(x) RECORDP (x, string_direct_data) 2386 #define STRING_DIRECT_DATAP(x) RECORDP (x, string_direct_data)
2387 #define CHECK_STRING_DIRECT_DATA(x) CHECK_RECORD (x, string_direct_data) 2387 #define CHECK_STRING_DIRECT_DATA(x) CHECK_RECORD (x, string_direct_data)
2391 #define XSTRING_DIRECT_DATA_DATA(x) XSTRING_DIRECT_DATA (x)->data 2391 #define XSTRING_DIRECT_DATA_DATA(x) XSTRING_DIRECT_DATA (x)->data
2392 2392
2393 2393
2394 struct Lisp_String_Indirect_Data 2394 struct Lisp_String_Indirect_Data
2395 { 2395 {
2396 struct lrecord_header header; 2396 LISP_OBJECT_HEADER header;
2397 Bytecount size; 2397 Bytecount size;
2398 Ibyte *data; 2398 Ibyte *data;
2399 }; 2399 };
2400 typedef struct Lisp_String_Indirect_Data Lisp_String_Indirect_Data; 2400 typedef struct Lisp_String_Indirect_Data Lisp_String_Indirect_Data;
2401 2401
2402 DECLARE_MODULE_API_LRECORD (string_indirect_data, Lisp_String_Indirect_Data); 2402 DECLARE_MODULE_API_LISP_OBJECT (string_indirect_data, Lisp_String_Indirect_Data);
2403 #define XSTRING_INDIRECT_DATA(x) \ 2403 #define XSTRING_INDIRECT_DATA(x) \
2404 XRECORD (x, string_indirect_data, Lisp_String_Indirect_Data) 2404 XRECORD (x, string_indirect_data, Lisp_String_Indirect_Data)
2405 #define wrap_string_indirect_data(p) wrap_record (p, string_indirect_data) 2405 #define wrap_string_indirect_data(p) wrap_record (p, string_indirect_data)
2406 #define STRING_INDIRECT_DATAP(x) RECORDP (x, string_indirect_data) 2406 #define STRING_INDIRECT_DATAP(x) RECORDP (x, string_indirect_data)
2407 #define CHECK_STRING_INDIRECT_DATA(x) CHECK_RECORD (x, string_indirect_data) 2407 #define CHECK_STRING_INDIRECT_DATA(x) CHECK_RECORD (x, string_indirect_data)
2472 #define MAX_STRING_ASCII_BEGIN ((1 << 22) - 1) 2472 #define MAX_STRING_ASCII_BEGIN ((1 << 22) - 1)
2473 #else /* not NEW_GC */ 2473 #else /* not NEW_GC */
2474 #define MAX_STRING_ASCII_BEGIN ((1 << 21) - 1) 2474 #define MAX_STRING_ASCII_BEGIN ((1 << 21) - 1)
2475 #endif /* not NEW_GC */ 2475 #endif /* not NEW_GC */
2476 2476
2477 DECLARE_MODULE_API_LRECORD (string, Lisp_String); 2477 DECLARE_MODULE_API_LISP_OBJECT (string, Lisp_String);
2478 #define XSTRING(x) XRECORD (x, string, Lisp_String) 2478 #define XSTRING(x) XRECORD (x, string, Lisp_String)
2479 #define wrap_string(p) wrap_record (p, string) 2479 #define wrap_string(p) wrap_record (p, string)
2480 #define STRINGP(x) RECORDP (x, string) 2480 #define STRINGP(x) RECORDP (x, string)
2481 #define CHECK_STRING(x) CHECK_RECORD (x, string) 2481 #define CHECK_STRING(x) CHECK_RECORD (x, string)
2482 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string) 2482 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string)
2545 2545
2546 /*------------------------------ vector --------------------------------*/ 2546 /*------------------------------ vector --------------------------------*/
2547 2547
2548 struct Lisp_Vector 2548 struct Lisp_Vector
2549 { 2549 {
2550 struct LCRECORD_HEADER header; 2550 LISP_OBJECT_HEADER header;
2551 long size; 2551 long size;
2552 Lisp_Object contents[1]; 2552 Lisp_Object contents[1];
2553 }; 2553 };
2554 typedef struct Lisp_Vector Lisp_Vector; 2554 typedef struct Lisp_Vector Lisp_Vector;
2555 2555
2582 #error You really have 128-bit integers?! 2582 #error You really have 128-bit integers?!
2583 #endif 2583 #endif
2584 2584
2585 struct Lisp_Bit_Vector 2585 struct Lisp_Bit_Vector
2586 { 2586 {
2587 struct LCRECORD_HEADER lheader; 2587 LISP_OBJECT_HEADER lheader;
2588 Elemcount size; 2588 Elemcount size;
2589 unsigned long bits[1]; 2589 unsigned long bits[1];
2590 }; 2590 };
2591 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector; 2591 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector;
2592 2592
2636 (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2) 2636 (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2)
2637 2637
2638 /* For when we want to include a bit vector in another structure, and we 2638 /* For when we want to include a bit vector in another structure, and we
2639 know it's of a fixed size. */ 2639 know it's of a fixed size. */
2640 #define DECLARE_INLINE_LISP_BIT_VECTOR(numbits) struct { \ 2640 #define DECLARE_INLINE_LISP_BIT_VECTOR(numbits) struct { \
2641 struct LCRECORD_HEADER lheader; \ 2641 LISP_OBJECT_HEADER lheader; \
2642 Elemcount size; \ 2642 Elemcount size; \
2643 unsigned long bits[BIT_VECTOR_LONG_STORAGE(numbits)]; \ 2643 unsigned long bits[BIT_VECTOR_LONG_STORAGE(numbits)]; \
2644 } 2644 }
2645 2645
2646 /*------------------------------ symbol --------------------------------*/ 2646 /*------------------------------ symbol --------------------------------*/
2647 2647
2648 typedef struct Lisp_Symbol Lisp_Symbol; 2648 typedef struct Lisp_Symbol Lisp_Symbol;
2649 struct Lisp_Symbol 2649 struct Lisp_Symbol
2650 { 2650 {
2651 struct lrecord_header lheader; 2651 LISP_OBJECT_HEADER lheader;
2652 /* next symbol in this obarray bucket */ 2652 /* next symbol in this obarray bucket */
2653 Lisp_Symbol *next; 2653 Lisp_Symbol *next;
2654 Lisp_Object name; 2654 Lisp_Object name;
2655 Lisp_Object value; 2655 Lisp_Object value;
2656 Lisp_Object function; 2656 Lisp_Object function;
2662 && EQ (sym, oblookup (Vobarray, \ 2662 && EQ (sym, oblookup (Vobarray, \
2663 XSTRING_DATA (symbol_name (XSYMBOL (sym))), \ 2663 XSTRING_DATA (symbol_name (XSYMBOL (sym))), \
2664 XSTRING_LENGTH (symbol_name (XSYMBOL (sym)))))) 2664 XSTRING_LENGTH (symbol_name (XSYMBOL (sym))))))
2665 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj)) 2665 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj))
2666 2666
2667 DECLARE_MODULE_API_LRECORD (symbol, Lisp_Symbol); 2667 DECLARE_MODULE_API_LISP_OBJECT (symbol, Lisp_Symbol);
2668 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol) 2668 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol)
2669 #define wrap_symbol(p) wrap_record (p, symbol) 2669 #define wrap_symbol(p) wrap_record (p, symbol)
2670 #define SYMBOLP(x) RECORDP (x, symbol) 2670 #define SYMBOLP(x) RECORDP (x, symbol)
2671 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol) 2671 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol)
2672 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol) 2672 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol)
2690 We could define such types for n arguments, if needed. */ 2690 We could define such types for n arguments, if needed. */
2691 typedef Lisp_Object (*lisp_fn_t) (void); 2691 typedef Lisp_Object (*lisp_fn_t) (void);
2692 2692
2693 struct Lisp_Subr 2693 struct Lisp_Subr
2694 { 2694 {
2695 struct lrecord_header lheader; 2695 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
2696 short min_args; 2696 short min_args;
2697 short max_args; 2697 short max_args;
2698 /* #### We should make these const Ascbyte * or const Ibyte *, not const 2698 /* #### We should make these const Ascbyte * or const Ibyte *, not const
2699 char *. */ 2699 char *. */
2700 const char *prompt; 2700 const char *prompt;
2720 2720
2721 2721
2722 typedef struct Lisp_Marker Lisp_Marker; 2722 typedef struct Lisp_Marker Lisp_Marker;
2723 struct Lisp_Marker 2723 struct Lisp_Marker
2724 { 2724 {
2725 struct lrecord_header lheader; 2725 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
2726 Lisp_Marker *next; 2726 Lisp_Marker *next;
2727 Lisp_Marker *prev; 2727 Lisp_Marker *prev;
2728 struct buffer *buffer; 2728 struct buffer *buffer;
2729 Membpos membpos; 2729 Membpos membpos;
2730 char insertion_type; 2730 char insertion_type;
2731 }; 2731 };
2732 2732
2733 DECLARE_MODULE_API_LRECORD (marker, Lisp_Marker); 2733 DECLARE_MODULE_API_LISP_OBJECT (marker, Lisp_Marker);
2734 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker) 2734 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker)
2735 #define wrap_marker(p) wrap_record (p, marker) 2735 #define wrap_marker(p) wrap_record (p, marker)
2736 #define MARKERP(x) RECORDP (x, marker) 2736 #define MARKERP(x) RECORDP (x, marker)
2737 #define CHECK_MARKER(x) CHECK_RECORD (x, marker) 2737 #define CHECK_MARKER(x) CHECK_RECORD (x, marker)
2738 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker) 2738 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker)
2974 free list. This makes a difference in the unlikely case of 2974 free list. This makes a difference in the unlikely case of
2975 sizeof(double) being smaller than sizeof(void *). */ 2975 sizeof(double) being smaller than sizeof(void *). */
2976 2976
2977 struct Lisp_Float 2977 struct Lisp_Float
2978 { 2978 {
2979 struct lrecord_header lheader; 2979 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
2980 union { double d; struct Lisp_Float *unused_next_; } data; 2980 union { double d; struct Lisp_Float *unused_next_; } data;
2981 }; 2981 };
2982 typedef struct Lisp_Float Lisp_Float; 2982 typedef struct Lisp_Float Lisp_Float;
2983 2983
2984 DECLARE_LISP_OBJECT (float, Lisp_Float); 2984 DECLARE_LISP_OBJECT (float, Lisp_Float);
3062 3062
3063 /*---------------------------- weak boxes ------------------------------*/ 3063 /*---------------------------- weak boxes ------------------------------*/
3064 3064
3065 struct weak_box 3065 struct weak_box
3066 { 3066 {
3067 struct LCRECORD_HEADER header; 3067 LISP_OBJECT_HEADER header;
3068 Lisp_Object value; 3068 Lisp_Object value;
3069 3069
3070 Lisp_Object next_weak_box; /* don't mark through this! */ 3070 Lisp_Object next_weak_box; /* don't mark through this! */
3071 }; 3071 };
3072 3072
3084 3084
3085 /*--------------------------- ephemerons ----------------------------*/ 3085 /*--------------------------- ephemerons ----------------------------*/
3086 3086
3087 struct ephemeron 3087 struct ephemeron
3088 { 3088 {
3089 struct LCRECORD_HEADER header; 3089 LISP_OBJECT_HEADER header;
3090 3090
3091 Lisp_Object key; 3091 Lisp_Object key;
3092 3092
3093 /* This field holds a pair. The cdr of this cons points to the next 3093 /* This field holds a pair. The cdr of this cons points to the next
3094 ephemeron in Vall_ephemerons. The car points to another pair 3094 ephemeron in Vall_ephemerons. The car points to another pair
3143 WEAK_LIST_FULL_ASSOC 3143 WEAK_LIST_FULL_ASSOC
3144 }; 3144 };
3145 3145
3146 struct weak_list 3146 struct weak_list
3147 { 3147 {
3148 struct LCRECORD_HEADER header; 3148 LISP_OBJECT_HEADER header;
3149 Lisp_Object list; /* don't mark through this! */ 3149 Lisp_Object list; /* don't mark through this! */
3150 enum weak_list_type type; 3150 enum weak_list_type type;
3151 Lisp_Object next_weak; /* don't mark through this! */ 3151 Lisp_Object next_weak; /* don't mark through this! */
3152 }; 3152 };
3153 3153