On Mon, Aug 20, 2012 at 6:39 AM, Stefan Behnel <stefan...@behnel.de> wrote:
> Hi,
>
> I'm getting test build failures with the new arrayarray.h header file when
> I enable "--std=c89" or "c99" in the CFLAGS:
>
> """
> memoryview_inplace_division.c:877: warning: declaration does not declare
> anything
> memoryview_inplace_division.c:893: warning: declaration does not declare
> anything
> memoryview_inplace_division.c: In function ‘newarrayobject’:
> memoryview_inplace_division.c:929: error: ‘arrayobject’ has no member named
> ‘ob_item’
> ...
> """
>
> The lines it warns about (and which trigger the subsequent errors) are the
> following union declarations:
>
> """
> typedef struct arrayobject {
>     PyObject_HEAD
>     union {
>         Py_ssize_t ob_size, length;
>     };
>     union {
>         char *ob_item;
>         float *_f;
>         double *_d;
>         int *_i;
>         unsigned *_I;
>         unsigned char *_B;
>         signed char *_b;
>         char *_c;
>         unsigned long *_L;
>         long *_l;
>         short *_h;
>         unsigned short *_H;
>         Py_UNICODE *_u;
>         void *_v;
>     };
> ...
> """
>
> Apparently, anonymous unions only became part of the C standard in C11:
>
> http://stackoverflow.com/questions/3228104/anonymous-union-within-struct-not-in-c99
>
> That's unfortunate, but I think we'd best give the unions a name (and let
> users change all code that uses them ...).

I suppose we could do this. Actually, my_array.data.* isn't that bad.
(Would it be to verbose to do "my_array.data.as_doubles" while we're
on the topic of changing names?)

> BTW, is there any reason we have a "length" field at all? Shouldn't we be
> using Py_SIZE() ?

I just kept the code as it was (which is why I added the extra compile
args), but wouldn't be opposed to this change either. Supporting
itemsize directly might be more useful.

- Robert
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to