1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-22 21:50:45 -08:00

* 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.
This commit is contained in:
Ken Raeburn 2000-04-05 18:47:29 +00:00
parent 7c752c8099
commit 74e49b38a8
2 changed files with 13 additions and 1 deletions

View file

@ -15,6 +15,13 @@
* search.c (compile_pattern): Use NILP when checking for nil. * 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 <gerd@gnu.org> 2000-04-04 Gerd Moellmann <gerd@gnu.org>
* window.c (compare_window_configurations): Signal an error * window.c (compare_window_configurations): Signal an error

View file

@ -424,9 +424,14 @@ extern int pure_size;
#define XPNTR(a) ((a).u.val) #define XPNTR(a) ((a).u.val)
#define XSET(var, vartype, ptr) \ #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 (); extern Lisp_Object make_number ();
#endif
/* During garbage collection, XGCTYPE must be used for extracting types /* During garbage collection, XGCTYPE must be used for extracting types
so that the mark bit is ignored. XMARKBIT access the markbit. so that the mark bit is ignored. XMARKBIT access the markbit.