* lisp.h (make_number) [!NO_UNION_TYPE && __GNUC__ >= 2 && __OPTIMIZE__]:
authorKen Raeburn <raeburn@raeburn.org>
Wed, 5 Apr 2000 18:47:29 +0000 (18:47 +0000)
committerKen Raeburn <raeburn@raeburn.org>
Wed, 5 Apr 2000 18:47:29 +0000 (18:47 +0000)
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
src/lisp.h

index 4a7a96ee882247f57e3f7d780d669ffff27cd45c..b42ccbb177ad6968a97e8c7e2166d8aecd3f232c 100644 (file)
 
        * 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>
 
        * window.c (compare_window_configurations): Signal an error
index 52a9f9b78b51afcde9d5f05032db8de4612a5f84..e6b91f6db65919beb33dc2aa8e8a5db457a4ace2 100644 (file)
@@ -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.