X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Flisp-disunion.h;h=1e69d96562cc74f8ebb31cf66912dfc4ce5280c5;hb=03e80302fb3953f2d09ee4a82d90b38f245a3c2c;hp=4c8c69e3e5b851d71da5aa041331884b8cf0b2c2;hpb=d8bd7eee3147c839d3c74d1823c139cd54867a75;p=chise%2Fxemacs-chise.git- diff --git a/src/lisp-disunion.h b/src/lisp-disunion.h index 4c8c69e..1e69d96 100644 --- a/src/lisp-disunion.h +++ b/src/lisp-disunion.h @@ -82,7 +82,21 @@ typedef EMACS_INT Lisp_Object; #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) @@ -103,7 +117,7 @@ typedef EMACS_INT Lisp_Object; #define VOID_TO_LISP(larg,varg) ((void) ((larg) = ((Lisp_Object) (varg)))) #define CVOID_TO_LISP VOID_TO_LISP #define LISP_TO_VOID(larg) ((void *) (larg)) -#define LISP_TO_CVOID(varg) ((const void *) (larg)) +#define LISP_TO_CVOID(larg) ((const void *) (larg)) /* Convert a Lisp_Object into something that can't be used as an lvalue. Useful for type-checking. */