* lisp.h (XFLOAT_DATA): Produce an rvalue by adding 0 to the value.
authorKen Raeburn <raeburn@raeburn.org>
Mon, 17 Aug 2009 01:25:54 +0000 (01:25 +0000)
committerKen Raeburn <raeburn@raeburn.org>
Mon, 17 Aug 2009 01:25:54 +0000 (01:25 +0000)
(XFLOAT_INIT): New macro for storing a float value.
* alloc.c (make_float, make_pure_float): Use XFLOAT_INIT.
* fns.c (sxhash): Copy out the value of a float in order to examine its bytes.
* dbusbind.c (xd_append_arg): Likewise.

src/ChangeLog
src/alloc.c
src/dbusbind.c
src/fns.c
src/lisp.h

index d9b4984..9358387 100644 (file)
@@ -1,5 +1,13 @@
 2009-08-17  Ken Raeburn  <raeburn@raeburn.org>
 
+       * lisp.h (XFLOAT_DATA): Produce an rvalue by adding 0 to the
+       value.
+       (XFLOAT_INIT): New macro for storing a float value.
+       * alloc.c (make_float, make_pure_float): Use XFLOAT_INIT.
+       * fns.c (sxhash): Copy out the value of a float in order to
+       examine its bytes.
+       * dbusbind.c (xd_append_arg): Likewise.
+
        * emacs.c (main): Don't call syms_of_data twice.
 
 2009-08-16  Michael Albinus  <michael.albinus@gmx.de>
index c150157..157d768 100644 (file)
@@ -2643,7 +2643,7 @@ make_float (float_value)
 
   MALLOC_UNBLOCK_INPUT;
 
-  XFLOAT_DATA (val) = float_value;
+  XFLOAT_INIT (val, float_value);
   eassert (!FLOAT_MARKED_P (XFLOAT (val)));
   consing_since_gc += sizeof (struct Lisp_Float);
   floats_consed++;
@@ -4850,7 +4850,7 @@ make_pure_float (num)
 
   p = (struct Lisp_Float *) pure_alloc (sizeof *p, Lisp_Float);
   XSETFLOAT (new, p);
-  XFLOAT_DATA (new) = num;
+  XFLOAT_INIT (new, num);
   return new;
 }
 
index a38a994..76b0da5 100644 (file)
@@ -475,11 +475,13 @@ xd_append_arg (dtype, object, iter)
        }
 
       case DBUS_TYPE_DOUBLE:
-       XD_DEBUG_MESSAGE ("%c %f", dtype, XFLOAT_DATA (object));
-       if (!dbus_message_iter_append_basic (iter, dtype,
-                                            &XFLOAT_DATA (object)))
-         XD_SIGNAL2 (build_string ("Unable to append argument"), object);
-       return;
+       {
+         double val = XFLOAT_DATA (object);
+         XD_DEBUG_MESSAGE ("%c %f", dtype, val);
+         if (!dbus_message_iter_append_basic (iter, dtype, &val))
+           XD_SIGNAL2 (build_string ("Unable to append argument"), object);
+         return;
+       }
 
       case DBUS_TYPE_STRING:
       case DBUS_TYPE_OBJECT_PATH:
index 61abf32..562d493 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -4604,8 +4604,9 @@ sxhash (obj, depth)
 
     case Lisp_Float:
       {
-       unsigned char *p = (unsigned char *) &XFLOAT_DATA (obj);
-       unsigned char *e = p + sizeof XFLOAT_DATA (obj);
+       double val = XFLOAT_DATA (obj);
+       unsigned char *p = (unsigned char *) &val;
+       unsigned char *e = p + sizeof val;
        for (hash = 0; p < e; ++p)
          hash = SXHASH_COMBINE (hash, *p);
        break;
index b71bf52..15de8d9 100644 (file)
@@ -1377,9 +1377,12 @@ struct Lisp_Float
   };
 
 #ifdef HIDE_LISP_IMPLEMENTATION
-#define XFLOAT_DATA(f) (XFLOAT (f)->u.data_)
+#define XFLOAT_DATA(f) (XFLOAT (f)->u.data_ + 0)
 #else
-#define XFLOAT_DATA(f) (XFLOAT (f)->u.data)
+#define XFLOAT_DATA(f) (XFLOAT (f)->u.data + 0)
+/* This should be used only in alloc.c, which always disables
+   HIDE_LISP_IMPLEMENTATION.  */
+#define XFLOAT_INIT(f,n) (XFLOAT (f)->u.data = (n))
 #endif
 
 /* A character, declared with the following typedef, is a member