update.
[chise/xemacs-chise.git-] / src / lisp-disunion.h
index 39a96d8..234c344 100644 (file)
@@ -76,13 +76,27 @@ Boston, MA 02111-1307, USA.  */
 typedef EMACS_INT Lisp_Object;
 
 #define Lisp_Type_Int_Bit (Lisp_Type_Int_Even & Lisp_Type_Int_Odd)
-#define make_obj(vartype, x) ((Lisp_Object) (x))
+#define wrap_object(ptr) ((Lisp_Object) (ptr))
 #define make_int(x) ((Lisp_Object) (((x) << INT_GCBITS) | Lisp_Type_Int_Bit))
 #define make_char(x) ((Lisp_Object) (((x) << GCBITS) | Lisp_Type_Char))
 #define VALMASK (((1UL << VALBITS) - 1UL) << GCTYPEBITS)
 #define XTYPE(x) ((enum Lisp_Type) (((EMACS_UINT)(x)) & ~VALMASK))
 #define XPNTRVAL(x) (x) /* This depends on Lisp_Type_Record == 0 */
-#define XCHARVAL(x) ((x) >> GCBITS)
+#ifdef UTF2000
+INLINE_HEADER int XCHARVAL (Emchar chr);
+INLINE_HEADER int
+XCHARVAL (Emchar chr)
+{
+  int code = (EMACS_UINT)(chr) >> GCBITS;
+
+  if (code & 0x20000000)
+    return code | 0x40000000;
+  else
+    return code;
+}
+#else
+#define XCHARVAL(x) ((EMACS_UINT)(x) >> GCBITS)
+#endif
 #define XREALINT(x) ((x) >> INT_GCBITS)
 #define XUINT(x) ((EMACS_UINT)(x) >> INT_GCBITS)
 #define INTP(x) ((EMACS_UINT)(x) & Lisp_Type_Int_Bit)
@@ -94,9 +108,9 @@ typedef EMACS_INT Lisp_Object;
 #define Qzero make_int (0)
 #define Qnull_pointer ((Lisp_Object) 0)
 #define EQ(x,y) ((x) == (y))
-#define XSETINT(var,  value) ((void) ((var) = make_int (value)))
+#define XSETINT(var, value) ((void) ((var) = make_int (value)))
 #define XSETCHAR(var, value) ((void) ((var) = make_char (value)))
-#define XSETOBJ(var, vartype, value) ((void) ((var) = make_obj (vartype, value)))
+#define XSETOBJ(var, value) ((void) ((var) = wrap_object (value)))
 
 /* Convert between a (void *) and a Lisp_Object, as when the
    Lisp_Object is passed to a toolkit callback function */