X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Flrecord.h;h=f26ffa2dfda890f5fc2138fa8a1bfe16d98466aa;hb=37bdb8647edead5a0e669c6ec27841d470a9e5e6;hp=77c67079f3f89f85ae8af254603176e60ec8429e;hpb=d8bd7eee3147c839d3c74d1823c139cd54867a75;p=chise%2Fxemacs-chise.git diff --git a/src/lrecord.h b/src/lrecord.h index 77c6707..f26ffa2 100644 --- a/src/lrecord.h +++ b/src/lrecord.h @@ -75,35 +75,11 @@ 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; \ @@ -111,7 +87,6 @@ int lrecord_type_index (const struct lrecord_implementation *implementation); SLI_header->c_readonly = 0; \ SLI_header->lisp_readonly = 0; \ } while (0) -#endif struct lcrecord_header { @@ -179,7 +154,6 @@ 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_uint16_byte_table, lrecord_type_uint8_byte_table, @@ -217,6 +191,9 @@ enum lrecord_type lrecord_type_pgresult, lrecord_type_devmode, lrecord_type_mswindows_dialog_id, + lrecord_type_case_table, + lrecord_type_free, /* only used for "free" lrecords */ + lrecord_type_undefined, /* only used for debugging */ lrecord_type_last_built_in_type /* must be last */ }; @@ -309,10 +286,6 @@ 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 { \ @@ -361,10 +334,6 @@ extern int gc_in_progress; An array of Lisp objects or pointers to lrecords. The third element is the count. - XD_LO_RESET_NIL - Lisp objects which will be reset to Qnil when dumping. Useful for cleaning - up caches. - XD_LO_LINK Link in a linked list of objects of the same type. @@ -419,7 +388,6 @@ extern int gc_in_progress; enum lrecord_description_type { XD_LISP_OBJECT_ARRAY, XD_LISP_OBJECT, - XD_LO_RESET_NIL, XD_LO_LINK, XD_OPAQUE_PTR, XD_STRUCT_PTR, @@ -510,11 +478,11 @@ MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash #define MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \ DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype) \ -unsigned int lrecord_type_##c_name = lrecord_type_count++; \ -const struct lrecord_implementation lrecord_##c_name = \ +unsigned int lrecord_type_##c_name; \ +struct lrecord_implementation lrecord_##c_name = \ { name, marker, printer, nuker, equal, hash, desc, \ getprop, putprop, remprop, plist, size, sizer, \ - (enum lrecord_type)lrecord_type_##c_name, basic_p } + lrecord_type_last_built_in_type, basic_p } extern Lisp_Object (*lrecord_markers[]) (Lisp_Object); @@ -525,6 +493,12 @@ extern Lisp_Object (*lrecord_markers[]) (Lisp_Object); lrecord_implementations_table[lrecord_type_##type]->marker; \ } while (0) +#define INIT_EXTERNAL_LRECORD_IMPLEMENTATION(type) do { \ + lrecord_type_##type = lrecord_type_count++; \ + lrecord_##type.lrecord_type_index = lrecord_type_##type; \ + INIT_LRECORD_IMPLEMENTATION(type); \ +} while (0) + #define LRECORDP(a) (XTYPE (a) == Lisp_Type_Record) #define XRECORD_LHEADER(a) ((struct lrecord_header *) XPNTR (a)) @@ -679,7 +653,16 @@ extern Lisp_Object Q##c_name##p # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ extern unsigned int lrecord_type_##c_name; \ -DECLARE_LRECORD(c_name, structtype) +extern struct lrecord_implementation lrecord_##c_name; \ +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)); \ + return (structtype *) XPNTR (obj); \ +} \ +extern Lisp_Object Q##c_name##p # define DECLARE_NONRECORD(c_name, type_enum, structtype) \ INLINE_HEADER structtype * \ @@ -709,7 +692,7 @@ extern const struct lrecord_implementation lrecord_##c_name # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ extern Lisp_Object Q##c_name##p; \ extern unsigned int lrecord_type_##c_name; \ -extern const struct lrecord_implementation lrecord_##c_name +extern struct lrecord_implementation lrecord_##c_name # define DECLARE_NONRECORD(c_name, type_enum, structtype) \ extern Lisp_Object Q##c_name##p # define XRECORD(x, c_name, structtype) ((structtype *) XPNTR (x)) @@ -766,14 +749,6 @@ 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. */