"Stephen J. Turnbull" <stephen(a)xemacs.org> writes:
Look, what Ben is saying AFAICT is that where currently we do
Wow! We have finally started the technical discussion! :-)
Lisp_Object foo (Lisp_Object);
Lisp_Object bar (Lisp_object x) { Lisp_Object y; y = foo(x); return y; }
etc all over the place, it works correctly. That is, with typedef int
Lisp_Object; it fails _intermittently_ with the union type. In order
to make the union type work, probably we'd have to do something like
#define a LISP_ASSIGN macro in order to enforce explicit temporaries
and replace all object assignments with macro calls
Lisp_object bar (Lisp_Object x)
{
Lisp_Object y;
LISP_ASSIGN(y,x);
return y;
}
This is _not_ a win. And replacing just the "dangerous ones" is GCPRO
all over again.
Well, looking into the C99 I don't see why the union assignment could be a
problem. Can you or Ben cite the gcc developers reply, explaining why it is
dangerous and not conforming to the C standard?
- Dmitry Bely