X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Flrecord.h;h=bee51017f32ec45dacb91c7f403d84a6658a11af;hb=4f29597e4f3696a59bb08ffece07183c1568c4a5;hp=d222ca306854be634c7a7f5525c1ff0a2b72baff;hpb=3890a2e3064a7f562107c58e59d928284ec04741;p=chise%2Fxemacs-chise.git- diff --git a/src/lrecord.h b/src/lrecord.h index d222ca3..bee5101 100644 --- a/src/lrecord.h +++ b/src/lrecord.h @@ -75,18 +75,43 @@ struct lrecord_header /* 1 if the object is readonly from lisp */ unsigned int lisp_readonly :1; + +#ifdef UTF2000 + /* The `older field is a flag that indicates whether this lcrecord + is on a "older storage". */ + unsigned int older :1; +#endif }; struct lrecord_implementation; int lrecord_type_index (const struct lrecord_implementation *implementation); +#ifdef UTF2000 #define set_lheader_implementation(header,imp) do { \ struct lrecord_header* SLI_header = (header); \ SLI_header->type = (imp)->lrecord_type_index; \ SLI_header->mark = 0; \ + SLI_header->older = 0; \ SLI_header->c_readonly = 0; \ SLI_header->lisp_readonly = 0; \ } while (0) +#define set_lheader_older_implementation(header,imp) do { \ + struct lrecord_header* SLI_header = (header); \ + SLI_header->type = (imp)->lrecord_type_index; \ + SLI_header->mark = 0; \ + SLI_header->older = 1; \ + SLI_header->c_readonly = 0; \ + SLI_header->lisp_readonly = 0; \ +} while (0) +#else +#define set_lheader_implementation(header,imp) do { \ + struct lrecord_header* SLI_header = (header); \ + SLI_header->type = (imp)->lrecord_type_index; \ + SLI_header->mark = 0; \ + SLI_header->c_readonly = 0; \ + SLI_header->lisp_readonly = 0; \ +} while (0) +#endif struct lcrecord_header { @@ -154,6 +179,8 @@ enum lrecord_type lrecord_type_coding_system, lrecord_type_char_table, lrecord_type_char_table_entry, + lrecord_type_char_id_table, + lrecord_type_byte_table, lrecord_type_range_table, lrecord_type_opaque, lrecord_type_opaque_ptr, @@ -184,7 +211,9 @@ enum lrecord_type lrecord_type_tooltalk_message, lrecord_type_tooltalk_pattern, lrecord_type_ldap, - lrecord_type_count + lrecord_type_pgconn, + lrecord_type_pgresult, + lrecord_type_count /* must be last */ }; struct lrecord_implementation @@ -269,6 +298,10 @@ extern int gc_in_progress; #define MARK_RECORD_HEADER(lheader) ((void) ((lheader)->mark = 1)) #define UNMARK_RECORD_HEADER(lheader) ((void) ((lheader)->mark = 0)) +#define OLDER_RECORD_P(obj) (XRECORD_LHEADER (obj)->older) +#define OLDER_RECORD_HEADER_P(lheader) ((lheader)->older) + + #define C_READONLY_RECORD_HEADER_P(lheader) ((lheader)->c_readonly) #define LISP_READONLY_RECORD_HEADER_P(lheader) ((lheader)->lisp_readonly) #define SET_C_READONLY_RECORD_HEADER(lheader) do { \ @@ -479,8 +512,9 @@ extern Lisp_Object (*lrecord_markers[]) (Lisp_Object); # define DECLARE_LRECORD(c_name, structtype) \ extern const struct lrecord_implementation lrecord_##c_name; \ -INLINE structtype *error_check_##c_name (Lisp_Object obj); \ -INLINE structtype * \ +INLINE_HEADER structtype * \ +error_check_##c_name (Lisp_Object obj); \ +INLINE_HEADER structtype * \ error_check_##c_name (Lisp_Object obj) \ { \ assert (RECORD_TYPEP (obj, lrecord_type_##c_name)); \ @@ -489,8 +523,9 @@ error_check_##c_name (Lisp_Object obj) \ extern Lisp_Object Q##c_name##p # define DECLARE_NONRECORD(c_name, type_enum, structtype) \ -INLINE structtype *error_check_##c_name (Lisp_Object obj); \ -INLINE structtype * \ +INLINE_HEADER structtype * \ +error_check_##c_name (Lisp_Object obj); \ +INLINE_HEADER structtype * \ error_check_##c_name (Lisp_Object obj) \ { \ assert (XTYPE (obj) == type_enum); \ @@ -568,6 +603,14 @@ void *alloc_lcrecord (size_t size, const struct lrecord_implementation *); #define alloc_lcrecord_type(type, lrecord_implementation) \ ((type *) alloc_lcrecord (sizeof (type), lrecord_implementation)) +#ifdef UTF2000 +void * +alloc_older_lcrecord (size_t size, const struct lrecord_implementation *); + +#define alloc_older_lcrecord_type(type, lrecord_implementation) \ + ((type *) alloc_older_lcrecord (sizeof (type), lrecord_implementation)) +#endif + /* Copy the data from one lcrecord structure into another, but don't overwrite the header information. */