| /* |
| * 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 |