From 74e49b38a8438c25b5f96cbc16be8001c706a484 Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Wed, 5 Apr 2000 18:47:29 +0000 Subject: [PATCH] * lisp.h (make_number) [!NO_UNION_TYPE && __GNUC__ >= 2 && __OPTIMIZE__]: Provide a GNU C macro version that handles lisp-object unions. (XSET) [!NO_UNION_TYPE]: Set the value field first, then the type field, to better cope with ENABLE_CHECKING and calls that modify a Lisp_Object using its old value. --- src/ChangeLog | 7 +++++++ src/lisp.h | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4a7a96ee882..b42ccbb177a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -15,6 +15,13 @@ * search.c (compile_pattern): Use NILP when checking for nil. + * lisp.h (make_number) [!NO_UNION_TYPE && __GNUC__ >= 2 && + __OPTIMIZE__]: Provide a GNU C macro version that handles + lisp-object unions. + (XSET) [!NO_UNION_TYPE]: Set the value field first, then the type + field, to better cope with ENABLE_CHECKING and calls that modify a + Lisp_Object using its old value. + 2000-04-04 Gerd Moellmann * window.c (compare_window_configurations): Signal an error diff --git a/src/lisp.h b/src/lisp.h index 52a9f9b78b5..e6b91f6db65 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -424,9 +424,14 @@ extern int pure_size; #define XPNTR(a) ((a).u.val) #define XSET(var, vartype, ptr) \ - (((var).s.type = ((char) (vartype))), ((var).s.val = ((int) (ptr)))) + (((var).s.val = ((int) (ptr))), ((var).s.type = ((char) (vartype)))) +#if __GNUC__ >= 2 && defined (__OPTIMIZE__) +#define make_number(N) \ + (__extension__ ({ Lisp_Object _l; _l.s.val = (N); _l.s.type = Lisp_Int; _l; })) +#else extern Lisp_Object make_number (); +#endif /* During garbage collection, XGCTYPE must be used for extracting types so that the mark bit is ignored. XMARKBIT access the markbit. -- 2.39.5