X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Flisp-disunion.h;h=234c344a444e46d1908877038d6624aef787d94f;hb=2fb77bc5a45d0ed52c378da88b78147119f1ffa6;hp=39a96d8866b46bb502c2189b7a7adb6a6f06efd5;hpb=f52a96980ed9280f8f906a20d4b899dc0b027644;p=chise%2Fxemacs-chise.git- diff --git a/src/lisp-disunion.h b/src/lisp-disunion.h index 39a96d8..234c344 100644 --- a/src/lisp-disunion.h +++ b/src/lisp-disunion.h @@ -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 */