summaryrefslogtreecommitdiff
path: root/libguile/objcodes.h
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2009-12-14 23:11:47 +0100
committerLudovic Courtès <ludo@gnu.org>2009-12-15 01:01:16 +0100
commit3dbbe28dfd90cd7bf68d8d07771dffc724064311 (patch)
tree32dc56d5a966e1f895dd8c028d0f1ea9379016d3 /libguile/objcodes.h
parentcd169c5a2284c019b3909de67fc0e3f2b0a5dd44 (diff)
downloadguile-3dbbe28dfd90cd7bf68d8d07771dffc724064311.tar.gz
Don't use GCC zero-length arrays.
* libguile/frames.c, libguile/objcodes.c, libguile/programs.c, libguile/vm-engine.c, libguile/vm-i-system.c, libguile/vm.c: Use `SCM_C_OBJCODE_BASE ()' instead of accessing the `base' field of `struct scm_objcode'. * libguile/objcodes.h (struct scm_objcode)[base]: Remove.
Diffstat (limited to 'libguile/objcodes.h')
-rw-r--r--libguile/objcodes.h14
1 files changed, 10 insertions, 4 deletions
diff --git a/libguile/objcodes.h b/libguile/objcodes.h
index ab4db3dab..4627cfb89 100644
--- a/libguile/objcodes.h
+++ b/libguile/objcodes.h
@@ -21,14 +21,20 @@
#include <libguile.h>
-/* objcode data should be directly mappable to this C structure. */
-struct scm_objcode {
+/* Objcode data should be directly mappable to this C structure. */
+struct scm_objcode
+{
scm_t_uint32 len; /* the maximum index of base[] */
scm_t_uint32 metalen; /* well, i lie. this many bytes at the end of
base[] for metadata */
- scm_t_uint8 base[0];
+ /* In C99, we'd have:
+ scm_t_uint8 base[]; */
};
+/* Return a pointer to the base of objcode OBJ. */
+#define SCM_C_OBJCODE_BASE(obj) \
+ ((scm_t_uint8 *)(obj) + sizeof (struct scm_objcode))
+
#define SCM_F_OBJCODE_IS_MMAP (1<<0)
#define SCM_F_OBJCODE_IS_U8VECTOR (1<<1)
#define SCM_F_OBJCODE_IS_SLICE (1<<2)
@@ -42,7 +48,7 @@ SCM_API scm_t_bits scm_tc16_objcode;
#define SCM_OBJCODE_LEN(x) (SCM_OBJCODE_DATA (x)->len)
#define SCM_OBJCODE_META_LEN(x) (SCM_OBJCODE_DATA (x)->metalen)
#define SCM_OBJCODE_TOTAL_LEN(x) (SCM_OBJCODE_LEN (x) + SCM_OBJCODE_META_LEN (x))
-#define SCM_OBJCODE_BASE(x) (SCM_OBJCODE_DATA (x)->base)
+#define SCM_OBJCODE_BASE(x) (SCM_C_OBJCODE_BASE (SCM_OBJCODE_DATA (x)))
#define SCM_OBJCODE_IS_MMAP(x) (SCM_SMOB_FLAGS (x) & SCM_F_OBJCODE_IS_MMAP)
#define SCM_OBJCODE_IS_U8VECTOR(x) (SCM_SMOB_FLAGS (x) & SCM_F_OBJCODE_IS_U8VECTOR)