widl: Handle "midl_pragma warning" statement in parser.
Signed-off-by: Sergei Bolotov <bolotov.s.s@yandex.ru> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
044baef529
commit
646dfe746d
|
@ -164,6 +164,7 @@ UUID *parse_uuid(const char *u)
|
||||||
yy_pop_state();
|
yy_pop_state();
|
||||||
}
|
}
|
||||||
<PP_PRAGMA>[^\n]* parser_lval.str = xstrdup(yytext); yy_pop_state(); return aPRAGMA;
|
<PP_PRAGMA>[^\n]* parser_lval.str = xstrdup(yytext); yy_pop_state(); return aPRAGMA;
|
||||||
|
<INITIAL>^{ws}*midl_pragma{ws}+warning return tPRAGMA_WARNING;
|
||||||
<INITIAL,ATTR>\" yy_push_state(QUOTE); cbufidx = 0;
|
<INITIAL,ATTR>\" yy_push_state(QUOTE); cbufidx = 0;
|
||||||
<QUOTE>\" {
|
<QUOTE>\" {
|
||||||
yy_pop_state();
|
yy_pop_state();
|
||||||
|
|
|
@ -83,6 +83,7 @@ static declarator_t *make_declarator(var_t *var);
|
||||||
static type_t *make_safearray(type_t *type);
|
static type_t *make_safearray(type_t *type);
|
||||||
static typelib_t *make_library(const char *name, const attr_list_t *attrs);
|
static typelib_t *make_library(const char *name, const attr_list_t *attrs);
|
||||||
static type_t *append_ptrchain_type(type_t *ptrchain, type_t *type);
|
static type_t *append_ptrchain_type(type_t *ptrchain, type_t *type);
|
||||||
|
static warning_list_t *append_warning(warning_list_t *, int);
|
||||||
|
|
||||||
static type_t *reg_typedefs(decl_spec_t *decl_spec, var_list_t *names, attr_list_t *attrs);
|
static type_t *reg_typedefs(decl_spec_t *decl_spec, var_list_t *names, attr_list_t *attrs);
|
||||||
static type_t *find_type_or_error(const char *name, int t);
|
static type_t *find_type_or_error(const char *name, int t);
|
||||||
|
@ -148,6 +149,8 @@ static struct namespace *current_namespace = &global_namespace;
|
||||||
declarator_list_t *declarator_list;
|
declarator_list_t *declarator_list;
|
||||||
statement_t *statement;
|
statement_t *statement;
|
||||||
statement_list_t *stmt_list;
|
statement_list_t *stmt_list;
|
||||||
|
warning_t *warning;
|
||||||
|
warning_list_t *warning_list;
|
||||||
ifref_t *ifref;
|
ifref_t *ifref;
|
||||||
ifref_list_t *ifref_list;
|
ifref_list_t *ifref_list;
|
||||||
char *str;
|
char *str;
|
||||||
|
@ -224,6 +227,7 @@ static struct namespace *current_namespace = &global_namespace;
|
||||||
%token tOUT
|
%token tOUT
|
||||||
%token tPARTIALIGNORE tPASCAL
|
%token tPARTIALIGNORE tPASCAL
|
||||||
%token tPOINTERDEFAULT
|
%token tPOINTERDEFAULT
|
||||||
|
%token tPRAGMA_WARNING
|
||||||
%token tPROGID tPROPERTIES
|
%token tPROGID tPROPERTIES
|
||||||
%token tPROPGET tPROPPUT tPROPPUTREF
|
%token tPROPGET tPROPPUT tPROPPUTREF
|
||||||
%token tPROXY tPTR
|
%token tPROXY tPTR
|
||||||
|
@ -291,8 +295,9 @@ static struct namespace *current_namespace = &global_namespace;
|
||||||
%type <uuid> uuid_string
|
%type <uuid> uuid_string
|
||||||
%type <import> import_start
|
%type <import> import_start
|
||||||
%type <typelib> library_start librarydef
|
%type <typelib> library_start librarydef
|
||||||
%type <statement> statement typedef
|
%type <statement> statement typedef pragma_warning
|
||||||
%type <stmt_list> gbl_statements imp_statements int_statements
|
%type <stmt_list> gbl_statements imp_statements int_statements
|
||||||
|
%type <warning_list> warnings
|
||||||
|
|
||||||
%left ','
|
%left ','
|
||||||
%right '?' ':'
|
%right '?' ':'
|
||||||
|
@ -373,6 +378,15 @@ statement:
|
||||||
| import { $$ = make_statement_import($1); }
|
| import { $$ = make_statement_import($1); }
|
||||||
| typedef ';' { $$ = $1; }
|
| typedef ';' { $$ = $1; }
|
||||||
| aPRAGMA { $$ = make_statement_pragma($1); }
|
| aPRAGMA { $$ = make_statement_pragma($1); }
|
||||||
|
| pragma_warning { $$ = NULL; }
|
||||||
|
;
|
||||||
|
|
||||||
|
pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')' { $$ = NULL; }
|
||||||
|
;
|
||||||
|
|
||||||
|
warnings:
|
||||||
|
aNUM { $$ = append_warning(NULL, $1); }
|
||||||
|
| warnings aNUM { $$ = append_warning($1, $2); }
|
||||||
;
|
;
|
||||||
|
|
||||||
typedecl:
|
typedecl:
|
||||||
|
@ -1413,6 +1427,21 @@ static type_t *append_ptrchain_type(type_t *ptrchain, type_t *type)
|
||||||
return ptrchain;
|
return ptrchain;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static warning_list_t *append_warning(warning_list_t *list, int num)
|
||||||
|
{
|
||||||
|
warning_t *entry;
|
||||||
|
|
||||||
|
if(!list)
|
||||||
|
{
|
||||||
|
list = xmalloc( sizeof(*list) );
|
||||||
|
list_init( list );
|
||||||
|
}
|
||||||
|
entry = xmalloc( sizeof(*entry) );
|
||||||
|
entry->num = num;
|
||||||
|
list_add_tail( list, &entry->entry );
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl,
|
static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl,
|
||||||
int top)
|
int top)
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,6 +51,7 @@ typedef struct _user_type_t context_handle_t;
|
||||||
typedef struct _user_type_t generic_handle_t;
|
typedef struct _user_type_t generic_handle_t;
|
||||||
typedef struct _type_list_t type_list_t;
|
typedef struct _type_list_t type_list_t;
|
||||||
typedef struct _statement_t statement_t;
|
typedef struct _statement_t statement_t;
|
||||||
|
typedef struct _warning_t warning_t;
|
||||||
|
|
||||||
typedef struct list attr_list_t;
|
typedef struct list attr_list_t;
|
||||||
typedef struct list str_list_t;
|
typedef struct list str_list_t;
|
||||||
|
@ -63,6 +64,7 @@ typedef struct list user_type_list_t;
|
||||||
typedef struct list context_handle_list_t;
|
typedef struct list context_handle_list_t;
|
||||||
typedef struct list generic_handle_list_t;
|
typedef struct list generic_handle_list_t;
|
||||||
typedef struct list statement_list_t;
|
typedef struct list statement_list_t;
|
||||||
|
typedef struct list warning_list_t;
|
||||||
|
|
||||||
enum attr_type
|
enum attr_type
|
||||||
{
|
{
|
||||||
|
@ -538,6 +540,11 @@ struct _statement_t {
|
||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _warning_t {
|
||||||
|
int num;
|
||||||
|
struct list entry;
|
||||||
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SYS_WIN16,
|
SYS_WIN16,
|
||||||
SYS_WIN32,
|
SYS_WIN32,
|
||||||
|
|
Loading…
Reference in New Issue