urlmon: Added ibind argument handling in CreateAsyncBindCtx.
[wine] / tools / widl / widltypes.h
1 /*
2  * IDL Compiler
3  *
4  * Copyright 2002 Ove Kaaven
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20
21 #ifndef __WIDL_WIDLTYPES_H
22 #define __WIDL_WIDLTYPES_H
23
24 #include <stdarg.h>
25 #include "guiddef.h"
26 #include "wine/rpcfc.h"
27 #include "wine/list.h"
28
29 #ifndef UUID_DEFINED
30 #define UUID_DEFINED
31 typedef GUID UUID;
32 #endif
33
34 #define TRUE 1
35 #define FALSE 0
36
37 typedef struct _attr_t attr_t;
38 typedef struct _expr_t expr_t;
39 typedef struct _type_t type_t;
40 typedef struct _typeref_t typeref_t;
41 typedef struct _var_t var_t;
42 typedef struct _pident_t pident_t;
43 typedef struct _func_t func_t;
44 typedef struct _ifref_t ifref_t;
45 typedef struct _typelib_entry_t typelib_entry_t;
46 typedef struct _importlib_t importlib_t;
47 typedef struct _importinfo_t importinfo_t;
48 typedef struct _typelib_t typelib_t;
49 typedef struct _user_type_t user_type_t;
50 typedef struct _user_type_t context_handle_t;
51
52 typedef struct list attr_list_t;
53 typedef struct list str_list_t;
54 typedef struct list func_list_t;
55 typedef struct list expr_list_t;
56 typedef struct list var_list_t;
57 typedef struct list pident_list_t;
58 typedef struct list ifref_list_t;
59 typedef struct list array_dims_t;
60 typedef struct list user_type_list_t;
61 typedef struct list context_handle_list_t;
62
63 enum attr_type
64 {
65     ATTR_AGGREGATABLE,
66     ATTR_APPOBJECT,
67     ATTR_ASYNC,
68     ATTR_AUTO_HANDLE,
69     ATTR_BINDABLE,
70     ATTR_CALLAS,
71     ATTR_CASE,
72     ATTR_CONTEXTHANDLE,
73     ATTR_CONTROL,
74     ATTR_DEFAULT,
75     ATTR_DEFAULTCOLLELEM,
76     ATTR_DEFAULTVALUE_EXPR,
77     ATTR_DEFAULTVALUE_STRING,
78     ATTR_DEFAULTVTABLE,
79     ATTR_DISPINTERFACE,
80     ATTR_DISPLAYBIND,
81     ATTR_DLLNAME,
82     ATTR_DUAL,
83     ATTR_ENDPOINT,
84     ATTR_ENTRY_ORDINAL,
85     ATTR_ENTRY_STRING,
86     ATTR_EXPLICIT_HANDLE,
87     ATTR_HANDLE,
88     ATTR_HELPCONTEXT,
89     ATTR_HELPFILE,
90     ATTR_HELPSTRING,
91     ATTR_HELPSTRINGCONTEXT,
92     ATTR_HELPSTRINGDLL,
93     ATTR_HIDDEN,
94     ATTR_ID,
95     ATTR_IDEMPOTENT,
96     ATTR_IIDIS,
97     ATTR_IMMEDIATEBIND,
98     ATTR_IMPLICIT_HANDLE,
99     ATTR_IN,
100     ATTR_INPUTSYNC,
101     ATTR_LENGTHIS,
102     ATTR_LOCAL,
103     ATTR_NONBROWSABLE,
104     ATTR_NONCREATABLE,
105     ATTR_NONEXTENSIBLE,
106     ATTR_OBJECT,
107     ATTR_ODL,
108     ATTR_OLEAUTOMATION,
109     ATTR_OPTIONAL,
110     ATTR_OUT,
111     ATTR_POINTERDEFAULT,
112     ATTR_POINTERTYPE,
113     ATTR_PROPGET,
114     ATTR_PROPPUT,
115     ATTR_PROPPUTREF,
116     ATTR_PUBLIC,
117     ATTR_RANGE,
118     ATTR_READONLY,
119     ATTR_REQUESTEDIT,
120     ATTR_RESTRICTED,
121     ATTR_RETVAL,
122     ATTR_SIZEIS,
123     ATTR_SOURCE,
124     ATTR_STRING,
125     ATTR_SWITCHIS,
126     ATTR_SWITCHTYPE,
127     ATTR_TRANSMITAS,
128     ATTR_UUID,
129     ATTR_V1ENUM,
130     ATTR_VARARG,
131     ATTR_VERSION,
132     ATTR_WIREMARSHAL
133 };
134
135 enum expr_type
136 {
137     EXPR_VOID,
138     EXPR_NUM,
139     EXPR_HEXNUM,
140     EXPR_DOUBLE,
141     EXPR_IDENTIFIER,
142     EXPR_NEG,
143     EXPR_NOT,
144     EXPR_PPTR,
145     EXPR_CAST,
146     EXPR_SIZEOF,
147     EXPR_SHL,
148     EXPR_SHR,
149     EXPR_MUL,
150     EXPR_DIV,
151     EXPR_ADD,
152     EXPR_SUB,
153     EXPR_AND,
154     EXPR_OR,
155     EXPR_COND,
156     EXPR_TRUEFALSE,
157     EXPR_ADDRESSOF,
158 };
159
160 enum type_kind
161 {
162     TKIND_PRIMITIVE = -1,
163     TKIND_ENUM,
164     TKIND_RECORD,
165     TKIND_MODULE,
166     TKIND_INTERFACE,
167     TKIND_DISPATCH,
168     TKIND_COCLASS,
169     TKIND_ALIAS,
170     TKIND_UNION,
171     TKIND_MAX
172 };
173
174 struct str_list_entry_t
175 {
176     char *str;
177     struct list entry;
178 };
179
180 struct _attr_t {
181   enum attr_type type;
182   union {
183     unsigned long ival;
184     void *pval;
185   } u;
186   /* parser-internal */
187   struct list entry;
188 };
189
190 struct _expr_t {
191   enum expr_type type;
192   const expr_t *ref;
193   union {
194     long lval;
195     double dval;
196     const char *sval;
197     const expr_t *ext;
198     type_t *tref;
199   } u;
200   const expr_t *ext2;
201   int is_const;
202   long cval;
203   /* parser-internal */
204   struct list entry;
205 };
206
207 struct _type_t {
208   const char *name;
209   enum type_kind kind;
210   unsigned char type;
211   struct _type_t *ref;
212   const attr_list_t *attrs;
213   func_list_t *funcs;             /* interfaces and modules */
214   var_list_t *fields;             /* interfaces, structures and enumerations */
215   ifref_list_t *ifaces;           /* coclasses */
216   unsigned long dim;              /* array dimension */
217   expr_t *size_is, *length_is;
218   type_t *orig;                   /* dup'd types */
219   unsigned int typestring_offset;
220   unsigned int ptrdesc;           /* used for complex structs */
221   int typelib_idx;
222   unsigned int declarray : 1;     /* if declared as an array */
223   unsigned int ignore : 1;
224   unsigned int is_const : 1;
225   unsigned int defined : 1;
226   unsigned int written : 1;
227   unsigned int user_types_registered : 1;
228   unsigned int tfswrite : 1;   /* if the type needs to be written to the TFS */
229   int sign : 2;
230 };
231
232 struct _var_t {
233   char *name;
234   type_t *type;
235   var_list_t *args;  /* for function pointers */
236   attr_list_t *attrs;
237   expr_t *eval;
238
239   /* parser-internal */
240   struct list entry;
241 };
242
243 struct _pident_t {
244   var_t *var;
245   int ptr_level;
246
247   /* parser-internal */
248   struct list entry;
249 };
250
251 struct _func_t {
252   var_t *def;
253   var_list_t *args;
254   int ignore, idx;
255
256   /* parser-internal */
257   struct list entry;
258 };
259
260 struct _ifref_t {
261   type_t *iface;
262   attr_list_t *attrs;
263
264   /* parser-internal */
265   struct list entry;
266 };
267
268 struct _typelib_entry_t {
269     type_t *type;
270     struct list entry;
271 };
272
273 struct _importinfo_t {
274     int offset;
275     GUID guid;
276     int flags;
277     int id;
278
279     char *name;
280
281     importlib_t *importlib;
282 };
283
284 struct _importlib_t {
285     char *name;
286
287     int version;
288     GUID guid;
289
290     importinfo_t *importinfos;
291     int ntypeinfos;
292
293     int allocated;
294
295     struct list entry;
296 };
297
298 struct _typelib_t {
299     char *name;
300     char *filename;
301     attr_list_t *attrs;
302     struct list entries;
303     struct list importlibs;
304 };
305
306 struct _user_type_t {
307     struct list entry;
308     const char *name;
309 };
310
311 extern unsigned char pointer_default;
312
313 extern user_type_list_t user_type_list;
314 void check_for_user_types_and_context_handles(const var_list_t *list);
315
316 void init_types(void);
317 type_t *alloc_type(void);
318 void set_all_tfswrite(int val);
319
320 type_t *duptype(type_t *t, int dupname);
321 type_t *alias(type_t *t, const char *name);
322
323 int is_ptr(const type_t *t);
324 int is_array(const type_t *t);
325 int is_var_ptr(const var_t *v);
326 int cant_be_null(const var_t *v);
327 int is_struct(unsigned char tc);
328 int is_union(unsigned char tc);
329
330 #endif