| /* | |
| * IDL Compiler | |
| * | |
| * Copyright 2002 Ove Kaaven | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #ifndef __WIDL_WIDLTYPES_H | |
| #define __WIDL_WIDLTYPES_H | |
| #include "windef.h" | |
| #include "oleauto.h" | |
| #include "wine/rpcfc.h" | |
| typedef struct _attr_t attr_t; | |
| typedef struct _type_t type_t; | |
| typedef struct _typeref_t typeref_t; | |
| typedef struct _var_t var_t; | |
| typedef struct _func_t func_t; | |
| #define DECL_LINK(type) \ | |
| type *l_next; \ | |
| type *l_prev; | |
| #define LINK(x,y) do { x->l_next = y; if (y) y->l_prev = x; } while (0) | |
| #define LINK_LAST(x,y) do { if (y) { attr_t *_c = x; while (_c->l_next) _c = _c->l_next; LINK(_c, y); } } while (0) | |
| #define LINK_SAFE(x,y) do { if (x) LINK_LAST(x,y); else { x = y; } } while (0) | |
| #define INIT_LINK(x) do { x->l_next = NULL; x->l_prev = NULL; } while (0) | |
| #define NEXT_LINK(x) ((x)->l_next) | |
| #define PREV_LINK(x) ((x)->l_prev) | |
| enum attr_type | |
| { | |
| ATTR_ASYNC, | |
| ATTR_CALLAS, | |
| ATTR_DEFAULT, | |
| ATTR_IIDIS, | |
| ATTR_IN, | |
| ATTR_LOCAL, | |
| ATTR_OBJECT, | |
| ATTR_OLEAUTOMATION, | |
| ATTR_OUT, | |
| ATTR_POINTERDEFAULT, | |
| ATTR_POINTERTYPE, | |
| ATTR_STRING, | |
| ATTR_V1ENUM, | |
| ATTR_WIREMARSHAL, | |
| }; | |
| struct _attr_t { | |
| enum attr_type type; | |
| union { | |
| DWORD ival; | |
| void *pval; | |
| } u; | |
| /* parser-internal */ | |
| DECL_LINK(attr_t) | |
| }; | |
| struct _type_t { | |
| char *name; | |
| BYTE type; | |
| struct _type_t *ref; | |
| char *rname; | |
| attr_t *attrs; | |
| func_t *funcs; | |
| var_t *fields; | |
| int ignore, is_const; | |
| int defined, written; | |
| /* parser-internal */ | |
| DECL_LINK(type_t) | |
| }; | |
| struct _typeref_t { | |
| char *name; | |
| type_t *ref; | |
| int uniq; | |
| }; | |
| struct _var_t { | |
| char *name; | |
| int ptr_level; | |
| type_t *type; | |
| char *tname; | |
| attr_t *attrs; | |
| /* parser-internal */ | |
| DECL_LINK(var_t) | |
| }; | |
| struct _func_t { | |
| var_t *def; | |
| var_t *args; | |
| int ignore, idx; | |
| /* parser-internal */ | |
| DECL_LINK(func_t) | |
| }; | |
| #endif |