changeset 104313:73f76307d49b

* 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.
author Ken Raeburn <raeburn@raeburn.org>
date Mon, 17 Aug 2009 01:25:54 +0000
parents c8e168f901e7
children b9b60c07064d
files src/ChangeLog src/alloc.c src/dbusbind.c src/fns.c src/lisp.h
diffstat 5 files changed, 25 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Mon Aug 17 00:48:14 2009 +0000
+++ b/src/ChangeLog	Mon Aug 17 01:25:54 2009 +0000
@@ -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>
--- a/src/alloc.c	Mon Aug 17 00:48:14 2009 +0000
+++ b/src/alloc.c	Mon Aug 17 01:25:54 2009 +0000
@@ -2643,7 +2643,7 @@
 
   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 @@
 
   p = (struct Lisp_Float *) pure_alloc (sizeof *p, Lisp_Float);
   XSETFLOAT (new, p);
-  XFLOAT_DATA (new) = num;
+  XFLOAT_INIT (new, num);
   return new;
 }
 
--- a/src/dbusbind.c	Mon Aug 17 00:48:14 2009 +0000
+++ b/src/dbusbind.c	Mon Aug 17 01:25:54 2009 +0000
@@ -475,11 +475,13 @@
 	}
 
       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:
--- a/src/fns.c	Mon Aug 17 00:48:14 2009 +0000
+++ b/src/fns.c	Mon Aug 17 01:25:54 2009 +0000
@@ -4604,8 +4604,9 @@
 
     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;
--- a/src/lisp.h	Mon Aug 17 00:48:14 2009 +0000
+++ b/src/lisp.h	Mon Aug 17 01:25:54 2009 +0000
@@ -1377,9 +1377,12 @@
   };
 
 #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