pymacro.h: Inline _Py_ARRAY_LENGTH_CHECK() and add http://ccodearchive.net/
This commit is contained in:
parent
6f1ba077c0
commit
573696a9ca
|
@ -19,20 +19,10 @@
|
||||||
((char *)(foo) \
|
((char *)(foo) \
|
||||||
+ Py_BUILD_ASSERT(offsetof(struct foo, string) == 0))
|
+ Py_BUILD_ASSERT(offsetof(struct foo, string) == 0))
|
||||||
|
|
||||||
Written by Rusty Russell, public domain. */
|
Written by Rusty Russell, public domain, http://ccodearchive.net/ */
|
||||||
#define Py_BUILD_ASSERT(cond) \
|
#define Py_BUILD_ASSERT(cond) \
|
||||||
(sizeof(char [1 - 2*!(cond)]) - 1)
|
(sizeof(char [1 - 2*!(cond)]) - 1)
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
/* Two gcc extensions.
|
|
||||||
&a[0] degrades to a pointer: a different type from an array */
|
|
||||||
#define _Py_ARRAY_LENGTH_CHECK(array) \
|
|
||||||
Py_BUILD_ASSERT(!__builtin_types_compatible_p(typeof(array), \
|
|
||||||
typeof(&(array)[0])))
|
|
||||||
#else
|
|
||||||
#define _Py_ARRAY_LENGTH_CHECK(array) 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Get the number of elements in a visible array
|
/* Get the number of elements in a visible array
|
||||||
|
|
||||||
|
@ -40,9 +30,18 @@
|
||||||
parameters. With correct compiler support, such usage will cause a build
|
parameters. With correct compiler support, such usage will cause a build
|
||||||
error (see Py_BUILD_ASSERT).
|
error (see Py_BUILD_ASSERT).
|
||||||
|
|
||||||
Written by Rusty Russell, public domain. */
|
Written by Rusty Russell, public domain, http://ccodearchive.net/ */
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
/* Two gcc extensions.
|
||||||
|
&a[0] degrades to a pointer: a different type from an array */
|
||||||
#define Py_ARRAY_LENGTH(array) \
|
#define Py_ARRAY_LENGTH(array) \
|
||||||
(sizeof(array) / sizeof((array)[0]) + _Py_ARRAY_LENGTH_CHECK(array))
|
(sizeof(array) / sizeof((array)[0]) \
|
||||||
|
+ Py_BUILD_ASSERT(!__builtin_types_compatible_p(typeof(array), \
|
||||||
|
typeof(&(array)[0]))))
|
||||||
|
#else
|
||||||
|
#define Py_ARRAY_LENGTH(array) \
|
||||||
|
(sizeof(array) / sizeof((array)[0]))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Define macros for inline documentation. */
|
/* Define macros for inline documentation. */
|
||||||
|
|
Loading…
Reference in New Issue