* Sync with Wine 1.7.1.

svn path=/trunk/; revision=60092
This commit is contained in:
Amine Khaldi 2013-09-14 09:02:13 +00:00
parent ab785e9440
commit dd79f09da8
11 changed files with 626 additions and 554 deletions

View file

@ -29,12 +29,12 @@ struct wpp_callbacks
/* I/O callbacks */
/* Looks for a file to include, returning the path where it is found */
/* parent_name is the directory of the parent source file (for local
* includes), includepath is an array of additional include paths */
char *(*lookup)( const char *filename, const char *parent_name,
/* The type param is true for local (#include "filename.h") includes */
/* parent_name is the directory of the parent source file, includepath
* is an array of additional include paths */
char *(*lookup)( const char *filename, int type, const char *parent_name,
char **include_path, int include_path_count );
/* Opens an include file */
/* The type param is true if it is a local ("...") include */
void *(*open)( const char *filename, int type );
/* Closes a previously opened file */
void (*close)( void *file );

View file

@ -23,7 +23,7 @@ The following build tools are shared with Wine.
reactos/tools/unicode # Synced to Wine-1.5.19
reactos/tools/widl # Synced to Wine-1.5.11
reactos/tools/wpp # Synced to Wine-1.3.26
reactos/tools/wpp # Synced to Wine-1.7.1
The following libraries are shared with Wine.

View file

@ -13,9 +13,9 @@ if(MSVC)
endif()
list(APPEND SOURCE
lex.yy.c
preproc.c
wpp.c
ppl.yy.c
ppy.tab.c)
add_library(wpp ${SOURCE})

View file

@ -329,6 +329,7 @@ void pp_writestring(const char *format, ...)
va_start(valist, format);
len = vsnprintf(buffer, buffercapacity,
format, valist);
va_end(valist);
/* If the string is longer than buffersize, vsnprintf returns
* the string length with glibc >= 2.1, -1 with glibc < 2.1 */
while(len > buffercapacity || len < 0)
@ -345,10 +346,11 @@ void pp_writestring(const char *format, ...)
return;
}
buffer = new_buffer;
va_start(valist, format);
len = vsnprintf(buffer, buffercapacity,
format, valist);
va_end(valist);
}
va_end(valist);
wpp_callbacks->write(buffer, len);
}
@ -772,7 +774,10 @@ void pp_writestring(const char *format, ...)
if(!bep)
{
if(YY_START != INITIAL)
{
ppy_error("Unexpected end of file during preprocessing");
BEGIN(INITIAL);
}
yyterminate();
}
else if(bep->should_pop == 2)
@ -1596,7 +1601,7 @@ void pp_do_include(char *fname, int type)
/* Undo the effect of the quotation */
fname[n-1] = '\0';
if((fp = pp_open_include(fname+1, type ? pp_status.input : NULL, &newpath)) == NULL)
if((fp = pp_open_include(fname+1, type, pp_status.input, &newpath)) == NULL)
{
ppy_error("Unable to open include file %s", fname+1);
return;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,8 @@
/* A Bison parser, made by GNU Bison 2.4.2. */
/* A Bison parser, made by GNU Bison 2.5. */
/* Skeleton interface for Bison's Yacc-like parsers in C
/* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
Foundation, Inc.
Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -90,7 +89,7 @@
typedef union YYSTYPE
{
/* Line 1685 of yacc.c */
/* Line 2068 of yacc.c */
#line 126 "ppy.y"
int sint;
@ -107,8 +106,8 @@ typedef union YYSTYPE
/* Line 1685 of yacc.c */
#line 112 "ppy.tab.h"
/* Line 2068 of yacc.c */
#line 111 "ppy.tab.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */

View file

@ -383,24 +383,24 @@ pp_expr : tSINT { $$.type = cv_sint; $$.val.si = $1; }
| tIDENT { $$.type = cv_sint; $$.val.si = 0; }
| pp_expr tLOGOR pp_expr { $$.type = cv_sint; $$.val.si = boolean(&$1) || boolean(&$3); }
| pp_expr tLOGAND pp_expr { $$.type = cv_sint; $$.val.si = boolean(&$1) && boolean(&$3); }
| pp_expr tEQ pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, ==) }
| pp_expr tNE pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, !=) }
| pp_expr '<' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <) }
| pp_expr '>' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >) }
| pp_expr tLTE pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <=) }
| pp_expr tGTE pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >=) }
| pp_expr '+' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, +) }
| pp_expr '-' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, -) }
| pp_expr '^' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, ^) }
| pp_expr '&' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, &) }
| pp_expr '|' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, |) }
| pp_expr '*' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, *) }
| pp_expr '/' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, /) }
| pp_expr tLSHIFT pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <<) }
| pp_expr tRSHIFT pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >>) }
| pp_expr tEQ pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, ==); }
| pp_expr tNE pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, !=); }
| pp_expr '<' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <); }
| pp_expr '>' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >); }
| pp_expr tLTE pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <=); }
| pp_expr tGTE pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >=); }
| pp_expr '+' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, +); }
| pp_expr '-' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, -); }
| pp_expr '^' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, ^); }
| pp_expr '&' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, &); }
| pp_expr '|' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, |); }
| pp_expr '*' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, *); }
| pp_expr '/' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, /); }
| pp_expr tLSHIFT pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <<); }
| pp_expr tRSHIFT pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >>); }
| '+' pp_expr { $$ = $2; }
| '-' pp_expr { UNARY_OP($$, $2, -) }
| '~' pp_expr { UNARY_OP($$, $2, ~) }
| '-' pp_expr { UNARY_OP($$, $2, -); }
| '~' pp_expr { UNARY_OP($$, $2, ~); }
| '!' pp_expr { $$.type = cv_sint; $$.val.si = !boolean(&$2); }
| '(' pp_expr ')' { $$ = $2; }
| pp_expr '?' pp_expr ':' pp_expr { $$ = boolean(&$1) ? $3 : $5; }

View file

@ -115,7 +115,7 @@ char *pp_xstrdup(const char *str)
return memcpy(s, str, len);
}
static char *wpp_default_lookup(const char *name, const char *parent_name,
static char *wpp_default_lookup(const char *name, int type, const char *parent_name,
char **include_path, int include_path_count)
{
char *cpy;
@ -144,7 +144,7 @@ static char *wpp_default_lookup(const char *name, const char *parent_name,
}
*cptr = '\0';
if(parent_name)
if(type && parent_name)
{
/* Search directory of parent include and then -I path */
const char *p;
@ -507,17 +507,17 @@ int wpp_add_include_path(const char *path)
char *wpp_find_include(const char *name, const char *parent_name)
{
return wpp_default_lookup(name, parent_name, includepath, nincludepath);
return wpp_default_lookup(name, !!parent_name, parent_name, includepath, nincludepath);
}
void *pp_open_include(const char *name, const char *parent_name, char **newpath)
void *pp_open_include(const char *name, int type, const char *parent_name, char **newpath)
{
char *path;
void *fp;
if (!(path = wpp_callbacks->lookup(name, parent_name, includepath,
if (!(path = wpp_callbacks->lookup(name, type, parent_name, includepath,
nincludepath))) return NULL;
fp = wpp_callbacks->open(path, parent_name == NULL ? 1 : 0);
fp = wpp_callbacks->open(path, type);
if (fp)
{

View file

@ -49,6 +49,16 @@ static void add_cmdline_defines(void)
}
}
static void del_cmdline_defines(void)
{
struct define *def;
for (def = cmdline_defines; def; def = def->next)
{
if (def->value) pp_del_define( def->name );
}
}
static void add_special_defines(void)
{
time_t now = time(NULL);
@ -70,6 +80,14 @@ static void add_special_defines(void)
ppp->type = def_special;
}
static void del_special_defines(void)
{
pp_del_define( "__DATE__" );
pp_del_define( "__TIME__" );
pp_del_define( "__FILE__" );
pp_del_define( "__LINE__" );
}
/* add a define to the preprocessor list */
int wpp_add_define( const char *name, const char *value )
@ -182,6 +200,8 @@ int wpp_parse( const char *input, FILE *output )
else if (!(pp_status.file = wpp_callbacks->open(input, 1)))
{
ppy_error("Could not open %s\n", input);
del_special_defines();
del_cmdline_defines();
pp_pop_define_state();
return 2;
}
@ -198,6 +218,8 @@ int wpp_parse( const char *input, FILE *output )
if (input) wpp_callbacks->close(pp_status.file);
/* Clean if_stack, it could remain dirty on errors */
while (pp_get_if_depth()) pp_pop_if();
del_special_defines();
del_cmdline_defines();
pp_pop_define_state();
return ret;
}

View file

@ -207,7 +207,7 @@ void pp_pop_define_state(void);
pp_entry_t *pp_add_define(const char *def, const char *text);
pp_entry_t *pp_add_macro(char *ident, marg_t *args[], int nargs, mtext_t *exp);
void pp_del_define(const char *name);
void *pp_open_include(const char *name, const char *parent_name, char **newpath);
void *pp_open_include(const char *name, int type, const char *parent_name, char **newpath);
void pp_push_if(pp_if_state_t s);
void pp_next_if_state(int);
pp_if_state_t pp_pop_if(void);