(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.
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>
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++;
p = (struct Lisp_Float *) pure_alloc (sizeof *p, Lisp_Float);
XSETFLOAT (new, p);
- XFLOAT_DATA (new) = num;
+ XFLOAT_INIT (new, num);
return new;
}
}
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:
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;
};
#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