+#define VEC_INFO_5(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3, alt_4, \
+ alt_5 \
+ ) \
+ info_class const vec_info_5 info = { \
+ { alt_5, alt_4, alt_3, alt_2, \
+ alt_1 }, \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ } \
+ }
+
+#define VEC_INFO_6(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3, alt_4, \
+ alt_5, alt_6 \
+ ) \
+ info_class const vec_info_6 info = { \
+ { alt_6, alt_5, alt_4, alt_3, \
+ alt_2, alt_1 }, \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ } \
+ }
+
+#define VEC_INFO_7(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3, alt_4, \
+ alt_5, alt_6, alt_7 \
+ ) \
+ info_class const vec_info_7 info = { \
+ { alt_7, alt_6, alt_5, alt_4, \
+ alt_3, alt_2, alt_1 }, \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ } \
+ }
+
+#define VEC_INFO_8(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3, alt_4, \
+ alt_5, alt_6, alt_7, alt_8 \
+ ) \
+ info_class const vec_info_8 info = { \
+ { alt_8, alt_7, alt_6, alt_5, \
+ alt_4, alt_3, alt_2, alt_1 }, \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ } \
+ }
+
+
+#else
+
+/* We have to define these structure to work around a bug in gcc: if we
+ * try to initialise the vector directly (it's defined as a zero-length
+ * array tacked on the end of the info table structor), then gcc silently
+ * throws away our vector table sometimes.
+ */
+
+typedef struct {
+ StgRetInfoTable i;
+ StgFunPtr vec[2];
+} vec_info_2;
+
+typedef struct {
+ StgRetInfoTable i;
+ StgFunPtr vec[3];
+} vec_info_3;
+
+typedef struct {
+ StgRetInfoTable i;
+ StgFunPtr vec[4];
+} vec_info_4;
+
+typedef struct {
+ StgRetInfoTable i;
+ StgFunPtr vec[5];
+} vec_info_5;
+
+typedef struct {
+ StgRetInfoTable i;
+ StgFunPtr vec[6];
+} vec_info_6;
+
+typedef struct {
+ StgRetInfoTable i;
+ StgFunPtr vec[7];
+} vec_info_7;
+
+typedef struct {
+ StgRetInfoTable i;
+ StgFunPtr vec[8];
+} vec_info_8;
+
+#define VEC_INFO_2(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2) \
+ info_class const vec_info_2 info = { \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ } \
+ }
+
+#define VEC_INFO_3(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3 \
+ ) \
+ info_class const vec_info_3 info = { \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ }, \
+ vec : { alt_1, alt_2, alt_3 } \
+ }
+
+#define VEC_INFO_4(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3, alt_4 \
+ ) \
+ info_class const vec_info_4 info = { \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ }, \
+ vec : { alt_1, alt_2, alt_3, alt_4 } \
+ }
+
+#define VEC_INFO_5(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3, alt_4, \
+ alt_5 \
+ ) \
+ info_class const vec_info_5 info = { \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ }, \
+ vec : { alt_1, alt_2, alt_3, alt_4, \
+ alt_5 } \
+ }
+
+#define VEC_INFO_6(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3, alt_4, \
+ alt_5, alt_6 \
+ ) \
+ info_class const vec_info_6 info = { \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ }, \
+ vec : { alt_1, alt_2, alt_3, alt_4, \
+ alt_5, alt_6 } \
+ }
+
+#define VEC_INFO_7(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3, alt_4, \
+ alt_5, alt_6, alt_7 \
+ ) \
+ info_class const vec_info_7 info = { \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ }, \
+ vec : { alt_1, alt_2, alt_3, alt_4, \
+ alt_5, alt_6, alt_7 } \
+ }
+
+#define VEC_INFO_8(info,bitmap_,srt_,srt_off_,srt_bitmap_, \
+ type_, info_class, \
+ alt_1, alt_2, alt_3, alt_4, \
+ alt_5, alt_6, alt_7, alt_8 \
+ ) \
+ info_class const vec_info_8 info = { \
+ i : { \
+ i : { \
+ layout : { bitmap : (StgWord)bitmap_ }, \
+ STD_INFO(srt_bitmap_,type_) \
+ }, \
+ RET_INFO(srt_,srt_off_) \
+ }, \
+ vec : { alt_1, alt_2, alt_3, alt_4, \
+ alt_5, alt_6, alt_7, alt_8 } \
+ }
+
+#endif /* TABLES_NEXT_TO_CODE */
+