(CHAR_TO_CHARC): New inline function.
[chise/xemacs-chise.git-] / src / lrecord.h
index d222ca3..bee5101 100644 (file)
@@ -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. */