ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

widltypes.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.