Mercurial > hg > xemacs-beta
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 |