Commit f601cdf3 authored by Ken Raeburn's avatar Ken Raeburn
Browse files

* 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.
parent 4230ab74
2009-08-17 Ken Raeburn <raeburn@raeburn.org> 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. * emacs.c (main): Don't call syms_of_data twice.
   
2009-08-16 Michael Albinus <michael.albinus@gmx.de> 2009-08-16 Michael Albinus <michael.albinus@gmx.de>
......
...@@ -2643,7 +2643,7 @@ make_float (float_value) ...@@ -2643,7 +2643,7 @@ make_float (float_value)
MALLOC_UNBLOCK_INPUT; MALLOC_UNBLOCK_INPUT;
XFLOAT_DATA (val) = float_value; XFLOAT_INIT (val, float_value);
eassert (!FLOAT_MARKED_P (XFLOAT (val))); eassert (!FLOAT_MARKED_P (XFLOAT (val)));
consing_since_gc += sizeof (struct Lisp_Float); consing_since_gc += sizeof (struct Lisp_Float);
floats_consed++; floats_consed++;
...@@ -4850,7 +4850,7 @@ make_pure_float (num) ...@@ -4850,7 +4850,7 @@ make_pure_float (num)
p = (struct Lisp_Float *) pure_alloc (sizeof *p, Lisp_Float); p = (struct Lisp_Float *) pure_alloc (sizeof *p, Lisp_Float);
XSETFLOAT (new, p); XSETFLOAT (new, p);
XFLOAT_DATA (new) = num; XFLOAT_INIT (new, num);
return new; return new;
} }
......
...@@ -475,11 +475,13 @@ xd_append_arg (dtype, object, iter) ...@@ -475,11 +475,13 @@ xd_append_arg (dtype, object, iter)
} }
case DBUS_TYPE_DOUBLE: case DBUS_TYPE_DOUBLE:
XD_DEBUG_MESSAGE ("%c %f", dtype, XFLOAT_DATA (object)); {
if (!dbus_message_iter_append_basic (iter, dtype, double val = XFLOAT_DATA (object);
&XFLOAT_DATA (object))) XD_DEBUG_MESSAGE ("%c %f", dtype, val);
XD_SIGNAL2 (build_string ("Unable to append argument"), object); if (!dbus_message_iter_append_basic (iter, dtype, &val))
return; XD_SIGNAL2 (build_string ("Unable to append argument"), object);
return;
}
case DBUS_TYPE_STRING: case DBUS_TYPE_STRING:
case DBUS_TYPE_OBJECT_PATH: case DBUS_TYPE_OBJECT_PATH:
......
...@@ -4604,8 +4604,9 @@ sxhash (obj, depth) ...@@ -4604,8 +4604,9 @@ sxhash (obj, depth)
case Lisp_Float: case Lisp_Float:
{ {
unsigned char *p = (unsigned char *) &XFLOAT_DATA (obj); double val = XFLOAT_DATA (obj);
unsigned char *e = p + sizeof XFLOAT_DATA (obj); unsigned char *p = (unsigned char *) &val;
unsigned char *e = p + sizeof val;
for (hash = 0; p < e; ++p) for (hash = 0; p < e; ++p)
hash = SXHASH_COMBINE (hash, *p); hash = SXHASH_COMBINE (hash, *p);
break; break;
......
...@@ -1377,9 +1377,12 @@ struct Lisp_Float ...@@ -1377,9 +1377,12 @@ struct Lisp_Float
}; };
#ifdef HIDE_LISP_IMPLEMENTATION #ifdef HIDE_LISP_IMPLEMENTATION
#define XFLOAT_DATA(f) (XFLOAT (f)->u.data_) #define XFLOAT_DATA(f) (XFLOAT (f)->u.data_ + 0)
#else #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 #endif
/* A character, declared with the following typedef, is a member /* A character, declared with the following typedef, is a member
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment