Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenwidltypes.h
Go to the documentation of this file.
00001 /* 00002 * IDL Compiler 00003 * 00004 * Copyright 2002 Ove Kaaven 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00019 */ 00020 00021 #ifndef __WIDL_WIDLTYPES_H 00022 #define __WIDL_WIDLTYPES_H 00023 00024 #define S_OK 0 00025 #define S_FALSE 1 00026 #define E_OUTOFMEMORY ((HRESULT)0x8007000EL) 00027 #define TYPE_E_IOERROR ((HRESULT)0x80028CA2L) 00028 00029 #define max(a, b) ((a) > (b) ? a : b) 00030 00031 #include <stdarg.h> 00032 #include <assert.h> 00033 #include "guiddef.h" 00034 #include "wine/rpcfc.h" 00035 #include "wine/list.h" 00036 00037 #ifndef UUID_DEFINED 00038 #define UUID_DEFINED 00039 typedef GUID UUID; 00040 #endif 00041 00042 #define TRUE 1 00043 #define FALSE 0 00044 00045 typedef struct _loc_info_t loc_info_t; 00046 typedef struct _attr_t attr_t; 00047 typedef struct _expr_t expr_t; 00048 typedef struct _type_t type_t; 00049 typedef struct _var_t var_t; 00050 typedef struct _declarator_t declarator_t; 00051 typedef struct _ifref_t ifref_t; 00052 typedef struct _typelib_entry_t typelib_entry_t; 00053 typedef struct _importlib_t importlib_t; 00054 typedef struct _importinfo_t importinfo_t; 00055 typedef struct _typelib_t typelib_t; 00056 typedef struct _user_type_t user_type_t; 00057 typedef struct _user_type_t context_handle_t; 00058 typedef struct _user_type_t generic_handle_t; 00059 typedef struct _type_list_t type_list_t; 00060 typedef struct _statement_t statement_t; 00061 00062 typedef struct list attr_list_t; 00063 typedef struct list str_list_t; 00064 typedef struct list expr_list_t; 00065 typedef struct list var_list_t; 00066 typedef struct list declarator_list_t; 00067 typedef struct list ifref_list_t; 00068 typedef struct list array_dims_t; 00069 typedef struct list user_type_list_t; 00070 typedef struct list context_handle_list_t; 00071 typedef struct list generic_handle_list_t; 00072 typedef struct list statement_list_t; 00073 00074 enum attr_type 00075 { 00076 ATTR_AGGREGATABLE, 00077 ATTR_ANNOTATION, 00078 ATTR_APPOBJECT, 00079 ATTR_ASYNC, 00080 ATTR_AUTO_HANDLE, 00081 ATTR_BINDABLE, 00082 ATTR_BROADCAST, 00083 ATTR_CALLAS, 00084 ATTR_CALLCONV, /* calling convention pseudo-attribute */ 00085 ATTR_CASE, 00086 ATTR_CODE, 00087 ATTR_COMMSTATUS, 00088 ATTR_CONST, /* const pseudo-attribute */ 00089 ATTR_CONTEXTHANDLE, 00090 ATTR_CONTROL, 00091 ATTR_DECODE, 00092 ATTR_DEFAULT, 00093 ATTR_DEFAULTBIND, 00094 ATTR_DEFAULTCOLLELEM, 00095 ATTR_DEFAULTVALUE, 00096 ATTR_DEFAULTVTABLE, 00097 ATTR_DISABLECONSISTENCYCHECK, 00098 ATTR_DISPINTERFACE, 00099 ATTR_DISPLAYBIND, 00100 ATTR_DLLNAME, 00101 ATTR_DUAL, 00102 ATTR_ENABLEALLOCATE, 00103 ATTR_ENCODE, 00104 ATTR_ENDPOINT, 00105 ATTR_ENTRY, 00106 ATTR_EXPLICIT_HANDLE, 00107 ATTR_FAULTSTATUS, 00108 ATTR_FORCEALLOCATE, 00109 ATTR_HANDLE, 00110 ATTR_HELPCONTEXT, 00111 ATTR_HELPFILE, 00112 ATTR_HELPSTRING, 00113 ATTR_HELPSTRINGCONTEXT, 00114 ATTR_HELPSTRINGDLL, 00115 ATTR_HIDDEN, 00116 ATTR_ID, 00117 ATTR_IDEMPOTENT, 00118 ATTR_IGNORE, 00119 ATTR_IIDIS, 00120 ATTR_IMMEDIATEBIND, 00121 ATTR_IMPLICIT_HANDLE, 00122 ATTR_IN, 00123 ATTR_INLINE, 00124 ATTR_INPUTSYNC, 00125 ATTR_LENGTHIS, 00126 ATTR_LIBLCID, 00127 ATTR_LICENSED, 00128 ATTR_LOCAL, 00129 ATTR_MAYBE, 00130 ATTR_MESSAGE, 00131 ATTR_NOCODE, 00132 ATTR_NONBROWSABLE, 00133 ATTR_NONCREATABLE, 00134 ATTR_NONEXTENSIBLE, 00135 ATTR_NOTIFY, 00136 ATTR_NOTIFYFLAG, 00137 ATTR_OBJECT, 00138 ATTR_ODL, 00139 ATTR_OLEAUTOMATION, 00140 ATTR_OPTIMIZE, 00141 ATTR_OPTIONAL, 00142 ATTR_OUT, 00143 ATTR_PARAMLCID, 00144 ATTR_PARTIALIGNORE, 00145 ATTR_POINTERDEFAULT, 00146 ATTR_POINTERTYPE, 00147 ATTR_PROGID, 00148 ATTR_PROPGET, 00149 ATTR_PROPPUT, 00150 ATTR_PROPPUTREF, 00151 ATTR_PROXY, 00152 ATTR_PUBLIC, 00153 ATTR_RANGE, 00154 ATTR_READONLY, 00155 ATTR_REPRESENTAS, 00156 ATTR_REQUESTEDIT, 00157 ATTR_RESTRICTED, 00158 ATTR_RETVAL, 00159 ATTR_SIZEIS, 00160 ATTR_SOURCE, 00161 ATTR_STRICTCONTEXTHANDLE, 00162 ATTR_STRING, 00163 ATTR_SWITCHIS, 00164 ATTR_SWITCHTYPE, 00165 ATTR_THREADING, 00166 ATTR_TRANSMITAS, 00167 ATTR_UIDEFAULT, 00168 ATTR_USERMARSHAL, 00169 ATTR_USESGETLASTERROR, 00170 ATTR_UUID, 00171 ATTR_V1ENUM, 00172 ATTR_VARARG, 00173 ATTR_VERSION, 00174 ATTR_VIPROGID, 00175 ATTR_WIREMARSHAL 00176 }; 00177 00178 enum expr_type 00179 { 00180 EXPR_VOID, 00181 EXPR_NUM, 00182 EXPR_HEXNUM, 00183 EXPR_DOUBLE, 00184 EXPR_IDENTIFIER, 00185 EXPR_NEG, 00186 EXPR_NOT, 00187 EXPR_PPTR, 00188 EXPR_CAST, 00189 EXPR_SIZEOF, 00190 EXPR_SHL, 00191 EXPR_SHR, 00192 EXPR_MUL, 00193 EXPR_DIV, 00194 EXPR_ADD, 00195 EXPR_SUB, 00196 EXPR_AND, 00197 EXPR_OR, 00198 EXPR_COND, 00199 EXPR_TRUEFALSE, 00200 EXPR_ADDRESSOF, 00201 EXPR_MEMBER, 00202 EXPR_ARRAY, 00203 EXPR_MOD, 00204 EXPR_LOGOR, 00205 EXPR_LOGAND, 00206 EXPR_XOR, 00207 EXPR_EQUALITY, 00208 EXPR_INEQUALITY, 00209 EXPR_GTR, 00210 EXPR_LESS, 00211 EXPR_GTREQL, 00212 EXPR_LESSEQL, 00213 EXPR_LOGNOT, 00214 EXPR_POS, 00215 EXPR_STRLIT, 00216 EXPR_WSTRLIT, 00217 EXPR_CHARCONST, 00218 }; 00219 00220 enum type_kind 00221 { 00222 TKIND_PRIMITIVE = -1, 00223 TKIND_ENUM, 00224 TKIND_RECORD, 00225 TKIND_MODULE, 00226 TKIND_INTERFACE, 00227 TKIND_DISPATCH, 00228 TKIND_COCLASS, 00229 TKIND_ALIAS, 00230 TKIND_UNION, 00231 TKIND_MAX 00232 }; 00233 00234 enum storage_class 00235 { 00236 STG_NONE, 00237 STG_STATIC, 00238 STG_EXTERN, 00239 STG_REGISTER, 00240 }; 00241 00242 enum statement_type 00243 { 00244 STMT_LIBRARY, 00245 STMT_DECLARATION, 00246 STMT_TYPE, 00247 STMT_TYPEREF, 00248 STMT_MODULE, 00249 STMT_TYPEDEF, 00250 STMT_IMPORT, 00251 STMT_IMPORTLIB, 00252 STMT_CPPQUOTE 00253 }; 00254 00255 enum threading_type 00256 { 00257 THREADING_APARTMENT = 1, 00258 THREADING_NEUTRAL, 00259 THREADING_SINGLE, 00260 THREADING_FREE, 00261 THREADING_BOTH 00262 }; 00263 00264 enum type_basic_type 00265 { 00266 TYPE_BASIC_INT8 = 1, 00267 TYPE_BASIC_INT16, 00268 TYPE_BASIC_INT32, 00269 TYPE_BASIC_INT64, 00270 TYPE_BASIC_INT, 00271 TYPE_BASIC_INT3264, 00272 TYPE_BASIC_CHAR, 00273 TYPE_BASIC_HYPER, 00274 TYPE_BASIC_BYTE, 00275 TYPE_BASIC_WCHAR, 00276 TYPE_BASIC_FLOAT, 00277 TYPE_BASIC_DOUBLE, 00278 TYPE_BASIC_ERROR_STATUS_T, 00279 TYPE_BASIC_HANDLE, 00280 }; 00281 00282 #define TYPE_BASIC_MAX TYPE_BASIC_HANDLE 00283 #define TYPE_BASIC_INT_MIN TYPE_BASIC_INT8 00284 #define TYPE_BASIC_INT_MAX TYPE_BASIC_HYPER 00285 00286 struct _loc_info_t 00287 { 00288 const char *input_name; 00289 int line_number; 00290 const char *near_text; 00291 }; 00292 00293 struct str_list_entry_t 00294 { 00295 char *str; 00296 struct list entry; 00297 }; 00298 00299 struct _attr_t { 00300 enum attr_type type; 00301 union { 00302 unsigned int ival; 00303 void *pval; 00304 } u; 00305 /* parser-internal */ 00306 struct list entry; 00307 }; 00308 00309 struct _expr_t { 00310 enum expr_type type; 00311 const expr_t *ref; 00312 union { 00313 int lval; 00314 double dval; 00315 const char *sval; 00316 const expr_t *ext; 00317 type_t *tref; 00318 } u; 00319 const expr_t *ext2; 00320 int is_const; 00321 int cval; 00322 /* parser-internal */ 00323 struct list entry; 00324 }; 00325 00326 struct struct_details 00327 { 00328 var_list_t *fields; 00329 }; 00330 00331 struct enumeration_details 00332 { 00333 var_list_t *enums; 00334 }; 00335 00336 struct func_details 00337 { 00338 var_list_t *args; 00339 struct _type_t *rettype; 00340 int idx; 00341 }; 00342 00343 struct iface_details 00344 { 00345 statement_list_t *stmts; 00346 var_list_t *disp_methods; 00347 var_list_t *disp_props; 00348 struct _type_t *inherit; 00349 }; 00350 00351 struct module_details 00352 { 00353 statement_list_t *stmts; 00354 }; 00355 00356 struct array_details 00357 { 00358 expr_t *size_is; 00359 expr_t *length_is; 00360 struct _type_t *elem; 00361 unsigned int dim; 00362 unsigned char ptr_def_fc; 00363 unsigned char declptr; /* if declared as a pointer */ 00364 unsigned short ptr_tfsoff; /* offset of pointer definition for declptr */ 00365 }; 00366 00367 struct coclass_details 00368 { 00369 ifref_list_t *ifaces; 00370 }; 00371 00372 struct basic_details 00373 { 00374 enum type_basic_type type; 00375 int sign; 00376 }; 00377 00378 struct pointer_details 00379 { 00380 struct _type_t *ref; 00381 unsigned char def_fc; 00382 }; 00383 00384 struct bitfield_details 00385 { 00386 struct _type_t *field; 00387 const expr_t *bits; 00388 }; 00389 00390 enum type_type 00391 { 00392 TYPE_VOID, 00393 TYPE_BASIC, /* ints, floats and handles */ 00394 TYPE_ENUM, 00395 TYPE_STRUCT, 00396 TYPE_ENCAPSULATED_UNION, 00397 TYPE_UNION, 00398 TYPE_ALIAS, 00399 TYPE_MODULE, 00400 TYPE_COCLASS, 00401 TYPE_FUNCTION, 00402 TYPE_INTERFACE, 00403 TYPE_POINTER, 00404 TYPE_ARRAY, 00405 TYPE_BITFIELD, 00406 }; 00407 00408 struct _type_t { 00409 const char *name; 00410 enum type_type type_type; 00411 attr_list_t *attrs; 00412 union 00413 { 00414 struct struct_details *structure; 00415 struct enumeration_details *enumeration; 00416 struct func_details *function; 00417 struct iface_details *iface; 00418 struct module_details *module; 00419 struct array_details array; 00420 struct coclass_details coclass; 00421 struct basic_details basic; 00422 struct pointer_details pointer; 00423 struct bitfield_details bitfield; 00424 } details; 00425 type_t *orig; /* dup'd types */ 00426 unsigned int typestring_offset; 00427 unsigned int ptrdesc; /* used for complex structs */ 00428 int typelib_idx; 00429 loc_info_t loc_info; 00430 unsigned int ignore : 1; 00431 unsigned int defined : 1; 00432 unsigned int written : 1; 00433 unsigned int user_types_registered : 1; 00434 unsigned int tfswrite : 1; /* if the type needs to be written to the TFS */ 00435 unsigned int checked : 1; 00436 unsigned int is_alias : 1; /* is the type an alias? */ 00437 }; 00438 00439 struct _var_t { 00440 char *name; 00441 type_t *type; 00442 attr_list_t *attrs; 00443 expr_t *eval; 00444 enum storage_class stgclass; 00445 unsigned int procstring_offset; 00446 00447 struct _loc_info_t loc_info; 00448 00449 /* parser-internal */ 00450 struct list entry; 00451 }; 00452 00453 struct _declarator_t { 00454 var_t *var; 00455 type_t *type; 00456 type_t *func_type; 00457 array_dims_t *array; 00458 expr_t *bits; 00459 00460 /* parser-internal */ 00461 struct list entry; 00462 }; 00463 00464 struct _ifref_t { 00465 type_t *iface; 00466 attr_list_t *attrs; 00467 00468 /* parser-internal */ 00469 struct list entry; 00470 }; 00471 00472 struct _typelib_entry_t { 00473 type_t *type; 00474 struct list entry; 00475 }; 00476 00477 struct _importinfo_t { 00478 int offset; 00479 GUID guid; 00480 int flags; 00481 int id; 00482 00483 char *name; 00484 00485 importlib_t *importlib; 00486 }; 00487 00488 struct _importlib_t { 00489 char *name; 00490 00491 int version; 00492 GUID guid; 00493 00494 importinfo_t *importinfos; 00495 int ntypeinfos; 00496 00497 int allocated; 00498 00499 struct list entry; 00500 }; 00501 00502 struct _typelib_t { 00503 char *name; 00504 const attr_list_t *attrs; 00505 struct list importlibs; 00506 statement_list_t *stmts; 00507 }; 00508 00509 struct _user_type_t { 00510 struct list entry; 00511 const char *name; 00512 }; 00513 00514 struct _type_list_t { 00515 type_t *type; 00516 struct _type_list_t *next; 00517 }; 00518 00519 struct _statement_t { 00520 struct list entry; 00521 enum statement_type type; 00522 union 00523 { 00524 ifref_t iface; 00525 type_t *type; 00526 const char *str; 00527 var_t *var; 00528 typelib_t *lib; 00529 type_list_t *type_list; 00530 } u; 00531 }; 00532 00533 typedef enum { 00534 SYS_WIN16, 00535 SYS_WIN32, 00536 SYS_MAC, 00537 SYS_WIN64 00538 } syskind_t; 00539 00540 extern syskind_t typelib_kind; 00541 extern user_type_list_t user_type_list; 00542 extern context_handle_list_t context_handle_list; 00543 extern generic_handle_list_t generic_handle_list; 00544 void check_for_additional_prototype_types(const var_list_t *list); 00545 00546 void init_types(void); 00547 type_t *alloc_type(void); 00548 void set_all_tfswrite(int val); 00549 void clear_all_offsets(void); 00550 00551 int is_ptr(const type_t *t); 00552 int is_array(const type_t *t); 00553 00554 #define tsENUM 1 00555 #define tsSTRUCT 2 00556 #define tsUNION 3 00557 00558 var_t *find_const(const char *name, int f); 00559 type_t *find_type(const char *name, int t); 00560 type_t *make_type(enum type_type type); 00561 type_t *get_type(enum type_type type, char *name, int t); 00562 type_t *reg_type(type_t *type, const char *name, int t); 00563 void add_incomplete(type_t *t); 00564 00565 var_t *make_var(char *name); 00566 var_list_t *append_var(var_list_t *list, var_t *var); 00567 00568 void init_loc_info(loc_info_t *); 00569 00570 static inline var_list_t *type_get_function_args(const type_t *func_type) 00571 { 00572 return func_type->details.function->args; 00573 } 00574 00575 static inline enum type_type type_get_type_detect_alias(const type_t *type) 00576 { 00577 if (type->is_alias) 00578 return TYPE_ALIAS; 00579 return type->type_type; 00580 } 00581 00582 #define STATEMENTS_FOR_EACH_FUNC(stmt, stmts) \ 00583 if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, statement_t, entry ) \ 00584 if (stmt->type == STMT_DECLARATION && stmt->u.var->stgclass == STG_NONE && \ 00585 type_get_type_detect_alias(stmt->u.var->type) == TYPE_FUNCTION) 00586 00587 static inline int statements_has_func(const statement_list_t *stmts) 00588 { 00589 const statement_t *stmt; 00590 int has_func = 0; 00591 STATEMENTS_FOR_EACH_FUNC(stmt, stmts) 00592 { 00593 has_func = 1; 00594 break; 00595 } 00596 return has_func; 00597 } 00598 00599 #endif Generated on Fri May 25 2012 04:36:16 for ReactOS by
1.7.6.1
|