cpphash.h (U): New define, to correct type of string constants.
gcc: * cpphash.h (U): New define, to correct type of string constants. (ustrcmp, ustrncmp, ustrlen, uxstrdup, ustrchr): New wrapper routines, to do casts when passing unsigned strings to libc. * cppexp.c, cppfiles.c, cpphash.c, cppinit.c, cpplib.c: Use them. * cppfiles.c (_cpp_execute_include): Make filename an U_CHAR *. * cpphash.c (_cpp_quote_string): Make string an U_CHAR *. * cppinit.c (dump_special_to_buffer): Make macro name an U_CHAR *. * cpplex.c (parse_ifdef, parse_include, validate_else): Make second argument an U_CHAR *. * cppinit.c (builtin_array): Make name and value U_CHAR *, add length field, clean up initializer. (ISTABLE): Add __extension__ to designated- initializers version. * cpplex.c (CHARTAB): Likewise. * mbchar.c: Add dummy external declaration to the !MULTIBYTE_CHARS case so the file won't be empty. include: * symcat.h: Remove #endif label. From-SVN: r33657
This commit is contained in:
parent
22a8784041
commit
12cf91fef0
@ -1,3 +1,25 @@
|
||||
2000-05-03 Zack Weinberg <zack@wolery.cumb.org>
|
||||
|
||||
* cpphash.h (U): New define, to correct type of string constants.
|
||||
(ustrcmp, ustrncmp, ustrlen, uxstrdup, ustrchr): New wrapper
|
||||
routines, to do casts when passing unsigned strings to libc.
|
||||
* cppexp.c, cppfiles.c, cpphash.c, cppinit.c, cpplib.c: Use them.
|
||||
|
||||
* cppfiles.c (_cpp_execute_include): Make filename an U_CHAR *.
|
||||
* cpphash.c (_cpp_quote_string): Make string an U_CHAR *.
|
||||
* cppinit.c (dump_special_to_buffer): Make macro name an U_CHAR *.
|
||||
* cpplex.c (parse_ifdef, parse_include, validate_else): Make
|
||||
second argument an U_CHAR *.
|
||||
|
||||
* cppinit.c (builtin_array): Make name and value U_CHAR *, add
|
||||
length field, clean up initializer.
|
||||
(ISTABLE): Add __extension__ to designated-
|
||||
initializers version.
|
||||
* cpplex.c (CHARTAB): Likewise.
|
||||
|
||||
* mbchar.c: Add dummy external declaration to the !MULTIBYTE_CHARS
|
||||
case so the file won't be empty.
|
||||
|
||||
Wed May 3 21:01:46 2000 Jason Eckhardt <jle@cygnus.com>
|
||||
|
||||
* bb-reorder.c (struct reorder_block_def): Member succ removed.
|
||||
@ -175,7 +197,6 @@ Wed May 3 12:40:53 2000 Clinton Popetz <cpopetz@cygnus.com>
|
||||
* rtl.def (define_insn_and_split): New DEF_RTL_EXPR.
|
||||
* md.texi (Insn Splitting): Document define_insn_and_split.
|
||||
|
||||
>>>>>>> 1.6464
|
||||
Tue May 2 00:20:30 2000 Jason Eckhardt <jle@cygnus.com>
|
||||
|
||||
* flow.c (verify_flow_info): Added two more sanity checks. The
|
||||
|
@ -313,7 +313,7 @@ parse_charconst (pfile, start, end)
|
||||
/* If char type is signed, sign-extend the constant. */
|
||||
num_bits = num_chars * width;
|
||||
|
||||
if (cpp_defined (pfile, (const U_CHAR *)"__CHAR_UNSIGNED__",
|
||||
if (cpp_defined (pfile, U"__CHAR_UNSIGNED__",
|
||||
sizeof ("__CHAR_UNSIGNED__")-1)
|
||||
|| ((result >> (num_bits - 1)) & 1) == 0)
|
||||
op.value = result & ((unsigned HOST_WIDEST_INT) ~0
|
||||
@ -439,7 +439,7 @@ lex (pfile, skip_evaluation)
|
||||
return parse_charconst (pfile, tok_start, tok_end);
|
||||
|
||||
case CPP_NAME:
|
||||
if (!strncmp (tok_start, "defined", 7))
|
||||
if (!ustrncmp (tok_start, U"defined", 7))
|
||||
return parse_defined (pfile);
|
||||
|
||||
op.op = INT;
|
||||
|
@ -74,8 +74,8 @@ eq_IHASH (x, y)
|
||||
const void *x;
|
||||
const void *y;
|
||||
{
|
||||
const U_CHAR *a = ((const IHASH *)x)->nshort;
|
||||
const U_CHAR *b = ((const IHASH *)y)->nshort;
|
||||
const char *a = ((const IHASH *)x)->nshort;
|
||||
const char *b = ((const IHASH *)y)->nshort;
|
||||
return !strcmp (a, b);
|
||||
}
|
||||
|
||||
@ -132,7 +132,7 @@ redundant_include_p (pfile, ihash, ilist)
|
||||
return (i->control_macro
|
||||
&& (i->control_macro[0] == '\0'
|
||||
|| cpp_defined (pfile, i->control_macro,
|
||||
strlen (i->control_macro))))
|
||||
ustrlen (i->control_macro))))
|
||||
? (IHASH *)-1 : i;
|
||||
|
||||
return 0;
|
||||
@ -147,7 +147,7 @@ cpp_included (pfile, fname)
|
||||
{
|
||||
IHASH dummy, *ptr;
|
||||
dummy.nshort = fname;
|
||||
dummy.hash = _cpp_calc_hash (fname, strlen (fname));
|
||||
dummy.hash = _cpp_calc_hash ((const U_CHAR *)fname, strlen (fname));
|
||||
ptr = htab_find_with_hash (pfile->all_include_files,
|
||||
(const void *)&dummy, dummy.hash);
|
||||
return (ptr != NULL);
|
||||
@ -237,7 +237,7 @@ find_include_file (pfile, fname, search_start, ihash, before)
|
||||
char *name;
|
||||
|
||||
dummy.nshort = fname;
|
||||
dummy.hash = _cpp_calc_hash (fname, strlen (fname));
|
||||
dummy.hash = _cpp_calc_hash ((const U_CHAR *)fname, strlen (fname));
|
||||
path = (fname[0] == '/') ? ABSOLUTE_PATH : search_start;
|
||||
slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files,
|
||||
(const void *) &dummy,
|
||||
@ -308,7 +308,7 @@ _cpp_fake_ihash (pfile, fname)
|
||||
IHASH dummy;
|
||||
|
||||
dummy.nshort = fname;
|
||||
dummy.hash = _cpp_calc_hash (fname, strlen (fname));
|
||||
dummy.hash = _cpp_calc_hash ((const U_CHAR *)fname, strlen (fname));
|
||||
slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files,
|
||||
(const void *) &dummy,
|
||||
dummy.hash, INSERT);
|
||||
@ -515,14 +515,15 @@ remap_filename (pfile, name, loc)
|
||||
|
||||
|
||||
void
|
||||
_cpp_execute_include (pfile, fname, len, no_reinclude, search_start)
|
||||
_cpp_execute_include (pfile, f, len, no_reinclude, search_start)
|
||||
cpp_reader *pfile;
|
||||
char *fname;
|
||||
U_CHAR *f;
|
||||
unsigned int len;
|
||||
int no_reinclude;
|
||||
struct file_name_list *search_start;
|
||||
{
|
||||
IHASH *ihash;
|
||||
char *fname = (char *)f;
|
||||
int fd;
|
||||
int angle_brackets = fname[0] == '<';
|
||||
int before;
|
||||
@ -615,7 +616,7 @@ _cpp_execute_include (pfile, fname, len, no_reinclude, search_start)
|
||||
|
||||
/* Actually process the file. */
|
||||
if (no_reinclude)
|
||||
ihash->control_macro = (const U_CHAR *) "";
|
||||
ihash->control_macro = U"";
|
||||
|
||||
if (read_include_file (pfile, fd, ihash))
|
||||
{
|
||||
@ -644,7 +645,7 @@ cpp_read_file (pfile, fname)
|
||||
if (*fname == 0)
|
||||
dummy.hash = 0;
|
||||
else
|
||||
dummy.hash = _cpp_calc_hash (fname, strlen (fname));
|
||||
dummy.hash = _cpp_calc_hash ((const U_CHAR *)fname, strlen (fname));
|
||||
slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files,
|
||||
(const void *) &dummy,
|
||||
dummy.hash, INSERT);
|
||||
@ -743,7 +744,7 @@ read_include_file (pfile, fd, ihash)
|
||||
if (length < 0)
|
||||
goto fail;
|
||||
if (length == 0)
|
||||
ihash->control_macro = (const U_CHAR *) ""; /* never re-include */
|
||||
ihash->control_macro = U""; /* never re-include */
|
||||
|
||||
close (fd);
|
||||
fp->rlimit = fp->buf + length;
|
||||
|
@ -225,7 +225,7 @@ eq_HASHNODE (x, y)
|
||||
const HASHNODE *b = (const HASHNODE *)y;
|
||||
|
||||
return (a->length == b->length
|
||||
&& !strncmp (a->name, b->name, a->length));
|
||||
&& !ustrncmp (a->name, b->name, a->length));
|
||||
}
|
||||
|
||||
/* Destroy a HASHNODE. */
|
||||
@ -377,7 +377,7 @@ warn_trad_stringify (pfile, p, len, argc, argv)
|
||||
break;
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
if (!strncmp (p, argv[i].name, argv[i].len)
|
||||
if (!ustrncmp (p, argv[i].name, argv[i].len)
|
||||
&& ! is_idchar (p[argv[i].len]))
|
||||
{
|
||||
cpp_warning (pfile,
|
||||
@ -416,7 +416,7 @@ trad_stringify (pfile, base, len, argc, argv, pat, endpat, last)
|
||||
break;
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
if (!strncmp (p, argv[i].name, argv[i].len)
|
||||
if (!ustrncmp (p, argv[i].name, argv[i].len)
|
||||
&& ! is_idchar (p[argv[i].len]))
|
||||
{
|
||||
if (CPP_WTRADITIONAL (pfile))
|
||||
@ -622,7 +622,7 @@ collect_funlike_expansion (pfile, list, arglist, replacement)
|
||||
case CPP_NAME:
|
||||
for (j = 0; j < argc; j++)
|
||||
if (argv[j].len == len
|
||||
&& !strncmp (tok, argv[j].name, argv[j].len))
|
||||
&& !ustrncmp (tok, argv[j].name, argv[j].len))
|
||||
goto addref;
|
||||
|
||||
/* fall through */
|
||||
@ -683,12 +683,12 @@ static int
|
||||
duplicate_arg_p (args, new)
|
||||
U_CHAR *args, *new;
|
||||
{
|
||||
size_t newlen = strlen (new) + 1;
|
||||
size_t newlen = ustrlen (new) + 1;
|
||||
size_t oldlen;
|
||||
|
||||
while (args < new)
|
||||
{
|
||||
oldlen = strlen (args) + 1;
|
||||
oldlen = ustrlen (args) + 1;
|
||||
if (!memcmp (args, new, MIN (oldlen, newlen)))
|
||||
return 1;
|
||||
args += oldlen;
|
||||
@ -795,7 +795,7 @@ collect_params (pfile, list, arglist)
|
||||
}
|
||||
if (CPP_PEDANTIC (pfile) && CPP_OPTION (pfile, c99)
|
||||
&& len == sizeof "__VA_ARGS__" - 1
|
||||
&& !strcmp (p, "__VA_ARGS__"))
|
||||
&& !ustrcmp (p, U"__VA_ARGS__"))
|
||||
cpp_pedwarn (pfile,
|
||||
"C99 does not permit use of __VA_ARGS__ as a macro argument name");
|
||||
argv[a].len = len;
|
||||
@ -817,7 +817,7 @@ collect_params (pfile, list, arglist)
|
||||
argv[a].len = sizeof "__VA_ARGS__" - 1;
|
||||
argv[a].name = p;
|
||||
argv[a].rest_arg = 1;
|
||||
strcpy (p, "__VA_ARGS__");
|
||||
strcpy ((char *)p, "__VA_ARGS__");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -868,8 +868,8 @@ _cpp_create_definition (pfile, list, hp)
|
||||
ntype = T_EMPTY; /* Empty definition of object-like macro. */
|
||||
else if (list->tokens_used == 3 && TOK_TYPE (list, 1) == CPP_NAME
|
||||
&& TOK_LEN (list, 0) == TOK_LEN (list, 1)
|
||||
&& !strncmp (TOK_NAME (list, 0), TOK_NAME (list, 1),
|
||||
TOK_LEN (list, 0)))
|
||||
&& !ustrncmp (TOK_NAME (list, 0), TOK_NAME (list, 1),
|
||||
TOK_LEN (list, 0)))
|
||||
ntype = T_IDENTITY; /* Object like macro defined to itself. */
|
||||
|
||||
/* The macro is function-like only if the next character,
|
||||
@ -926,8 +926,8 @@ _cpp_create_definition (pfile, list, hp)
|
||||
case T_MACRO:
|
||||
ok = (ntype == hp->type
|
||||
&& odefn->length == hp->value.odefn->length
|
||||
&& !strncmp (odefn->expansion, hp->value.odefn->expansion,
|
||||
odefn->length));
|
||||
&& !ustrncmp (odefn->expansion, hp->value.odefn->expansion,
|
||||
odefn->length));
|
||||
break;
|
||||
case T_FMACRO:
|
||||
ok = (ntype == hp->type
|
||||
@ -1050,7 +1050,7 @@ static const char * const monthnames[] =
|
||||
void
|
||||
_cpp_quote_string (pfile, src)
|
||||
cpp_reader *pfile;
|
||||
const char *src;
|
||||
const U_CHAR *src;
|
||||
{
|
||||
U_CHAR c;
|
||||
|
||||
@ -1091,8 +1091,9 @@ special_symbol (pfile, hp)
|
||||
cpp_reader *pfile;
|
||||
HASHNODE *hp;
|
||||
{
|
||||
const char *buf;
|
||||
const U_CHAR *buf;
|
||||
cpp_buffer *ip;
|
||||
size_t len;
|
||||
|
||||
switch (hp->type)
|
||||
{
|
||||
@ -1108,8 +1109,9 @@ special_symbol (pfile, hp)
|
||||
while (CPP_PREV_BUFFER (ip) != NULL)
|
||||
ip = CPP_PREV_BUFFER (ip);
|
||||
|
||||
buf = ip->nominal_fname;
|
||||
CPP_RESERVE (pfile, 3 + 4 * strlen (buf));
|
||||
buf = (const U_CHAR *) ip->nominal_fname;
|
||||
len = ustrlen (buf);
|
||||
CPP_RESERVE (pfile, 3 + 4 * len);
|
||||
_cpp_quote_string (pfile, buf);
|
||||
return;
|
||||
|
||||
@ -1124,8 +1126,9 @@ special_symbol (pfile, hp)
|
||||
}
|
||||
|
||||
CPP_RESERVE (pfile, 10);
|
||||
sprintf (CPP_PWRITTEN (pfile), "%d", true_indepth);
|
||||
CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
|
||||
sprintf ((char *)CPP_PWRITTEN (pfile), "%d", true_indepth);
|
||||
len = ustrlen (CPP_PWRITTEN (pfile));
|
||||
CPP_ADJUST_WRITTEN (pfile, len);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1144,7 +1147,8 @@ special_symbol (pfile, hp)
|
||||
if (!buf || *buf == '\0')
|
||||
return;
|
||||
|
||||
CPP_PUTS (pfile, buf, strlen (buf));
|
||||
len = ustrlen (buf);
|
||||
CPP_PUTS (pfile, buf, len);
|
||||
return;
|
||||
|
||||
case T_SPECLINE:
|
||||
@ -1155,8 +1159,9 @@ special_symbol (pfile, hp)
|
||||
return;
|
||||
}
|
||||
CPP_RESERVE (pfile, 10);
|
||||
sprintf (CPP_PWRITTEN (pfile), "%u", CPP_BUF_LINE (ip));
|
||||
CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
|
||||
sprintf ((char *)CPP_PWRITTEN (pfile), "%u", CPP_BUF_LINE (ip));
|
||||
len = ustrlen (CPP_PWRITTEN (pfile));
|
||||
CPP_ADJUST_WRITTEN (pfile, len);
|
||||
return;
|
||||
|
||||
case T_DATE:
|
||||
@ -1231,7 +1236,7 @@ _cpp_macroexpand (pfile, hp)
|
||||
{
|
||||
const U_CHAR *cpval = hp->value.cpval;
|
||||
if (cpval && *cpval != '\0')
|
||||
push_macro_expansion (pfile, cpval, strlen (cpval), hp);
|
||||
push_macro_expansion (pfile, cpval, ustrlen (cpval), hp);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1782,7 +1787,7 @@ compare_defs (pfile, d1, d2)
|
||||
|
||||
if (d1->nargs != d2->nargs)
|
||||
return 1;
|
||||
if (strcmp (d1->expansion, d2->expansion))
|
||||
if (ustrcmp (d1->expansion, d2->expansion))
|
||||
return 1;
|
||||
if (CPP_PEDANTIC (pfile)
|
||||
&& d1->argnames && d2->argnames)
|
||||
@ -1793,8 +1798,8 @@ compare_defs (pfile, d1, d2)
|
||||
int i = d1->nargs;
|
||||
while (i--)
|
||||
{
|
||||
len = strlen (arg1) + 1;
|
||||
if (strcmp (arg1, arg2))
|
||||
len = ustrlen (arg1) + 1;
|
||||
if (ustrcmp (arg1, arg2))
|
||||
return 1;
|
||||
arg1 += len;
|
||||
arg2 += len;
|
||||
@ -1871,7 +1876,7 @@ dump_funlike_macro (pfile, defn)
|
||||
for (i = 0; i < defn->nargs; i++)
|
||||
{
|
||||
argv[i] = x;
|
||||
argl[i] = strlen (x);
|
||||
argl[i] = ustrlen (x);
|
||||
x += argl[i] + 1;
|
||||
}
|
||||
|
||||
@ -1881,7 +1886,7 @@ dump_funlike_macro (pfile, defn)
|
||||
{
|
||||
CPP_RESERVE (pfile, argl[i] + 2);
|
||||
if (!(i == defn->nargs-1 && defn->rest_args
|
||||
&& !strcmp (argv[i], "__VA_ARGS__")))
|
||||
&& !ustrcmp (argv[i], U"__VA_ARGS__")))
|
||||
CPP_PUTS_Q (pfile, argv[i], argl[i]);
|
||||
if (i < defn->nargs-1)
|
||||
CPP_PUTS_Q (pfile, ", ", 2);
|
||||
|
@ -23,6 +23,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#define __GCC_CPPHASH__
|
||||
|
||||
typedef unsigned char U_CHAR;
|
||||
#define U (const U_CHAR *) /* Intended use: U"string" */
|
||||
|
||||
/* The structure of a node in the hash table. The hash table
|
||||
has entries for all tokens defined by #define commands (type T_MACRO),
|
||||
@ -60,7 +61,7 @@ struct hashnode
|
||||
char disabled; /* macro turned off for rescan? */
|
||||
|
||||
union {
|
||||
const char *cpval; /* some predefined macros */
|
||||
const U_CHAR *cpval; /* some predefined macros */
|
||||
const struct object_defn *odefn; /* #define foo bar */
|
||||
const struct funct_defn *fdefn; /* #define foo(x) bar(x) */
|
||||
struct hashnode *aschain; /* #assert */
|
||||
@ -217,14 +218,14 @@ extern void _cpp_free_definition PARAMS ((HASHNODE *));
|
||||
extern int _cpp_create_definition PARAMS ((cpp_reader *,
|
||||
cpp_toklist *, HASHNODE *));
|
||||
extern void _cpp_dump_definition PARAMS ((cpp_reader *, HASHNODE *));
|
||||
extern void _cpp_quote_string PARAMS ((cpp_reader *, const char *));
|
||||
extern void _cpp_quote_string PARAMS ((cpp_reader *, const U_CHAR *));
|
||||
extern void _cpp_macroexpand PARAMS ((cpp_reader *, HASHNODE *));
|
||||
extern void _cpp_init_macro_hash PARAMS ((cpp_reader *));
|
||||
extern void _cpp_dump_macro_hash PARAMS ((cpp_reader *));
|
||||
|
||||
/* In cppfiles.c */
|
||||
extern void _cpp_simplify_pathname PARAMS ((char *));
|
||||
extern void _cpp_execute_include PARAMS ((cpp_reader *, char *,
|
||||
extern void _cpp_execute_include PARAMS ((cpp_reader *, U_CHAR *,
|
||||
unsigned int, int,
|
||||
struct file_name_list *));
|
||||
extern void _cpp_init_include_hash PARAMS ((cpp_reader *));
|
||||
@ -254,6 +255,43 @@ extern void _cpp_scan_line PARAMS ((cpp_reader *, cpp_toklist *));
|
||||
/* In cpplib.c */
|
||||
extern int _cpp_handle_directive PARAMS ((cpp_reader *));
|
||||
extern void _cpp_unwind_if_stack PARAMS ((cpp_reader *, cpp_buffer *));
|
||||
extern void _cpp_check_directive PARAMS((cpp_toklist *, cpp_token *));
|
||||
extern void _cpp_check_directive PARAMS ((cpp_toklist *, cpp_token *));
|
||||
|
||||
/* These are inline functions (if __GNUC__) instead of macros so we
|
||||
can get type checking. */
|
||||
#if GCC_VERSION >= 2007 && defined __OPTIMIZE__
|
||||
extern inline int ustrcmp (const U_CHAR *, const U_CHAR *);
|
||||
extern inline int ustrncmp (const U_CHAR *, const U_CHAR *, size_t);
|
||||
extern inline size_t ustrlen (const U_CHAR *);
|
||||
extern inline U_CHAR *uxstrdup (const U_CHAR *);
|
||||
extern inline U_CHAR *ustrchr (const U_CHAR *, int);
|
||||
|
||||
extern inline int
|
||||
ustrcmp (const U_CHAR *s1, const U_CHAR *s2)
|
||||
{ return strcmp ((const char *)s1, (const char *)s2); }
|
||||
|
||||
extern inline int
|
||||
ustrncmp (const U_CHAR *s1, const U_CHAR *s2, size_t n)
|
||||
{ return strncmp ((const char *)s1, (const char *)s2, n); }
|
||||
|
||||
extern inline size_t
|
||||
ustrlen (const U_CHAR *s1)
|
||||
{ return strlen ((const char *)s1); }
|
||||
|
||||
extern inline U_CHAR *
|
||||
uxstrdup (const U_CHAR *s1)
|
||||
{ return (U_CHAR *) xstrdup ((const char *)s1); }
|
||||
|
||||
extern inline U_CHAR *
|
||||
ustrchr (const U_CHAR *s1, int c)
|
||||
{ return (U_CHAR *) strchr ((const char *)s1, c); }
|
||||
|
||||
#else
|
||||
#define ustrcmp(s1_, s2_) strcmp((const char *)s1_, (const char *)s2_)
|
||||
#define ustrncmp(s1_, s2_, n_) strncmp((const char *)s1_, (const char *)s2_, n_)
|
||||
#define ustrlen(s1_) strlen((const char *)s1_)
|
||||
#define uxstrdup(s1_) (U_CHAR *) xstrdup((const char *)s1_)
|
||||
#define ustrchr(s1_, c_) (U_CHAR *) strchr((const char *)s1_, c_)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -214,7 +214,8 @@ static void append_include_chain PARAMS ((cpp_reader *,
|
||||
char *, int, int));
|
||||
static void merge_include_chains PARAMS ((cpp_reader *));
|
||||
|
||||
static void dump_special_to_buffer PARAMS ((cpp_reader *, const char *));
|
||||
static void dump_special_to_buffer PARAMS ((cpp_reader *, const U_CHAR *,
|
||||
size_t));
|
||||
static void initialize_dependency_output PARAMS ((cpp_reader *));
|
||||
static void initialize_standard_includes PARAMS ((cpp_reader *));
|
||||
static void new_pending_directive PARAMS ((struct cpp_pending *,
|
||||
@ -229,13 +230,13 @@ static int handle_option PARAMS ((cpp_reader *, int, char **));
|
||||
/* Fourth argument to append_include_chain: chain to use */
|
||||
enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
|
||||
|
||||
/* If we have designated initializers (GCC >2.7, or C99) this table
|
||||
can be initialized, constant data. Otherwise, it has to be filled
|
||||
in at runtime. */
|
||||
/* If we have designated initializers (GCC >2.7) this table can be
|
||||
initialized, constant data. Otherwise, it has to be filled in at
|
||||
runtime. */
|
||||
|
||||
#if (GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)
|
||||
#if (GCC_VERSION >= 2007)
|
||||
#define init_IStable() /* nothing */
|
||||
#define ISTABLE const unsigned char _cpp_IStable[256] = {
|
||||
#define ISTABLE __extension__ const unsigned char _cpp_IStable[256] = {
|
||||
#define END };
|
||||
#define s(p, v) [p] = v,
|
||||
#else
|
||||
@ -514,17 +515,17 @@ merge_include_chains (pfile)
|
||||
to PFILE's token_buffer. */
|
||||
|
||||
static void
|
||||
dump_special_to_buffer (pfile, macro_name)
|
||||
dump_special_to_buffer (pfile, macro_name, macro_len)
|
||||
cpp_reader *pfile;
|
||||
const char *macro_name;
|
||||
const U_CHAR *macro_name;
|
||||
size_t macro_len;
|
||||
{
|
||||
static const char define_directive[] = "#define ";
|
||||
int macro_name_length = strlen (macro_name);
|
||||
CPP_RESERVE (pfile, sizeof(define_directive) + macro_name_length);
|
||||
CPP_RESERVE (pfile, sizeof(define_directive) + macro_len);
|
||||
CPP_PUTS_Q (pfile, define_directive, sizeof(define_directive)-1);
|
||||
CPP_PUTS_Q (pfile, macro_name, macro_name_length);
|
||||
CPP_PUTS_Q (pfile, macro_name, macro_len);
|
||||
CPP_PUTC_Q (pfile, ' ');
|
||||
_cpp_expand_to_buffer (pfile, macro_name, macro_name_length);
|
||||
_cpp_expand_to_buffer (pfile, macro_name, macro_len);
|
||||
CPP_PUTC (pfile, '\n');
|
||||
}
|
||||
|
||||
@ -617,39 +618,46 @@ cpp_cleanup (pfile)
|
||||
|
||||
struct builtin
|
||||
{
|
||||
const char *name;
|
||||
const char *value;
|
||||
const U_CHAR *name;
|
||||
const U_CHAR *value;
|
||||
unsigned short type;
|
||||
unsigned short flags;
|
||||
unsigned int len;
|
||||
};
|
||||
#define DUMP 0x01
|
||||
#define VERS 0x02
|
||||
#define ULP 0x04
|
||||
|
||||
#define B(n, t) { U n, 0, t, 0, sizeof n - 1 }
|
||||
#define C(n, v) { U n, U v, T_CONST, DUMP, sizeof n - 1 }
|
||||
#define X(n, v, t, f) { U n, U v, t, DUMP|f, sizeof n - 1 }
|
||||
static const struct builtin builtin_array[] =
|
||||
{
|
||||
{ "__TIME__", 0, T_TIME, 0 },
|
||||
{ "__DATE__", 0, T_DATE, 0 },
|
||||
{ "__FILE__", 0, T_FILE, 0 },
|
||||
{ "__BASE_FILE__", 0, T_BASE_FILE, 0 },
|
||||
{ "__LINE__", 0, T_SPECLINE, 0 },
|
||||
{ "__INCLUDE_LEVEL__", 0, T_INCLUDE_LEVEL, 0 },
|
||||
B("__TIME__", T_TIME),
|
||||
B("__DATE__", T_DATE),
|
||||
B("__FILE__", T_FILE),
|
||||
B("__BASE_FILE__", T_BASE_FILE),
|
||||
B("__LINE__", T_SPECLINE),
|
||||
B("__INCLUDE_LEVEL__", T_INCLUDE_LEVEL),
|
||||
|
||||
{ "__VERSION__", 0, T_XCONST, DUMP|VERS },
|
||||
{ "__USER_LABEL_PREFIX__", 0, T_CONST, DUMP|ULP },
|
||||
{ "__STDC__", "1", T_STDC, DUMP },
|
||||
{ "__REGISTER_PREFIX__", REGISTER_PREFIX, T_CONST, DUMP },
|
||||
{ "__HAVE_BUILTIN_SETJMP__", "1", T_CONST, DUMP },
|
||||
X("__VERSION__", 0, T_XCONST, VERS),
|
||||
X("__USER_LABEL_PREFIX__", 0, T_CONST, ULP),
|
||||
X("__STDC__", "1", T_STDC, 0),
|
||||
C("__REGISTER_PREFIX__", REGISTER_PREFIX),
|
||||
C("__HAVE_BUILTIN_SETJMP__", "1"),
|
||||
#ifndef NO_BUILTIN_SIZE_TYPE
|
||||
{ "__SIZE_TYPE__", SIZE_TYPE, T_CONST, DUMP },
|
||||
C("__SIZE_TYPE__", SIZE_TYPE),
|
||||
#endif
|
||||
#ifndef NO_BUILTIN_PTRDIFF_TYPE
|
||||
{ "__PTRDIFF_TYPE__", PTRDIFF_TYPE, T_CONST, DUMP },
|
||||
C("__PTRDIFF_TYPE__", PTRDIFF_TYPE),
|
||||
#endif
|
||||
#ifndef NO_BUILTIN_WCHAR_TYPE
|
||||
{ "__WCHAR_TYPE__", WCHAR_TYPE, T_CONST, DUMP },
|
||||
C("__WCHAR_TYPE__", WCHAR_TYPE),
|
||||
#endif
|
||||
};
|
||||
#undef B
|
||||
#undef C
|
||||
#undef X
|
||||
#define builtin_array_end \
|
||||
builtin_array + sizeof(builtin_array)/sizeof(struct builtin)
|
||||
|
||||
@ -659,9 +667,8 @@ static void
|
||||
initialize_builtins (pfile)
|
||||
cpp_reader *pfile;
|
||||
{
|
||||
int len;
|
||||
const struct builtin *b;
|
||||
const char *val;
|
||||
const U_CHAR *val;
|
||||
HASHNODE *hp;
|
||||
for(b = builtin_array; b < builtin_array_end; b++)
|
||||
{
|
||||
@ -669,22 +676,21 @@ initialize_builtins (pfile)
|
||||
continue;
|
||||
|
||||
if (b->flags & ULP)
|
||||
val = user_label_prefix;
|
||||
val = (const U_CHAR *) user_label_prefix;
|
||||
else if (b->flags & VERS)
|
||||
{
|
||||
val = xmalloc (strlen (version_string) + 3);
|
||||
val = (const U_CHAR *) xmalloc (strlen (version_string) + 3);
|
||||
sprintf ((char *)val, "\"%s\"", version_string);
|
||||
}
|
||||
else
|
||||
val = b->value;
|
||||
|
||||
len = strlen (b->name);
|
||||
hp = _cpp_lookup (pfile, b->name, len);
|
||||
hp = _cpp_lookup (pfile, b->name, b->len);
|
||||
hp->value.cpval = val;
|
||||
hp->type = b->type;
|
||||
|
||||
if ((b->flags & DUMP) && CPP_OPTION (pfile, debug_output))
|
||||
dump_special_to_buffer (pfile, b->name);
|
||||
dump_special_to_buffer (pfile, b->name, b->len);
|
||||
}
|
||||
}
|
||||
#undef DUMP
|
||||
|
@ -1720,13 +1720,13 @@ find_position (start, limit, linep)
|
||||
#define UCHAR_MAX 255 /* assume 8-bit bytes */
|
||||
#endif
|
||||
|
||||
#if (GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)
|
||||
#if (GCC_VERSION >= 2007)
|
||||
#define init_chartab() /* nothing */
|
||||
#define CHARTAB static const unsigned char chartab[UCHAR_MAX + 1] = {
|
||||
#define CHARTAB __extension__ static const U_CHAR chartab[UCHAR_MAX + 1] = {
|
||||
#define END };
|
||||
#define s(p, v) [p] = v,
|
||||
#else
|
||||
#define CHARTAB static unsigned char chartab[UCHAR_MAX + 1] = { 0 }; \
|
||||
#define CHARTAB static U_CHAR chartab[UCHAR_MAX + 1] = { 0 }; \
|
||||
static void init_chartab PARAMS ((void)) { \
|
||||
unsigned char *x = chartab;
|
||||
#define END }
|
||||
|
70
gcc/cpplib.c
70
gcc/cpplib.c
@ -32,7 +32,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
struct directive
|
||||
{
|
||||
directive_handler func; /* Function to handle directive. */
|
||||
const char *name; /* Name of directive. */
|
||||
const U_CHAR *name; /* Name of directive. */
|
||||
unsigned short length; /* Length of name. */
|
||||
unsigned short flags; /* Flags describing this directive. */
|
||||
};
|
||||
@ -52,9 +52,9 @@ typedef struct if_stack IF_STACK;
|
||||
|
||||
/* Forward declarations. */
|
||||
|
||||
static void validate_else PARAMS ((cpp_reader *, const char *));
|
||||
static int parse_ifdef PARAMS ((cpp_reader *, const char *));
|
||||
static unsigned int parse_include PARAMS ((cpp_reader *, const char *));
|
||||
static void validate_else PARAMS ((cpp_reader *, const U_CHAR *));
|
||||
static int parse_ifdef PARAMS ((cpp_reader *, const U_CHAR *));
|
||||
static unsigned int parse_include PARAMS ((cpp_reader *, const U_CHAR *));
|
||||
static int conditional_skip PARAMS ((cpp_reader *, int, int,
|
||||
U_CHAR *));
|
||||
static int skip_if_group PARAMS ((cpp_reader *));
|
||||
@ -140,7 +140,8 @@ enum
|
||||
|
||||
/* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
|
||||
#define D(name, t, flags) \
|
||||
{ CONCAT2(do_,name), STRINGX(name), sizeof STRINGX(name) - 1, flags },
|
||||
{ CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
|
||||
sizeof STRINGX(name) - 1, flags },
|
||||
static const struct directive dtable[] =
|
||||
{
|
||||
DIRECTIVE_TABLE
|
||||
@ -155,7 +156,7 @@ _cpp_check_directive (list, token)
|
||||
cpp_toklist *list;
|
||||
cpp_token *token;
|
||||
{
|
||||
const char *name = list->namebuf + token->val.name.offset;
|
||||
const U_CHAR *name = list->namebuf + token->val.name.offset;
|
||||
size_t len = token->val.name.len;
|
||||
unsigned int i;
|
||||
|
||||
@ -163,7 +164,7 @@ _cpp_check_directive (list, token)
|
||||
list->dir_flags = 0;
|
||||
|
||||
for (i = 0; i < N_DIRECTIVES; i++)
|
||||
if (dtable[i].length == len && !strncmp (dtable[i].name, name, len))
|
||||
if (dtable[i].length == len && !ustrncmp (dtable[i].name, name, len))
|
||||
{
|
||||
list->dir_handler = dtable[i].func;
|
||||
list->dir_flags = dtable[i].flags;
|
||||
@ -237,7 +238,7 @@ _cpp_handle_directive (pfile)
|
||||
for (i = 0; i < N_DIRECTIVES; i++)
|
||||
{
|
||||
if (dtable[i].length == len
|
||||
&& !strncmp (dtable[i].name, ident, len))
|
||||
&& !ustrncmp (dtable[i].name, ident, len))
|
||||
goto real_directive;
|
||||
}
|
||||
/* Don't complain about invalid directives in assembly source,
|
||||
@ -361,7 +362,7 @@ do_define (pfile)
|
||||
|
||||
/* That NAME is not allowed to be "defined". (Not clear if the
|
||||
standard requires this.) */
|
||||
if (len == 7 && !strncmp (sym, "defined", 7))
|
||||
if (len == 7 && !ustrncmp (sym, U"defined", 7))
|
||||
{
|
||||
cpp_error_with_line (pfile, list->line, TOK_COL (list, 0),
|
||||
"\"defined\" is not a legal macro name");
|
||||
@ -398,7 +399,7 @@ do_define (pfile)
|
||||
static unsigned int
|
||||
parse_include (pfile, name)
|
||||
cpp_reader *pfile;
|
||||
const char *name;
|
||||
const U_CHAR *name;
|
||||
{
|
||||
long old_written = CPP_WRITTEN (pfile);
|
||||
enum cpp_ttype token;
|
||||
@ -457,12 +458,12 @@ do_include (pfile)
|
||||
cpp_reader *pfile;
|
||||
{
|
||||
unsigned int len;
|
||||
char *token;
|
||||
U_CHAR *token;
|
||||
|
||||
len = parse_include (pfile, dtable[T_INCLUDE].name);
|
||||
if (len == 0)
|
||||
return 0;
|
||||
token = alloca (len + 1);
|
||||
token = (U_CHAR *) alloca (len + 1);
|
||||
memcpy (token, CPP_PWRITTEN (pfile), len);
|
||||
token[len] = '\0';
|
||||
|
||||
@ -478,7 +479,7 @@ do_import (pfile)
|
||||
cpp_reader *pfile;
|
||||
{
|
||||
unsigned int len;
|
||||
char *token;
|
||||
U_CHAR *token;
|
||||
|
||||
if (CPP_OPTION (pfile, warn_import)
|
||||
&& !CPP_BUFFER (pfile)->system_header_p && !pfile->import_warning)
|
||||
@ -491,7 +492,7 @@ do_import (pfile)
|
||||
len = parse_include (pfile, dtable[T_IMPORT].name);
|
||||
if (len == 0)
|
||||
return 0;
|
||||
token = alloca (len + 1);
|
||||
token = (U_CHAR *) alloca (len + 1);
|
||||
memcpy (token, CPP_PWRITTEN (pfile), len);
|
||||
token[len] = '\0';
|
||||
|
||||
@ -507,13 +508,13 @@ do_include_next (pfile)
|
||||
cpp_reader *pfile;
|
||||
{
|
||||
unsigned int len;
|
||||
char *token;
|
||||
U_CHAR *token;
|
||||
struct file_name_list *search_start = 0;
|
||||
|
||||
len = parse_include (pfile, dtable[T_INCLUDE_NEXT].name);
|
||||
if (len == 0)
|
||||
return 0;
|
||||
token = alloca (len + 1);
|
||||
token = (U_CHAR *) alloca (len + 1);
|
||||
memcpy (token, CPP_PWRITTEN (pfile), len);
|
||||
token[len] = '\0';
|
||||
|
||||
@ -590,7 +591,8 @@ do_line (pfile)
|
||||
}
|
||||
|
||||
CPP_PUTC (pfile, '\0'); /* not terminated for us */
|
||||
new_lineno = strtoul (pfile->token_buffer + old_written, &x, 10);
|
||||
new_lineno = strtoul ((const char *) (pfile->token_buffer + old_written),
|
||||
&x, 10);
|
||||
if (x[0] != '\0')
|
||||
{
|
||||
cpp_error (pfile, "token after `#line' is not an integer");
|
||||
@ -643,12 +645,12 @@ do_line (pfile)
|
||||
|
||||
*end_name = '\0';
|
||||
|
||||
if (strcmp (fname, ip->nominal_fname))
|
||||
if (strcmp ((const char *)fname, ip->nominal_fname))
|
||||
{
|
||||
if (!strcmp (fname, ip->ihash->name))
|
||||
if (!strcmp ((const char *)fname, ip->ihash->name))
|
||||
ip->nominal_fname = ip->ihash->name;
|
||||
else
|
||||
ip->nominal_fname = _cpp_fake_ihash (pfile, fname);
|
||||
ip->nominal_fname = _cpp_fake_ihash (pfile, (const char *)fname);
|
||||
}
|
||||
}
|
||||
else if (token != CPP_VSPACE && token != CPP_EOF)
|
||||
@ -888,7 +890,7 @@ do_pragma_once (pfile)
|
||||
if (CPP_PREV_BUFFER (ip) == NULL)
|
||||
cpp_warning (pfile, "`#pragma once' outside include file");
|
||||
else
|
||||
ip->ihash->control_macro = (const U_CHAR *) ""; /* never repeat */
|
||||
ip->ihash->control_macro = U""; /* never repeat */
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -902,7 +904,7 @@ do_pragma_implementation (pfile)
|
||||
enum cpp_ttype token;
|
||||
long written = CPP_WRITTEN (pfile);
|
||||
U_CHAR *name;
|
||||
U_CHAR *copy;
|
||||
char *copy;
|
||||
size_t len;
|
||||
|
||||
token = _cpp_get_directive_token (pfile);
|
||||
@ -917,7 +919,7 @@ do_pragma_implementation (pfile)
|
||||
/* Trim the leading and trailing quote marks from the string. */
|
||||
name = pfile->token_buffer + written + 1;
|
||||
len = CPP_PWRITTEN (pfile) - name;
|
||||
copy = (U_CHAR *) alloca (len);
|
||||
copy = alloca (len);
|
||||
memcpy (copy, name, len - 1);
|
||||
copy[len - 1] = '\0';
|
||||
|
||||
@ -1026,7 +1028,7 @@ detect_if_not_defined (pfile)
|
||||
token = _cpp_get_directive_token (pfile);
|
||||
if (token != CPP_NAME)
|
||||
goto restore;
|
||||
if (strncmp (pfile->token_buffer + token_offset, "defined", 7))
|
||||
if (ustrncmp (pfile->token_buffer + token_offset, U"defined", 7))
|
||||
goto restore;
|
||||
|
||||
/* ...then an optional '(' and the name, */
|
||||
@ -1122,7 +1124,7 @@ do_elif (pfile)
|
||||
static int
|
||||
parse_ifdef (pfile, name)
|
||||
cpp_reader *pfile;
|
||||
const char *name;
|
||||
const U_CHAR *name;
|
||||
{
|
||||
U_CHAR *ident;
|
||||
unsigned int len;
|
||||
@ -1194,7 +1196,7 @@ do_ifndef (pfile)
|
||||
skip = parse_ifdef (pfile, dtable[T_IFNDEF].name);
|
||||
|
||||
if (start_of_file && !skip)
|
||||
control_macro = (U_CHAR *) xstrdup (CPP_PWRITTEN (pfile));
|
||||
control_macro = uxstrdup (CPP_PWRITTEN (pfile));
|
||||
|
||||
return conditional_skip (pfile, skip, T_IFNDEF, control_macro);
|
||||
}
|
||||
@ -1256,7 +1258,7 @@ consider_directive_while_skipping (pfile, stack)
|
||||
for (i = 0; i < N_DIRECTIVES; i++)
|
||||
{
|
||||
if (dtable[i].length == len
|
||||
&& !strncmp (dtable[i].name, pfile->token_buffer + ident, len))
|
||||
&& !ustrncmp (dtable[i].name, pfile->token_buffer + ident, len))
|
||||
goto real_directive;
|
||||
}
|
||||
return 0;
|
||||
@ -1446,7 +1448,7 @@ do_endif (pfile)
|
||||
static void
|
||||
validate_else (pfile, directive)
|
||||
cpp_reader *pfile;
|
||||
const char *directive;
|
||||
const U_CHAR *directive;
|
||||
{
|
||||
long old_written;
|
||||
if (! CPP_PEDANTIC (pfile))
|
||||
@ -1520,7 +1522,7 @@ do_assert (pfile)
|
||||
goto error;
|
||||
}
|
||||
|
||||
blen = (U_CHAR *) strchr (sym, '(') - sym;
|
||||
blen = ustrchr (sym, '(') - sym;
|
||||
base = _cpp_lookup (pfile, sym, blen);
|
||||
if (base->type == T_VOID)
|
||||
{
|
||||
@ -1581,7 +1583,7 @@ do_unassert (pfile)
|
||||
}
|
||||
else
|
||||
{
|
||||
baselen = (U_CHAR *) strchr (sym, '(') - sym;
|
||||
baselen = ustrchr (sym, '(') - sym;
|
||||
base = _cpp_lookup (pfile, sym, baselen);
|
||||
if (base->type == T_VOID) goto out;
|
||||
this = _cpp_lookup (pfile, sym, thislen);
|
||||
@ -1644,7 +1646,7 @@ cpp_define (pfile, str)
|
||||
strcpy (&buf[count-4], " 1\n");
|
||||
}
|
||||
|
||||
if (cpp_push_buffer (pfile, buf, count - 1) != NULL)
|
||||
if (cpp_push_buffer (pfile, (U_CHAR *)buf, count - 1) != NULL)
|
||||
{
|
||||
do_define (pfile);
|
||||
cpp_pop_buffer (pfile);
|
||||
@ -1663,7 +1665,7 @@ cpp_undef (pfile, macro)
|
||||
memcpy (buf, macro, len);
|
||||
buf[len] = '\n';
|
||||
buf[len + 1] = '\0';
|
||||
if (cpp_push_buffer (pfile, buf, len + 1) != NULL)
|
||||
if (cpp_push_buffer (pfile, (U_CHAR *)buf, len + 1) != NULL)
|
||||
{
|
||||
do_undef (pfile);
|
||||
cpp_pop_buffer (pfile);
|
||||
@ -1676,7 +1678,7 @@ cpp_assert (pfile, str)
|
||||
cpp_reader *pfile;
|
||||
const char *str;
|
||||
{
|
||||
if (cpp_push_buffer (pfile, str, strlen (str)) != NULL)
|
||||
if (cpp_push_buffer (pfile, (const U_CHAR *)str, strlen (str)) != NULL)
|
||||
{
|
||||
do_assert (pfile);
|
||||
cpp_pop_buffer (pfile);
|
||||
@ -1689,7 +1691,7 @@ cpp_unassert (pfile, str)
|
||||
cpp_reader *pfile;
|
||||
const char *str;
|
||||
{
|
||||
if (cpp_push_buffer (pfile, str, strlen (str)) != NULL)
|
||||
if (cpp_push_buffer (pfile, (const U_CHAR *)str, strlen (str)) != NULL)
|
||||
{
|
||||
do_unassert (pfile);
|
||||
cpp_pop_buffer (pfile);
|
||||
|
@ -329,4 +329,6 @@ local_mb_cur_max ()
|
||||
return 1; /* default */
|
||||
#endif
|
||||
}
|
||||
#else /* MULTIBYTE_CHARS */
|
||||
extern int dummy; /* silence 'ANSI C forbids an empty source file' warning */
|
||||
#endif /* MULTIBYTE_CHARS */
|
||||
|
@ -1,3 +1,7 @@
|
||||
2000-05-03 Zack Weinberg <zack@wolery.cumb.org>
|
||||
|
||||
* symcat.h: Remove #endif label.
|
||||
|
||||
2000-04-28 Kenneth Block <block@zk3.dec.com>
|
||||
Jason Merrill <jason@casey.cygnus.com>
|
||||
|
||||
|
@ -46,4 +46,4 @@
|
||||
to "foo". */
|
||||
#define XSTRING(s) STRINGX(s)
|
||||
|
||||
#endif SYM_CAT_H
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user