From 76755556e0d3ac715222061bd6d64a87ce2c2905 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sat, 28 Mar 2009 19:10:29 +0000 Subject: Aliasing fun. This is ugly. svn path=/trunk/netsurf/; revision=6971 --- riscos/wimputils.h | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'riscos/wimputils.h') diff --git a/riscos/wimputils.h b/riscos/wimputils.h index 5a6349b9f..5225a720e 100644 --- a/riscos/wimputils.h +++ b/riscos/wimputils.h @@ -25,7 +25,7 @@ #include -/* Magical union for working around strict aliasing +/* Magical union to permit aliasing of wimp_window_state and wimp_open * Do not use this directly. Use the macros, instead. */ typedef union window_open_state { wimp_window_state state; @@ -35,4 +35,31 @@ typedef union window_open_state { /* Convert a pointer to a wimp_window_state into a pointer to a wimp_open */ #define PTR_WIMP_OPEN(pstate) ((wimp_open *) (window_open_state *) (pstate)) +/* Similarly for wimp_message_list */ +typedef struct ns_wimp_message_list { + /* Nasty hack to ensure that we have at least one field in the struct */ + int first; + int rest[]; +} ns_wimp_message_list; + +typedef union message_list { + wimp_message_list wimp; + ns_wimp_message_list ns; +} message_list; + +#define PTR_WIMP_MESSAGE_LIST(l) ((wimp_message_list *) (message_list *) (l)) + +/* Also for VDU variable lists */ +typedef struct ns_os_vdu_var_list { + os_vdu_var first; + os_vdu_var rest[]; +} ns_os_vdu_var_list; + +typedef union vdu_var_list { + os_vdu_var_list os; + ns_os_vdu_var_list ns; +} vdu_var_list; + +#define PTR_OS_VDU_VAR_LIST(l) ((os_vdu_var_list *) (vdu_var_list *) (l)) + #endif -- cgit v1.2.3