2002-07-16 03:20:45 +00:00
|
|
|
/*
|
|
|
|
* 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
|
2006-05-18 12:49:52 +00:00
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
2002-07-16 03:20:45 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __WIDL_WIDLTYPES_H
|
|
|
|
#define __WIDL_WIDLTYPES_H
|
|
|
|
|
2003-09-05 23:08:26 +00:00
|
|
|
#include <stdarg.h>
|
2008-12-29 12:05:27 +00:00
|
|
|
#include <assert.h>
|
2018-06-13 02:19:11 +00:00
|
|
|
#include "ndrtypes.h"
|
2007-01-22 13:10:30 +00:00
|
|
|
#include "wine/list.h"
|
2002-07-16 03:20:45 +00:00
|
|
|
|
2022-01-25 07:45:39 +00:00
|
|
|
struct uuid
|
2022-01-24 11:17:22 +00:00
|
|
|
{
|
|
|
|
unsigned int Data1;
|
|
|
|
unsigned short Data2;
|
|
|
|
unsigned short Data3;
|
|
|
|
unsigned char Data4[8];
|
2022-01-25 07:45:39 +00:00
|
|
|
};
|
2002-12-15 01:13:18 +00:00
|
|
|
|
2004-04-22 03:40:01 +00:00
|
|
|
#define TRUE 1
|
|
|
|
#define FALSE 0
|
|
|
|
|
2002-07-16 03:20:45 +00:00
|
|
|
typedef struct _attr_t attr_t;
|
2020-11-18 01:14:14 +00:00
|
|
|
typedef struct _attr_custdata_t attr_custdata_t;
|
2002-11-12 02:12:35 +00:00
|
|
|
typedef struct _expr_t expr_t;
|
2002-07-16 03:20:45 +00:00
|
|
|
typedef struct _type_t type_t;
|
|
|
|
typedef struct _var_t var_t;
|
2019-07-05 21:49:49 +00:00
|
|
|
typedef struct _decl_spec_t decl_spec_t;
|
2008-04-25 09:58:24 +00:00
|
|
|
typedef struct _declarator_t declarator_t;
|
2021-02-17 18:33:31 +00:00
|
|
|
typedef struct _typeref_t typeref_t;
|
2005-01-05 17:12:25 +00:00
|
|
|
typedef struct _typelib_entry_t typelib_entry_t;
|
2006-05-15 19:55:04 +00:00
|
|
|
typedef struct _importlib_t importlib_t;
|
|
|
|
typedef struct _importinfo_t importinfo_t;
|
2005-01-05 17:12:25 +00:00
|
|
|
typedef struct _typelib_t typelib_t;
|
2007-06-13 23:13:04 +00:00
|
|
|
typedef struct _user_type_t user_type_t;
|
2007-09-28 00:38:13 +00:00
|
|
|
typedef struct _user_type_t context_handle_t;
|
2011-05-27 10:07:29 +00:00
|
|
|
typedef struct _user_type_t generic_handle_t;
|
2008-04-24 18:06:28 +00:00
|
|
|
typedef struct _statement_t statement_t;
|
2016-03-29 20:06:44 +00:00
|
|
|
typedef struct _warning_t warning_t;
|
2002-07-16 03:20:45 +00:00
|
|
|
|
2007-01-22 13:21:56 +00:00
|
|
|
typedef struct list attr_list_t;
|
2007-02-07 16:54:33 +00:00
|
|
|
typedef struct list str_list_t;
|
2007-01-22 13:31:40 +00:00
|
|
|
typedef struct list expr_list_t;
|
2007-01-22 13:26:12 +00:00
|
|
|
typedef struct list var_list_t;
|
2008-04-25 09:58:24 +00:00
|
|
|
typedef struct list declarator_list_t;
|
2021-02-17 18:33:32 +00:00
|
|
|
typedef struct list typeref_list_t;
|
2007-06-13 23:13:04 +00:00
|
|
|
typedef struct list user_type_list_t;
|
2007-09-28 00:38:13 +00:00
|
|
|
typedef struct list context_handle_list_t;
|
2011-05-27 10:07:29 +00:00
|
|
|
typedef struct list generic_handle_list_t;
|
2008-04-24 18:06:28 +00:00
|
|
|
typedef struct list statement_list_t;
|
2016-03-29 20:06:44 +00:00
|
|
|
typedef struct list warning_list_t;
|
2006-06-01 14:40:10 +00:00
|
|
|
|
2002-08-13 03:30:58 +00:00
|
|
|
enum attr_type
|
|
|
|
{
|
2021-02-09 09:37:19 +00:00
|
|
|
ATTR_ACTIVATABLE,
|
2006-02-09 11:10:08 +00:00
|
|
|
ATTR_AGGREGATABLE,
|
2020-10-14 21:24:34 +00:00
|
|
|
ATTR_ALLOCATE,
|
2009-10-26 12:15:23 +00:00
|
|
|
ATTR_ANNOTATION,
|
2006-02-09 11:10:08 +00:00
|
|
|
ATTR_APPOBJECT,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_ASYNC,
|
2013-08-08 14:48:34 +00:00
|
|
|
ATTR_ASYNCUUID,
|
2005-02-23 20:31:07 +00:00
|
|
|
ATTR_AUTO_HANDLE,
|
2005-12-16 11:40:17 +00:00
|
|
|
ATTR_BINDABLE,
|
2008-04-14 09:59:55 +00:00
|
|
|
ATTR_BROADCAST,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_CALLAS,
|
2008-04-02 11:56:13 +00:00
|
|
|
ATTR_CALLCONV, /* calling convention pseudo-attribute */
|
2002-12-03 19:12:07 +00:00
|
|
|
ATTR_CASE,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_CODE,
|
|
|
|
ATTR_COMMSTATUS,
|
2023-04-01 00:43:25 +00:00
|
|
|
ATTR_COMPOSABLE,
|
2002-12-03 19:12:07 +00:00
|
|
|
ATTR_CONTEXTHANDLE,
|
2020-12-01 14:01:57 +00:00
|
|
|
ATTR_CONTRACT,
|
2020-12-01 14:01:55 +00:00
|
|
|
ATTR_CONTRACTVERSION,
|
2005-01-09 17:59:44 +00:00
|
|
|
ATTR_CONTROL,
|
2020-11-18 01:14:14 +00:00
|
|
|
ATTR_CUSTOM,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_DECODE,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_DEFAULT,
|
2023-07-02 06:23:26 +00:00
|
|
|
ATTR_DEFAULT_OVERLOAD,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_DEFAULTBIND,
|
2006-02-09 11:10:08 +00:00
|
|
|
ATTR_DEFAULTCOLLELEM,
|
2008-04-25 09:59:21 +00:00
|
|
|
ATTR_DEFAULTVALUE,
|
2006-02-09 11:10:08 +00:00
|
|
|
ATTR_DEFAULTVTABLE,
|
2023-07-05 14:38:06 +00:00
|
|
|
ATTR_DEPRECATED,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_DISABLECONSISTENCYCHECK,
|
2005-03-28 10:01:20 +00:00
|
|
|
ATTR_DISPINTERFACE,
|
2005-12-16 11:40:17 +00:00
|
|
|
ATTR_DISPLAYBIND,
|
2004-01-07 04:21:27 +00:00
|
|
|
ATTR_DLLNAME,
|
|
|
|
ATTR_DUAL,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_ENABLEALLOCATE,
|
|
|
|
ATTR_ENCODE,
|
2004-04-26 23:29:59 +00:00
|
|
|
ATTR_ENDPOINT,
|
2008-04-25 09:59:21 +00:00
|
|
|
ATTR_ENTRY,
|
2021-01-29 08:50:06 +00:00
|
|
|
ATTR_EVENTADD,
|
|
|
|
ATTR_EVENTREMOVE,
|
2021-01-26 14:36:30 +00:00
|
|
|
ATTR_EXCLUSIVETO,
|
2005-02-23 20:31:07 +00:00
|
|
|
ATTR_EXPLICIT_HANDLE,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_FAULTSTATUS,
|
2021-01-29 08:50:05 +00:00
|
|
|
ATTR_FLAGS,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_FORCEALLOCATE,
|
2004-04-19 23:08:22 +00:00
|
|
|
ATTR_HANDLE,
|
2005-01-10 16:08:36 +00:00
|
|
|
ATTR_HELPCONTEXT,
|
|
|
|
ATTR_HELPFILE,
|
2004-01-07 04:21:27 +00:00
|
|
|
ATTR_HELPSTRING,
|
2005-01-10 16:08:36 +00:00
|
|
|
ATTR_HELPSTRINGCONTEXT,
|
|
|
|
ATTR_HELPSTRINGDLL,
|
2005-01-09 17:59:44 +00:00
|
|
|
ATTR_HIDDEN,
|
2004-01-07 04:21:27 +00:00
|
|
|
ATTR_ID,
|
2002-12-03 19:12:07 +00:00
|
|
|
ATTR_IDEMPOTENT,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_IGNORE,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_IIDIS,
|
2006-02-09 11:10:08 +00:00
|
|
|
ATTR_IMMEDIATEBIND,
|
2005-02-23 20:31:07 +00:00
|
|
|
ATTR_IMPLICIT_HANDLE,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_IN,
|
2004-02-11 23:57:58 +00:00
|
|
|
ATTR_INPUTSYNC,
|
2002-12-03 19:12:07 +00:00
|
|
|
ATTR_LENGTHIS,
|
2008-04-24 18:03:07 +00:00
|
|
|
ATTR_LIBLCID,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_LICENSED,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_LOCAL,
|
2021-01-25 11:35:29 +00:00
|
|
|
ATTR_MARSHALING_BEHAVIOR,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_MAYBE,
|
|
|
|
ATTR_MESSAGE,
|
|
|
|
ATTR_NOCODE,
|
2006-02-09 11:10:08 +00:00
|
|
|
ATTR_NONBROWSABLE,
|
2005-02-03 13:34:28 +00:00
|
|
|
ATTR_NONCREATABLE,
|
2006-02-09 11:10:08 +00:00
|
|
|
ATTR_NONEXTENSIBLE,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_NOTIFY,
|
|
|
|
ATTR_NOTIFYFLAG,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_OBJECT,
|
2004-01-07 04:21:27 +00:00
|
|
|
ATTR_ODL,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_OLEAUTOMATION,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_OPTIMIZE,
|
2005-01-03 14:26:17 +00:00
|
|
|
ATTR_OPTIONAL,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_OUT,
|
2022-01-25 16:07:28 +00:00
|
|
|
ATTR_OVERLOAD,
|
2009-06-05 14:48:24 +00:00
|
|
|
ATTR_PARAMLCID,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_PARTIALIGNORE,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_POINTERDEFAULT,
|
|
|
|
ATTR_POINTERTYPE,
|
2010-11-30 11:05:57 +00:00
|
|
|
ATTR_PROGID,
|
2004-10-05 02:14:54 +00:00
|
|
|
ATTR_PROPGET,
|
|
|
|
ATTR_PROPPUT,
|
2005-02-01 18:48:25 +00:00
|
|
|
ATTR_PROPPUTREF,
|
2023-04-03 08:33:58 +00:00
|
|
|
ATTR_PROTECTED,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_PROXY,
|
2004-01-07 04:21:27 +00:00
|
|
|
ATTR_PUBLIC,
|
2005-09-12 20:13:40 +00:00
|
|
|
ATTR_RANGE,
|
2004-01-07 04:21:27 +00:00
|
|
|
ATTR_READONLY,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_REPRESENTAS,
|
2006-02-09 11:10:08 +00:00
|
|
|
ATTR_REQUESTEDIT,
|
2005-01-09 17:59:44 +00:00
|
|
|
ATTR_RESTRICTED,
|
2004-01-07 04:21:27 +00:00
|
|
|
ATTR_RETVAL,
|
2002-12-03 19:12:07 +00:00
|
|
|
ATTR_SIZEIS,
|
2004-01-07 04:21:27 +00:00
|
|
|
ATTR_SOURCE,
|
2021-02-09 09:37:20 +00:00
|
|
|
ATTR_STATIC,
|
2008-01-06 21:25:50 +00:00
|
|
|
ATTR_STRICTCONTEXTHANDLE,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_STRING,
|
2002-12-03 19:12:07 +00:00
|
|
|
ATTR_SWITCHIS,
|
|
|
|
ATTR_SWITCHTYPE,
|
2010-11-30 11:05:57 +00:00
|
|
|
ATTR_THREADING,
|
2004-04-26 23:29:59 +00:00
|
|
|
ATTR_TRANSMITAS,
|
2010-10-21 12:13:38 +00:00
|
|
|
ATTR_UIDEFAULT,
|
|
|
|
ATTR_USERMARSHAL,
|
|
|
|
ATTR_USESGETLASTERROR,
|
2002-11-12 02:12:35 +00:00
|
|
|
ATTR_UUID,
|
2002-08-13 03:30:58 +00:00
|
|
|
ATTR_V1ENUM,
|
2005-01-03 14:26:17 +00:00
|
|
|
ATTR_VARARG,
|
2002-12-03 19:12:07 +00:00
|
|
|
ATTR_VERSION,
|
2010-11-30 11:05:57 +00:00
|
|
|
ATTR_VIPROGID,
|
2005-03-28 10:01:20 +00:00
|
|
|
ATTR_WIREMARSHAL
|
2002-08-13 03:30:58 +00:00
|
|
|
};
|
|
|
|
|
2002-11-12 02:12:35 +00:00
|
|
|
enum expr_type
|
|
|
|
{
|
|
|
|
EXPR_VOID,
|
|
|
|
EXPR_NUM,
|
2002-11-30 01:49:46 +00:00
|
|
|
EXPR_HEXNUM,
|
2007-07-17 11:09:03 +00:00
|
|
|
EXPR_DOUBLE,
|
2002-11-12 02:12:35 +00:00
|
|
|
EXPR_IDENTIFIER,
|
|
|
|
EXPR_NEG,
|
2002-12-03 19:12:07 +00:00
|
|
|
EXPR_NOT,
|
2002-11-12 02:12:35 +00:00
|
|
|
EXPR_PPTR,
|
|
|
|
EXPR_CAST,
|
2002-11-30 01:49:46 +00:00
|
|
|
EXPR_SIZEOF,
|
2002-11-12 02:12:35 +00:00
|
|
|
EXPR_SHL,
|
|
|
|
EXPR_SHR,
|
|
|
|
EXPR_MUL,
|
|
|
|
EXPR_DIV,
|
|
|
|
EXPR_ADD,
|
|
|
|
EXPR_SUB,
|
|
|
|
EXPR_AND,
|
|
|
|
EXPR_OR,
|
2004-04-19 23:08:22 +00:00
|
|
|
EXPR_COND,
|
2006-07-06 11:56:36 +00:00
|
|
|
EXPR_TRUEFALSE,
|
2007-12-10 13:30:42 +00:00
|
|
|
EXPR_ADDRESSOF,
|
2008-04-20 21:15:43 +00:00
|
|
|
EXPR_MEMBER,
|
2008-04-20 21:16:00 +00:00
|
|
|
EXPR_ARRAY,
|
2008-04-20 21:16:10 +00:00
|
|
|
EXPR_MOD,
|
2008-04-22 10:35:48 +00:00
|
|
|
EXPR_LOGOR,
|
|
|
|
EXPR_LOGAND,
|
|
|
|
EXPR_XOR,
|
|
|
|
EXPR_EQUALITY,
|
|
|
|
EXPR_INEQUALITY,
|
|
|
|
EXPR_GTR,
|
|
|
|
EXPR_LESS,
|
|
|
|
EXPR_GTREQL,
|
|
|
|
EXPR_LESSEQL,
|
|
|
|
EXPR_LOGNOT,
|
|
|
|
EXPR_POS,
|
2008-04-25 09:59:21 +00:00
|
|
|
EXPR_STRLIT,
|
|
|
|
EXPR_WSTRLIT,
|
2010-01-18 22:15:46 +00:00
|
|
|
EXPR_CHARCONST,
|
2002-11-12 02:12:35 +00:00
|
|
|
};
|
|
|
|
|
2005-01-05 17:12:25 +00:00
|
|
|
enum type_kind
|
|
|
|
{
|
2006-07-28 20:45:33 +00:00
|
|
|
TKIND_PRIMITIVE = -1,
|
|
|
|
TKIND_ENUM,
|
2005-01-05 17:12:25 +00:00
|
|
|
TKIND_RECORD,
|
|
|
|
TKIND_MODULE,
|
|
|
|
TKIND_INTERFACE,
|
|
|
|
TKIND_DISPATCH,
|
|
|
|
TKIND_COCLASS,
|
|
|
|
TKIND_ALIAS,
|
|
|
|
TKIND_UNION,
|
|
|
|
TKIND_MAX
|
|
|
|
};
|
2007-01-22 13:20:36 +00:00
|
|
|
|
2008-04-30 14:23:13 +00:00
|
|
|
enum storage_class
|
|
|
|
{
|
|
|
|
STG_NONE,
|
|
|
|
STG_STATIC,
|
|
|
|
STG_EXTERN,
|
|
|
|
STG_REGISTER,
|
|
|
|
};
|
|
|
|
|
2019-08-18 01:07:06 +00:00
|
|
|
enum type_qualifier
|
|
|
|
{
|
|
|
|
TYPE_QUALIFIER_CONST = 1,
|
|
|
|
};
|
|
|
|
|
2019-08-18 01:07:07 +00:00
|
|
|
enum function_specifier
|
|
|
|
{
|
|
|
|
FUNCTION_SPECIFIER_INLINE = 1,
|
|
|
|
};
|
|
|
|
|
2008-04-24 18:06:28 +00:00
|
|
|
enum statement_type
|
|
|
|
{
|
|
|
|
STMT_LIBRARY,
|
2008-04-30 14:23:23 +00:00
|
|
|
STMT_DECLARATION,
|
2008-04-24 18:06:28 +00:00
|
|
|
STMT_TYPE,
|
|
|
|
STMT_TYPEREF,
|
|
|
|
STMT_MODULE,
|
|
|
|
STMT_TYPEDEF,
|
|
|
|
STMT_IMPORT,
|
|
|
|
STMT_IMPORTLIB,
|
2013-11-04 13:13:06 +00:00
|
|
|
STMT_PRAGMA,
|
2008-04-24 18:06:28 +00:00
|
|
|
STMT_CPPQUOTE
|
|
|
|
};
|
|
|
|
|
2010-11-30 11:05:57 +00:00
|
|
|
enum threading_type
|
|
|
|
{
|
|
|
|
THREADING_APARTMENT = 1,
|
|
|
|
THREADING_NEUTRAL,
|
|
|
|
THREADING_SINGLE,
|
|
|
|
THREADING_FREE,
|
|
|
|
THREADING_BOTH
|
|
|
|
};
|
|
|
|
|
2021-01-25 11:35:29 +00:00
|
|
|
enum marshaling_type
|
|
|
|
{
|
|
|
|
MARSHALING_INVALID = 0,
|
|
|
|
MARSHALING_NONE,
|
|
|
|
MARSHALING_AGILE,
|
|
|
|
MARSHALING_STANDARD,
|
|
|
|
};
|
|
|
|
|
2009-03-05 08:21:51 +00:00
|
|
|
enum type_basic_type
|
|
|
|
{
|
|
|
|
TYPE_BASIC_INT8 = 1,
|
|
|
|
TYPE_BASIC_INT16,
|
|
|
|
TYPE_BASIC_INT32,
|
|
|
|
TYPE_BASIC_INT64,
|
|
|
|
TYPE_BASIC_INT,
|
2009-11-07 14:54:56 +00:00
|
|
|
TYPE_BASIC_INT3264,
|
2018-11-01 14:02:28 +00:00
|
|
|
TYPE_BASIC_LONG,
|
2009-03-05 08:21:51 +00:00
|
|
|
TYPE_BASIC_CHAR,
|
|
|
|
TYPE_BASIC_HYPER,
|
|
|
|
TYPE_BASIC_BYTE,
|
|
|
|
TYPE_BASIC_WCHAR,
|
|
|
|
TYPE_BASIC_FLOAT,
|
|
|
|
TYPE_BASIC_DOUBLE,
|
|
|
|
TYPE_BASIC_ERROR_STATUS_T,
|
|
|
|
TYPE_BASIC_HANDLE,
|
|
|
|
};
|
|
|
|
|
|
|
|
#define TYPE_BASIC_MAX TYPE_BASIC_HANDLE
|
|
|
|
#define TYPE_BASIC_INT_MIN TYPE_BASIC_INT8
|
|
|
|
#define TYPE_BASIC_INT_MAX TYPE_BASIC_HYPER
|
|
|
|
|
2023-03-21 09:40:25 +00:00
|
|
|
struct location
|
2008-04-14 10:00:20 +00:00
|
|
|
{
|
|
|
|
const char *input_name;
|
2023-03-21 10:04:58 +00:00
|
|
|
int first_line;
|
|
|
|
int last_line;
|
|
|
|
int first_column;
|
|
|
|
int last_column;
|
2008-04-14 10:00:20 +00:00
|
|
|
};
|
|
|
|
|
2007-02-07 16:54:33 +00:00
|
|
|
struct str_list_entry_t
|
|
|
|
{
|
|
|
|
char *str;
|
|
|
|
struct list entry;
|
|
|
|
};
|
|
|
|
|
2019-07-05 21:49:49 +00:00
|
|
|
struct _decl_spec_t
|
|
|
|
{
|
|
|
|
type_t *type;
|
|
|
|
enum storage_class stgclass;
|
2019-08-18 01:07:06 +00:00
|
|
|
enum type_qualifier qualifier;
|
2019-08-18 01:07:07 +00:00
|
|
|
enum function_specifier func_specifier;
|
2019-07-05 21:49:49 +00:00
|
|
|
};
|
|
|
|
|
2002-07-16 03:20:45 +00:00
|
|
|
struct _attr_t {
|
2002-08-13 03:30:58 +00:00
|
|
|
enum attr_type type;
|
2002-07-16 03:20:45 +00:00
|
|
|
union {
|
2010-03-26 10:42:28 +00:00
|
|
|
unsigned int ival;
|
2002-07-16 03:20:45 +00:00
|
|
|
void *pval;
|
|
|
|
} u;
|
|
|
|
/* parser-internal */
|
2007-01-22 13:20:36 +00:00
|
|
|
struct list entry;
|
2023-01-24 21:19:45 +00:00
|
|
|
struct location where;
|
2002-07-16 03:20:45 +00:00
|
|
|
};
|
|
|
|
|
2002-11-12 02:12:35 +00:00
|
|
|
struct _expr_t {
|
|
|
|
enum expr_type type;
|
2006-02-07 11:28:20 +00:00
|
|
|
const expr_t *ref;
|
2002-11-12 02:12:35 +00:00
|
|
|
union {
|
2010-03-26 10:42:28 +00:00
|
|
|
int lval;
|
2007-07-17 11:09:03 +00:00
|
|
|
double dval;
|
2006-02-07 11:28:20 +00:00
|
|
|
const char *sval;
|
|
|
|
const expr_t *ext;
|
2019-08-16 01:13:17 +00:00
|
|
|
decl_spec_t tref;
|
2002-11-12 02:12:35 +00:00
|
|
|
} u;
|
2006-02-07 11:28:20 +00:00
|
|
|
const expr_t *ext2;
|
2002-11-30 01:49:46 +00:00
|
|
|
int is_const;
|
2010-03-26 10:42:28 +00:00
|
|
|
int cval;
|
2002-11-12 02:12:35 +00:00
|
|
|
/* parser-internal */
|
2007-01-22 13:31:40 +00:00
|
|
|
struct list entry;
|
2002-11-12 02:12:35 +00:00
|
|
|
};
|
|
|
|
|
2020-11-18 01:14:14 +00:00
|
|
|
struct _attr_custdata_t {
|
2022-01-25 07:45:39 +00:00
|
|
|
struct uuid id;
|
2020-11-18 01:14:14 +00:00
|
|
|
expr_t *pval;
|
|
|
|
};
|
|
|
|
|
2008-12-29 12:05:35 +00:00
|
|
|
struct struct_details
|
|
|
|
{
|
|
|
|
var_list_t *fields;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct enumeration_details
|
|
|
|
{
|
|
|
|
var_list_t *enums;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct func_details
|
|
|
|
{
|
|
|
|
var_list_t *args;
|
2011-09-17 11:38:15 +00:00
|
|
|
struct _var_t *retval;
|
2008-12-29 12:05:35 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct iface_details
|
|
|
|
{
|
2009-01-05 23:33:27 +00:00
|
|
|
statement_list_t *stmts;
|
2010-03-23 13:33:36 +00:00
|
|
|
var_list_t *disp_methods;
|
2008-12-29 12:05:35 +00:00
|
|
|
var_list_t *disp_props;
|
2009-03-05 08:22:32 +00:00
|
|
|
struct _type_t *inherit;
|
2018-05-29 07:49:35 +00:00
|
|
|
struct _type_t *disp_inherit;
|
2018-11-07 15:13:47 +00:00
|
|
|
struct _type_t *async_iface;
|
2021-02-17 18:33:32 +00:00
|
|
|
typeref_list_t *requires;
|
2008-12-29 12:05:35 +00:00
|
|
|
};
|
|
|
|
|
2009-01-05 23:33:27 +00:00
|
|
|
struct module_details
|
|
|
|
{
|
|
|
|
statement_list_t *stmts;
|
|
|
|
};
|
|
|
|
|
2009-01-05 23:33:36 +00:00
|
|
|
struct array_details
|
|
|
|
{
|
2009-03-05 08:21:35 +00:00
|
|
|
expr_t *size_is;
|
|
|
|
expr_t *length_is;
|
2019-07-05 21:51:31 +00:00
|
|
|
struct _decl_spec_t elem;
|
2009-03-05 08:22:32 +00:00
|
|
|
unsigned int dim;
|
2009-03-07 23:23:44 +00:00
|
|
|
unsigned char declptr; /* if declared as a pointer */
|
2011-06-01 19:27:56 +00:00
|
|
|
unsigned short ptr_tfsoff; /* offset of pointer definition for declptr */
|
2009-01-05 23:33:36 +00:00
|
|
|
};
|
|
|
|
|
2009-01-05 23:34:44 +00:00
|
|
|
struct coclass_details
|
|
|
|
{
|
2021-02-17 18:33:32 +00:00
|
|
|
typeref_list_t *ifaces;
|
2009-01-05 23:34:44 +00:00
|
|
|
};
|
|
|
|
|
2009-03-05 08:21:51 +00:00
|
|
|
struct basic_details
|
|
|
|
{
|
|
|
|
enum type_basic_type type;
|
|
|
|
int sign;
|
|
|
|
};
|
|
|
|
|
2009-03-05 08:22:19 +00:00
|
|
|
struct pointer_details
|
|
|
|
{
|
2019-07-05 21:51:32 +00:00
|
|
|
struct _decl_spec_t ref;
|
2009-03-05 08:22:19 +00:00
|
|
|
};
|
|
|
|
|
2009-11-07 14:55:09 +00:00
|
|
|
struct bitfield_details
|
|
|
|
{
|
|
|
|
struct _type_t *field;
|
|
|
|
const expr_t *bits;
|
|
|
|
};
|
|
|
|
|
2019-08-15 02:45:50 +00:00
|
|
|
struct alias_details
|
|
|
|
{
|
|
|
|
struct _decl_spec_t aliasee;
|
|
|
|
};
|
|
|
|
|
2021-01-27 20:20:45 +00:00
|
|
|
struct runtimeclass_details
|
|
|
|
{
|
2021-02-17 18:33:32 +00:00
|
|
|
typeref_list_t *ifaces;
|
2021-01-27 20:20:45 +00:00
|
|
|
};
|
|
|
|
|
2021-02-11 16:37:27 +00:00
|
|
|
struct parameterized_details
|
|
|
|
{
|
|
|
|
type_t *type;
|
2021-02-17 18:33:33 +00:00
|
|
|
typeref_list_t *params;
|
2021-02-11 16:37:27 +00:00
|
|
|
};
|
|
|
|
|
2021-02-18 09:38:59 +00:00
|
|
|
struct delegate_details
|
|
|
|
{
|
|
|
|
type_t *iface;
|
|
|
|
};
|
|
|
|
|
2015-07-31 11:37:40 +00:00
|
|
|
#define HASHMAX 64
|
|
|
|
|
|
|
|
struct namespace {
|
|
|
|
const char *name;
|
|
|
|
struct namespace *parent;
|
|
|
|
struct list entry;
|
|
|
|
struct list children;
|
|
|
|
struct rtype *type_hash[HASHMAX];
|
|
|
|
};
|
|
|
|
|
2009-01-19 00:02:35 +00:00
|
|
|
enum type_type
|
|
|
|
{
|
|
|
|
TYPE_VOID,
|
|
|
|
TYPE_BASIC, /* ints, floats and handles */
|
|
|
|
TYPE_ENUM,
|
|
|
|
TYPE_STRUCT,
|
|
|
|
TYPE_ENCAPSULATED_UNION,
|
|
|
|
TYPE_UNION,
|
|
|
|
TYPE_ALIAS,
|
|
|
|
TYPE_MODULE,
|
|
|
|
TYPE_COCLASS,
|
|
|
|
TYPE_FUNCTION,
|
|
|
|
TYPE_INTERFACE,
|
|
|
|
TYPE_POINTER,
|
|
|
|
TYPE_ARRAY,
|
2009-11-07 14:55:09 +00:00
|
|
|
TYPE_BITFIELD,
|
2020-12-01 14:01:56 +00:00
|
|
|
TYPE_APICONTRACT,
|
2021-01-27 20:20:45 +00:00
|
|
|
TYPE_RUNTIMECLASS,
|
2021-02-11 16:37:27 +00:00
|
|
|
TYPE_PARAMETERIZED_TYPE,
|
|
|
|
TYPE_PARAMETER,
|
2021-02-18 09:38:59 +00:00
|
|
|
TYPE_DELEGATE,
|
2009-01-19 00:02:35 +00:00
|
|
|
};
|
|
|
|
|
2002-07-16 03:20:45 +00:00
|
|
|
struct _type_t {
|
2022-01-25 09:13:37 +00:00
|
|
|
const char *name; /* C++ name with parameters in brackets */
|
2015-07-31 11:37:50 +00:00
|
|
|
struct namespace *namespace;
|
2009-03-05 08:22:19 +00:00
|
|
|
enum type_type type_type;
|
2008-04-29 19:40:30 +00:00
|
|
|
attr_list_t *attrs;
|
2008-12-29 12:05:35 +00:00
|
|
|
union
|
|
|
|
{
|
|
|
|
struct struct_details *structure;
|
|
|
|
struct enumeration_details *enumeration;
|
|
|
|
struct func_details *function;
|
|
|
|
struct iface_details *iface;
|
2009-01-05 23:33:27 +00:00
|
|
|
struct module_details *module;
|
2009-01-05 23:33:36 +00:00
|
|
|
struct array_details array;
|
2009-01-05 23:34:44 +00:00
|
|
|
struct coclass_details coclass;
|
2009-03-05 08:21:51 +00:00
|
|
|
struct basic_details basic;
|
2009-03-05 08:22:19 +00:00
|
|
|
struct pointer_details pointer;
|
2009-11-07 14:55:09 +00:00
|
|
|
struct bitfield_details bitfield;
|
2019-08-15 02:45:50 +00:00
|
|
|
struct alias_details alias;
|
2021-01-27 20:20:45 +00:00
|
|
|
struct runtimeclass_details runtimeclass;
|
2021-02-11 16:37:27 +00:00
|
|
|
struct parameterized_details parameterized;
|
2021-02-18 09:38:59 +00:00
|
|
|
struct delegate_details delegate;
|
2008-12-29 12:05:35 +00:00
|
|
|
} details;
|
2022-01-25 09:13:37 +00:00
|
|
|
const char *c_name; /* mangled C name, with namespaces and parameters */
|
2021-02-18 09:39:01 +00:00
|
|
|
const char *signature;
|
2022-01-25 09:13:37 +00:00
|
|
|
const char *qualified_name; /* C++ fully qualified name */
|
|
|
|
const char *impl_name; /* C++ parameterized types impl base class name */
|
|
|
|
const char *param_name; /* used to build c_name of a parameterized type, when used as a parameter */
|
|
|
|
const char *short_name; /* widl specific short name */
|
2007-05-10 03:50:49 +00:00
|
|
|
unsigned int typestring_offset;
|
2007-09-18 22:28:49 +00:00
|
|
|
unsigned int ptrdesc; /* used for complex structs */
|
2005-01-06 20:45:21 +00:00
|
|
|
int typelib_idx;
|
2023-03-21 09:40:25 +00:00
|
|
|
struct location where;
|
2007-05-25 00:49:21 +00:00
|
|
|
unsigned int ignore : 1;
|
|
|
|
unsigned int defined : 1;
|
|
|
|
unsigned int written : 1;
|
|
|
|
unsigned int user_types_registered : 1;
|
2007-05-25 00:50:02 +00:00
|
|
|
unsigned int tfswrite : 1; /* if the type needs to be written to the TFS */
|
2008-04-20 21:15:16 +00:00
|
|
|
unsigned int checked : 1;
|
2002-07-16 03:20:45 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct _var_t {
|
|
|
|
char *name;
|
2019-07-05 21:49:49 +00:00
|
|
|
decl_spec_t declspec;
|
2007-01-22 13:20:36 +00:00
|
|
|
attr_list_t *attrs;
|
2002-11-30 01:49:46 +00:00
|
|
|
expr_t *eval;
|
2019-08-14 02:08:07 +00:00
|
|
|
|
2011-09-19 10:23:01 +00:00
|
|
|
unsigned int typestring_offset;
|
2002-07-16 03:20:45 +00:00
|
|
|
|
2019-08-14 02:08:07 +00:00
|
|
|
/* fields specific to functions */
|
|
|
|
unsigned int procstring_offset, func_idx;
|
|
|
|
|
2023-03-21 09:40:25 +00:00
|
|
|
struct location where;
|
2008-04-14 10:00:20 +00:00
|
|
|
|
2019-08-20 02:17:36 +00:00
|
|
|
unsigned int declonly : 1;
|
|
|
|
|
2002-07-16 03:20:45 +00:00
|
|
|
/* parser-internal */
|
2007-01-22 13:26:12 +00:00
|
|
|
struct list entry;
|
2002-07-16 03:20:45 +00:00
|
|
|
};
|
|
|
|
|
2008-04-25 09:58:24 +00:00
|
|
|
struct _declarator_t {
|
2007-05-10 03:50:49 +00:00
|
|
|
var_t *var;
|
2008-04-24 18:03:50 +00:00
|
|
|
type_t *type;
|
2019-08-18 01:07:06 +00:00
|
|
|
enum type_qualifier qualifier;
|
2009-11-07 14:55:09 +00:00
|
|
|
expr_t *bits;
|
2007-05-10 03:50:49 +00:00
|
|
|
|
|
|
|
/* parser-internal */
|
|
|
|
struct list entry;
|
|
|
|
};
|
|
|
|
|
2021-02-17 18:33:31 +00:00
|
|
|
struct _typeref_t {
|
2021-02-17 18:33:30 +00:00
|
|
|
type_t *type;
|
2007-01-22 13:20:36 +00:00
|
|
|
attr_list_t *attrs;
|
2004-01-07 04:21:27 +00:00
|
|
|
|
|
|
|
/* parser-internal */
|
2007-01-22 13:21:56 +00:00
|
|
|
struct list entry;
|
2004-01-07 04:21:27 +00:00
|
|
|
};
|
|
|
|
|
2005-01-05 17:12:25 +00:00
|
|
|
struct _typelib_entry_t {
|
2006-08-29 21:26:43 +00:00
|
|
|
type_t *type;
|
2007-01-22 13:10:30 +00:00
|
|
|
struct list entry;
|
2005-01-05 17:12:25 +00:00
|
|
|
};
|
|
|
|
|
2006-05-15 19:55:04 +00:00
|
|
|
struct _importinfo_t {
|
|
|
|
int offset;
|
2022-01-25 07:45:39 +00:00
|
|
|
struct uuid guid;
|
2006-05-15 19:55:04 +00:00
|
|
|
int flags;
|
|
|
|
int id;
|
|
|
|
|
|
|
|
char *name;
|
|
|
|
|
|
|
|
importlib_t *importlib;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct _importlib_t {
|
2019-04-17 05:14:55 +00:00
|
|
|
int offset;
|
2006-05-15 19:55:04 +00:00
|
|
|
char *name;
|
|
|
|
|
|
|
|
int version;
|
2022-01-25 07:45:39 +00:00
|
|
|
struct uuid guid;
|
2006-05-15 19:55:04 +00:00
|
|
|
|
|
|
|
importinfo_t *importinfos;
|
|
|
|
int ntypeinfos;
|
|
|
|
|
|
|
|
int allocated;
|
|
|
|
|
2007-01-22 13:10:30 +00:00
|
|
|
struct list entry;
|
2006-05-15 19:55:04 +00:00
|
|
|
};
|
|
|
|
|
2005-01-05 17:12:25 +00:00
|
|
|
struct _typelib_t {
|
|
|
|
char *name;
|
2008-04-14 09:59:35 +00:00
|
|
|
const attr_list_t *attrs;
|
2007-01-22 13:10:30 +00:00
|
|
|
struct list importlibs;
|
2008-04-24 18:06:28 +00:00
|
|
|
statement_list_t *stmts;
|
2020-01-28 16:10:27 +00:00
|
|
|
|
|
|
|
type_t **reg_ifaces;
|
|
|
|
unsigned int reg_iface_count;
|
2005-01-05 17:12:25 +00:00
|
|
|
};
|
|
|
|
|
2007-06-13 23:13:04 +00:00
|
|
|
struct _user_type_t {
|
|
|
|
struct list entry;
|
|
|
|
const char *name;
|
|
|
|
};
|
|
|
|
|
2008-04-24 18:06:28 +00:00
|
|
|
struct _statement_t {
|
|
|
|
struct list entry;
|
|
|
|
enum statement_type type;
|
|
|
|
union
|
|
|
|
{
|
|
|
|
type_t *type;
|
|
|
|
const char *str;
|
|
|
|
var_t *var;
|
|
|
|
typelib_t *lib;
|
2021-02-17 18:33:33 +00:00
|
|
|
typeref_list_t *type_list;
|
2008-04-24 18:06:28 +00:00
|
|
|
} u;
|
2019-08-20 02:17:36 +00:00
|
|
|
unsigned int declonly : 1; /* for STMT_TYPE and STMT_TYPEDEF */
|
2008-04-24 18:06:28 +00:00
|
|
|
};
|
|
|
|
|
2016-03-29 20:06:44 +00:00
|
|
|
struct _warning_t {
|
|
|
|
int num;
|
|
|
|
struct list entry;
|
|
|
|
};
|
|
|
|
|
2009-05-21 09:10:22 +00:00
|
|
|
typedef enum {
|
|
|
|
SYS_WIN16,
|
|
|
|
SYS_WIN32,
|
|
|
|
SYS_MAC,
|
|
|
|
SYS_WIN64
|
|
|
|
} syskind_t;
|
|
|
|
|
2007-06-13 23:13:04 +00:00
|
|
|
extern user_type_list_t user_type_list;
|
2011-06-13 18:31:42 +00:00
|
|
|
extern context_handle_list_t context_handle_list;
|
2011-05-27 10:07:29 +00:00
|
|
|
extern generic_handle_list_t generic_handle_list;
|
2019-01-29 14:46:30 +00:00
|
|
|
void check_for_additional_prototype_types(type_t *type);
|
2007-06-13 23:13:04 +00:00
|
|
|
|
2006-08-25 01:01:18 +00:00
|
|
|
void init_types(void);
|
2007-10-08 23:47:28 +00:00
|
|
|
type_t *alloc_type(void);
|
|
|
|
void set_all_tfswrite(int val);
|
2008-12-26 16:22:25 +00:00
|
|
|
void clear_all_offsets(void);
|
2006-08-25 01:01:18 +00:00
|
|
|
|
2009-03-05 08:23:00 +00:00
|
|
|
#define tsENUM 1
|
|
|
|
#define tsSTRUCT 2
|
|
|
|
#define tsUNION 3
|
|
|
|
|
2008-04-22 10:36:38 +00:00
|
|
|
var_t *find_const(const char *name, int f);
|
2015-07-31 11:37:40 +00:00
|
|
|
type_t *find_type(const char *name, struct namespace *namespace, int t);
|
2009-03-05 08:22:32 +00:00
|
|
|
type_t *make_type(enum type_type type);
|
2015-07-31 11:37:40 +00:00
|
|
|
type_t *get_type(enum type_type type, char *name, struct namespace *namespace, int t);
|
|
|
|
type_t *reg_type(type_t *type, const char *name, struct namespace *namespace, int t);
|
2009-03-05 08:23:00 +00:00
|
|
|
|
|
|
|
var_t *make_var(char *name);
|
|
|
|
var_list_t *append_var(var_list_t *list, var_t *var);
|
2008-04-22 10:36:38 +00:00
|
|
|
|
2020-12-01 14:01:54 +00:00
|
|
|
char *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix,
|
|
|
|
const char *abi_prefix);
|
2021-02-17 18:33:34 +00:00
|
|
|
char *format_parameterized_type_name(type_t *type, typeref_list_t *params);
|
2015-07-31 11:37:50 +00:00
|
|
|
|
2009-01-19 00:02:35 +00:00
|
|
|
static inline enum type_type type_get_type_detect_alias(const type_t *type)
|
|
|
|
{
|
2009-03-05 08:22:19 +00:00
|
|
|
return type->type_type;
|
2009-01-19 00:02:35 +00:00
|
|
|
}
|
|
|
|
|
2009-01-05 23:33:27 +00:00
|
|
|
#define STATEMENTS_FOR_EACH_FUNC(stmt, stmts) \
|
|
|
|
if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, statement_t, entry ) \
|
2019-07-05 21:49:49 +00:00
|
|
|
if (stmt->type == STMT_DECLARATION && stmt->u.var->declspec.stgclass == STG_NONE && \
|
|
|
|
type_get_type_detect_alias(stmt->u.var->declspec.type) == TYPE_FUNCTION)
|
2009-01-05 23:33:27 +00:00
|
|
|
|
|
|
|
static inline int statements_has_func(const statement_list_t *stmts)
|
|
|
|
{
|
|
|
|
const statement_t *stmt;
|
|
|
|
int has_func = 0;
|
|
|
|
STATEMENTS_FOR_EACH_FUNC(stmt, stmts)
|
|
|
|
{
|
|
|
|
has_func = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return has_func;
|
2008-04-02 11:55:34 +00:00
|
|
|
}
|
|
|
|
|
2015-07-31 11:37:50 +00:00
|
|
|
static inline int is_global_namespace(const struct namespace *namespace)
|
|
|
|
{
|
|
|
|
return !namespace->name;
|
|
|
|
}
|
|
|
|
|
2019-07-05 21:49:49 +00:00
|
|
|
static inline decl_spec_t *init_declspec(decl_spec_t *declspec, type_t *type)
|
|
|
|
{
|
|
|
|
declspec->type = type;
|
|
|
|
declspec->stgclass = STG_NONE;
|
2019-08-18 01:07:06 +00:00
|
|
|
declspec->qualifier = 0;
|
2019-08-18 01:07:07 +00:00
|
|
|
declspec->func_specifier = 0;
|
2019-07-05 21:49:49 +00:00
|
|
|
|
|
|
|
return declspec;
|
|
|
|
}
|
|
|
|
|
2002-07-16 03:20:45 +00:00
|
|
|
#endif
|