mirror of
https://github.com/reactos/reactos.git
synced 2024-07-05 12:15:46 +00:00
[WIDL]
- Sync WIDL to Wine 1.5.10. Part 1 of 2. - Adjust files to use MIDL compatible header guards. - Add support for nameless structs and unions. svn path=/trunk/; revision=57095
This commit is contained in:
parent
f2112ca452
commit
7f242b94c7
|
@ -541,7 +541,7 @@ public:
|
||||||
// WIDL temp hack : when the interface contains 'long' WIDL writes it out as a 'LONG'
|
// WIDL temp hack : when the interface contains 'long' WIDL writes it out as a 'LONG'
|
||||||
// Setting the prototype to LONG in this class breaks building with MSVC so we use
|
// Setting the prototype to LONG in this class breaks building with MSVC so we use
|
||||||
// the correct 'long' type here and temp hack it for WIDL generated prototypes.
|
// the correct 'long' type here and temp hack it for WIDL generated prototypes.
|
||||||
#ifdef __WIDL_EXDISP_H
|
#ifdef __exdisp_h__
|
||||||
#define long LONG
|
#define long LONG
|
||||||
#endif
|
#endif
|
||||||
virtual HRESULT STDMETHODCALLTYPE get_Left(long *pl);
|
virtual HRESULT STDMETHODCALLTYPE get_Left(long *pl);
|
||||||
|
@ -552,7 +552,7 @@ public:
|
||||||
virtual HRESULT STDMETHODCALLTYPE put_Width(long Width);
|
virtual HRESULT STDMETHODCALLTYPE put_Width(long Width);
|
||||||
virtual HRESULT STDMETHODCALLTYPE get_Height(long *pl);
|
virtual HRESULT STDMETHODCALLTYPE get_Height(long *pl);
|
||||||
virtual HRESULT STDMETHODCALLTYPE put_Height(long Height);
|
virtual HRESULT STDMETHODCALLTYPE put_Height(long Height);
|
||||||
#ifdef __WIDL_EXDISP_H
|
#ifdef __exdisp_h__
|
||||||
#undef long
|
#undef long
|
||||||
#endif
|
#endif
|
||||||
virtual HRESULT STDMETHODCALLTYPE get_LocationName(BSTR *LocationName);
|
virtual HRESULT STDMETHODCALLTYPE get_LocationName(BSTR *LocationName);
|
||||||
|
@ -2537,7 +2537,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::get_Type(BSTR *Type)
|
||||||
{
|
{
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
#ifdef __WIDL_EXDISP_H
|
#ifdef __exdisp_h__
|
||||||
#define long LONG
|
#define long LONG
|
||||||
#endif
|
#endif
|
||||||
HRESULT STDMETHODCALLTYPE CShellBrowser::get_Left(long *pl)
|
HRESULT STDMETHODCALLTYPE CShellBrowser::get_Left(long *pl)
|
||||||
|
|
|
@ -435,7 +435,7 @@ typedef enum tagHH_GPROPID {
|
||||||
HH_GPROPID_CONTENT_LANGUAGE = 5
|
HH_GPROPID_CONTENT_LANGUAGE = 5
|
||||||
} HH_GPROPID;
|
} HH_GPROPID;
|
||||||
|
|
||||||
#ifdef __WIDL_OAIDL_H
|
#ifdef __oaidl_h__
|
||||||
|
|
||||||
typedef struct tagHH_GLOBAL_PROPERTY
|
typedef struct tagHH_GLOBAL_PROPERTY
|
||||||
{
|
{
|
||||||
|
@ -443,7 +443,7 @@ typedef struct tagHH_GLOBAL_PROPERTY
|
||||||
VARIANT var;
|
VARIANT var;
|
||||||
} HH_GLOBAL_PROPERTY ;
|
} HH_GLOBAL_PROPERTY ;
|
||||||
|
|
||||||
#endif /* __WIDL_OAIDL_H */
|
#endif /* __oaidl_h__ */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,69 @@
|
||||||
#endif
|
#endif
|
||||||
#endif /* __ANONYMOUS_DEFINED */
|
#endif /* __ANONYMOUS_DEFINED */
|
||||||
|
|
||||||
|
#undef __C89_NAMELESS
|
||||||
|
#undef __C89_NAMELESSSTRUCTNAME
|
||||||
|
#undef __C89_NAMELESSSTRUCTNAME1
|
||||||
|
#undef __C89_NAMELESSSTRUCTNAME2
|
||||||
|
#undef __C89_NAMELESSSTRUCTNAME3
|
||||||
|
#undef __C89_NAMELESSSTRUCTNAME4
|
||||||
|
#undef __C89_NAMELESSSTRUCTNAME5
|
||||||
|
#undef __C89_NAMELESSUNIONNAME
|
||||||
|
#undef __C89_NAMELESSUNIONNAME1
|
||||||
|
#undef __C89_NAMELESSUNIONNAME2
|
||||||
|
#undef __C89_NAMELESSUNIONNAME3
|
||||||
|
#undef __C89_NAMELESSUNIONNAME4
|
||||||
|
#undef __C89_NAMELESSUNIONNAME5
|
||||||
|
#undef __C89_NAMELESSUNIONNAME6
|
||||||
|
#undef __C89_NAMELESSUNIONNAME7
|
||||||
|
#undef __C89_NAMELESSUNIONNAME8
|
||||||
|
|
||||||
|
#if !defined(__WINESRC__) && !defined(WINE_NO_NAMELESS_EXTENSION)
|
||||||
|
# ifdef __GNUC__
|
||||||
|
/* Anonymous structs support starts with gcc 2.96/g++ 2.95 */
|
||||||
|
# if (__GNUC__ > 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ > 95) || ((__GNUC_MINOR__ == 95) && defined(__cplusplus))))
|
||||||
|
# define __C89_NAMELESS __extension__
|
||||||
|
# endif
|
||||||
|
# elif defined(_MSC_VER)
|
||||||
|
# define __C89_NAMELESS
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __C89_NAMELESS
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME1
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME2
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME3
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME4
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME5
|
||||||
|
# define __C89_NAMELESSUNIONNAME
|
||||||
|
# define __C89_NAMELESSUNIONNAME1
|
||||||
|
# define __C89_NAMELESSUNIONNAME2
|
||||||
|
# define __C89_NAMELESSUNIONNAME3
|
||||||
|
# define __C89_NAMELESSUNIONNAME4
|
||||||
|
# define __C89_NAMELESSUNIONNAME5
|
||||||
|
# define __C89_NAMELESSUNIONNAME6
|
||||||
|
# define __C89_NAMELESSUNIONNAME7
|
||||||
|
# define __C89_NAMELESSUNIONNAME8
|
||||||
|
#else
|
||||||
|
# define __C89_NAMELESS
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME DUMMYSTRUCTNAME
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME1 DUMMYSTRUCTNAME1
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME2 DUMMYSTRUCTNAME2
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME3 DUMMYSTRUCTNAME3
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME4 DUMMYSTRUCTNAME4
|
||||||
|
# define __C89_NAMELESSSTRUCTNAME5 DUMMYSTRUCTNAME5
|
||||||
|
# define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME
|
||||||
|
# define __C89_NAMELESSUNIONNAME1 DUMMYUNIONNAME1
|
||||||
|
# define __C89_NAMELESSUNIONNAME2 DUMMYUNIONNAME2
|
||||||
|
# define __C89_NAMELESSUNIONNAME3 DUMMYUNIONNAME3
|
||||||
|
# define __C89_NAMELESSUNIONNAME4 DUMMYUNIONNAME4
|
||||||
|
# define __C89_NAMELESSUNIONNAME5 DUMMYUNIONNAME5
|
||||||
|
# define __C89_NAMELESSUNIONNAME6 DUMMYUNIONNAME6
|
||||||
|
# define __C89_NAMELESSUNIONNAME7 DUMMYUNIONNAME7
|
||||||
|
# define __C89_NAMELESSUNIONNAME8 DUMMYUNIONNAME8
|
||||||
|
#endif
|
||||||
|
|
||||||
#define UNREFERENCED_PARAMETER(P) {(P)=(P);}
|
#define UNREFERENCED_PARAMETER(P) {(P)=(P);}
|
||||||
#define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
|
#define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
|
||||||
#define DBG_UNREFERENCED_PARAMETER(P)
|
#define DBG_UNREFERENCED_PARAMETER(P)
|
||||||
|
|
|
@ -167,21 +167,67 @@ const char *get_name(const var_t *v)
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_field(FILE *h, var_t *v)
|
|
||||||
{
|
|
||||||
if (!v) return;
|
|
||||||
if (v->type) {
|
|
||||||
indent(h, 0);
|
|
||||||
write_type_def_or_decl(h, v->type, TRUE, v->name);
|
|
||||||
fprintf(h, ";\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void write_fields(FILE *h, var_list_t *fields)
|
static void write_fields(FILE *h, var_list_t *fields)
|
||||||
{
|
{
|
||||||
|
unsigned nameless_struct_cnt = 0, nameless_struct_i = 0, nameless_union_cnt = 0, nameless_union_i = 0;
|
||||||
|
const char *name;
|
||||||
|
char buf[32];
|
||||||
var_t *v;
|
var_t *v;
|
||||||
|
|
||||||
if (!fields) return;
|
if (!fields) return;
|
||||||
LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) write_field(h, v);
|
|
||||||
|
LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) {
|
||||||
|
if (!v || !v->type) continue;
|
||||||
|
|
||||||
|
switch(type_get_type_detect_alias(v->type)) {
|
||||||
|
case TYPE_STRUCT:
|
||||||
|
case TYPE_ENCAPSULATED_UNION:
|
||||||
|
nameless_struct_cnt++;
|
||||||
|
break;
|
||||||
|
case TYPE_UNION:
|
||||||
|
nameless_union_cnt++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) {
|
||||||
|
if (!v || !v->type) continue;
|
||||||
|
|
||||||
|
indent(h, 0);
|
||||||
|
name = v->name;
|
||||||
|
|
||||||
|
switch(type_get_type_detect_alias(v->type)) {
|
||||||
|
case TYPE_STRUCT:
|
||||||
|
case TYPE_ENCAPSULATED_UNION:
|
||||||
|
if(!v->name) {
|
||||||
|
fprintf(h, "__C89_NAMELESS ");
|
||||||
|
if(nameless_struct_cnt == 1) {
|
||||||
|
name = "__C89_NAMELESSSTRUCTNAME";
|
||||||
|
}else if(nameless_struct_i < 5 /* # of supporting macros */) {
|
||||||
|
sprintf(buf, "__C89_NAMELESSSTRUCTNAME%d", ++nameless_struct_i);
|
||||||
|
name = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_UNION:
|
||||||
|
if(!v->name) {
|
||||||
|
fprintf(h, "__C89_NAMELESS ");
|
||||||
|
if(nameless_union_cnt == 1) {
|
||||||
|
name = "__C89_NAMELESSUNIONNAME";
|
||||||
|
}else if(nameless_union_i < 8 /* # of supporting macros */ ) {
|
||||||
|
sprintf(buf, "__C89_NAMELESSUNIONNAME%d", ++nameless_union_i);
|
||||||
|
name = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
write_type_def_or_decl(h, v->type, TRUE, name);
|
||||||
|
fprintf(h, ";\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_enums(FILE *h, var_list_t *enums)
|
static void write_enums(FILE *h, var_list_t *enums)
|
||||||
|
@ -1371,8 +1417,8 @@ void write_header(const statement_list_t *stmts)
|
||||||
fprintf(header, "#include <ole2.h>\n");
|
fprintf(header, "#include <ole2.h>\n");
|
||||||
fprintf(header, "#endif\n\n");
|
fprintf(header, "#endif\n\n");
|
||||||
|
|
||||||
fprintf(header, "#ifndef __WIDL_%s\n", header_token);
|
fprintf(header, "#ifndef __%s__\n", header_token);
|
||||||
fprintf(header, "#define __WIDL_%s\n\n", header_token);
|
fprintf(header, "#define __%s__\n\n", header_token);
|
||||||
|
|
||||||
fprintf(header, "/* Forward declarations */\n\n");
|
fprintf(header, "/* Forward declarations */\n\n");
|
||||||
write_forward_decls(header, stmts);
|
write_forward_decls(header, stmts);
|
||||||
|
@ -1394,7 +1440,7 @@ void write_header(const statement_list_t *stmts)
|
||||||
fprintf(header, "\n");
|
fprintf(header, "\n");
|
||||||
|
|
||||||
end_cplusplus_guard(header);
|
end_cplusplus_guard(header);
|
||||||
fprintf(header, "#endif /* __WIDL_%s */\n", header_token);
|
fprintf(header, "#endif /* __%s__ */\n", header_token);
|
||||||
|
|
||||||
fclose(header);
|
fclose(header);
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -740,6 +740,10 @@ s_field: m_attributes decl_spec declarator { $$ = declare_var(check_field_attrs
|
||||||
$2, $3, FALSE);
|
$2, $3, FALSE);
|
||||||
free($3);
|
free($3);
|
||||||
}
|
}
|
||||||
|
| m_attributes structdef { var_t *v = make_var(NULL);
|
||||||
|
v->type = $2; v->attrs = $1;
|
||||||
|
$$ = v;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
funcdef: declaration { $$ = $1;
|
funcdef: declaration { $$ = $1;
|
||||||
|
|
|
@ -56,6 +56,7 @@ static const char usage[] =
|
||||||
" -d n Set debug level to 'n'\n"
|
" -d n Set debug level to 'n'\n"
|
||||||
" -D id[=val] Define preprocessor identifier id=val\n"
|
" -D id[=val] Define preprocessor identifier id=val\n"
|
||||||
" -E Preprocess only\n"
|
" -E Preprocess only\n"
|
||||||
|
" --help Display this help and exit\n"
|
||||||
" -h Generate headers\n"
|
" -h Generate headers\n"
|
||||||
" -H file Name of header file (default is infile.h)\n"
|
" -H file Name of header file (default is infile.h)\n"
|
||||||
" -I path Set include search dir to path (multiple -I allowed)\n"
|
" -I path Set include search dir to path (multiple -I allowed)\n"
|
||||||
|
@ -128,7 +129,6 @@ char *server_token;
|
||||||
char *regscript_name;
|
char *regscript_name;
|
||||||
char *regscript_token;
|
char *regscript_token;
|
||||||
static char *idfile_name;
|
static char *idfile_name;
|
||||||
static char *idfile_token;
|
|
||||||
char *temp_name;
|
char *temp_name;
|
||||||
const char *prefix_client = "";
|
const char *prefix_client = "";
|
||||||
const char *prefix_server = "";
|
const char *prefix_server = "";
|
||||||
|
@ -150,6 +150,7 @@ enum {
|
||||||
PREFIX_ALL_OPTION,
|
PREFIX_ALL_OPTION,
|
||||||
PREFIX_CLIENT_OPTION,
|
PREFIX_CLIENT_OPTION,
|
||||||
PREFIX_SERVER_OPTION,
|
PREFIX_SERVER_OPTION,
|
||||||
|
PRINT_HELP,
|
||||||
WIN32_OPTION,
|
WIN32_OPTION,
|
||||||
WIN64_OPTION,
|
WIN64_OPTION,
|
||||||
WIN32_ALIGN_OPTION,
|
WIN32_ALIGN_OPTION,
|
||||||
|
@ -161,6 +162,7 @@ static const char short_options[] =
|
||||||
static const struct option long_options[] = {
|
static const struct option long_options[] = {
|
||||||
{ "dlldata", 1, NULL, DLLDATA_OPTION },
|
{ "dlldata", 1, NULL, DLLDATA_OPTION },
|
||||||
{ "dlldata-only", 0, NULL, DLLDATA_ONLY_OPTION },
|
{ "dlldata-only", 0, NULL, DLLDATA_ONLY_OPTION },
|
||||||
|
{ "help", 0, NULL, PRINT_HELP },
|
||||||
{ "local-stubs", 1, NULL, LOCAL_STUBS_OPTION },
|
{ "local-stubs", 1, NULL, LOCAL_STUBS_OPTION },
|
||||||
{ "oldnames", 0, NULL, OLDNAMES_OPTION },
|
{ "oldnames", 0, NULL, OLDNAMES_OPTION },
|
||||||
{ "output", 0, NULL, 'o' },
|
{ "output", 0, NULL, 'o' },
|
||||||
|
@ -198,7 +200,7 @@ static char *make_token(const char *name)
|
||||||
token = xstrdup(name);
|
token = xstrdup(name);
|
||||||
for (i=0; token[i]; i++) {
|
for (i=0; token[i]; i++) {
|
||||||
if (!isalnum(token[i])) token[i] = '_';
|
if (!isalnum(token[i])) token[i] = '_';
|
||||||
else token[i] = toupper(token[i]);
|
else token[i] = tolower(token[i]);
|
||||||
}
|
}
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
@ -465,8 +467,6 @@ void write_id_data(const statement_list_t *stmts)
|
||||||
{
|
{
|
||||||
if (!do_idfile) return;
|
if (!do_idfile) return;
|
||||||
|
|
||||||
idfile_token = make_token(idfile_name);
|
|
||||||
|
|
||||||
idfile = fopen(idfile_name, "w");
|
idfile = fopen(idfile_name, "w");
|
||||||
if (! idfile) {
|
if (! idfile) {
|
||||||
error("Could not open %s for output\n", idfile_name);
|
error("Could not open %s for output\n", idfile_name);
|
||||||
|
@ -529,6 +529,9 @@ int main(int argc,char *argv[])
|
||||||
case PREFIX_SERVER_OPTION:
|
case PREFIX_SERVER_OPTION:
|
||||||
prefix_server = xstrdup(optarg);
|
prefix_server = xstrdup(optarg);
|
||||||
break;
|
break;
|
||||||
|
case PRINT_HELP:
|
||||||
|
fprintf(stderr, "%s", usage);
|
||||||
|
return 0;
|
||||||
case WIN32_OPTION:
|
case WIN32_OPTION:
|
||||||
do_win32 = 1;
|
do_win32 = 1;
|
||||||
do_win64 = 0;
|
do_win64 = 0;
|
||||||
|
@ -640,6 +643,10 @@ int main(int argc,char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEFAULT_INCLUDE_DIR
|
||||||
|
wpp_add_include_path(DEFAULT_INCLUDE_DIR);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(do_everything) {
|
if(do_everything) {
|
||||||
set_everything(TRUE);
|
set_everything(TRUE);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue