mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-16 14:50:42 +08:00
cpplib.h: Merge struct cpp_options into struct cpp_reader.
* cpplib.h: Merge struct cpp_options into struct cpp_reader. Reorder struct cpp_options and struct cpp_reader for better packing. Replace CPP_OPTIONS macro with CPP_OPTION which takes two args. Change all 'char' flags to 'unsigned char'. Move show_column flag into struct cpp_options. Don't prototype cpp_options_init. * cpphash.h, cpperror.c, cppexp.c, cppfiles.c, cpphash.c, cppinit.c, cpplex.c, cpplib.c: Replace CPP_OPTIONS (pfile)->whatever with CPP_OPTION (pfile, whatever), and likewise for opts = CPP_OPTIONS (pfile); ... opts->whatever; * cppinit.c (merge_include_chains): Take a cpp_reader *. Extract CPP_OPTION (pfile, pending) and work with that directly. (cpp_options_init): Delete. (cpp_reader_init): Turn on on-by-default options here. Allocate the pending structure here. (cl_options, enum opt_code): Define these from the same table, kept in a large macro. Add -fshow-column and -fno-show-column options. * cpperror.c (v_message): If show_column is off, don't print the column number. * cppmain.c: Update for new interface. * fix-header.c: Likewise. From-SVN: r32850
This commit is contained in:
parent
7bde2862db
commit
ae79697b72
@ -1,3 +1,33 @@
|
||||
2000-03-31 Zack Weinberg <zack@wolery.cumb.org>
|
||||
|
||||
* cpplib.h: Merge struct cpp_options into struct cpp_reader.
|
||||
Reorder struct cpp_options and struct cpp_reader for better
|
||||
packing. Replace CPP_OPTIONS macro with CPP_OPTION which
|
||||
takes two args. Change all 'char' flags to 'unsigned char'.
|
||||
Move show_column flag into struct cpp_options. Don't
|
||||
prototype cpp_options_init.
|
||||
* cpphash.h, cpperror.c, cppexp.c, cppfiles.c, cpphash.c,
|
||||
cppinit.c, cpplex.c, cpplib.c:
|
||||
Replace CPP_OPTIONS (pfile)->whatever with
|
||||
CPP_OPTION (pfile, whatever), and likewise for
|
||||
opts = CPP_OPTIONS (pfile); ... opts->whatever;
|
||||
|
||||
* cppinit.c (merge_include_chains): Take a cpp_reader *.
|
||||
Extract CPP_OPTION (pfile, pending) and work with that
|
||||
directly.
|
||||
(cpp_options_init): Delete.
|
||||
(cpp_reader_init): Turn on on-by-default options here.
|
||||
Allocate the pending structure here.
|
||||
(cl_options, enum opt_code): Define these from the same table,
|
||||
kept in a large macro. Add -fshow-column and -fno-show-column
|
||||
options.
|
||||
|
||||
* cpperror.c (v_message): If show_column is off, don't print
|
||||
the column number.
|
||||
|
||||
* cppmain.c: Update for new interface.
|
||||
* fix-header.c: Likewise.
|
||||
|
||||
2000-03-30 Geoff Keating <geoffk@cygnus.com>
|
||||
|
||||
* config/rs6000/t-aix43 (AR_FLAGS_FOR_TARGET): Adjust for new
|
||||
@ -365,11 +395,11 @@ Tue Mar 28 08:29:46 2000 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
2000-03-28 Neil Booth <NeilB@earthling.net>
|
||||
|
||||
* cpplex.c (_cpp_read_and_prescan): Mark end of input buffer with
|
||||
* cpplex.c (_cpp_read_and_prescan): Mark end of input buffer with
|
||||
'\\' rather than a null character, so nulls are not special. Fix
|
||||
"\\\n" handling in end-of-buffer conditions. Use trigraph map to
|
||||
speed trigraph conversion.
|
||||
(_cpp_init_input_buffer): Initialize trigraph map.
|
||||
(_cpp_init_input_buffer): Initialize trigraph map.
|
||||
|
||||
2000-03-27 Alan Modra <alan@linuxcare.com.au>
|
||||
|
||||
@ -4041,7 +4071,7 @@ Tue Feb 15 23:22:26 2000 Andrew Haley <aph@cygnus.com>
|
||||
* config/sh/sh.h: Correct comment about macros.
|
||||
|
||||
Tue Feb 15 22:30:36 2000 J"orn Rennecke <amylaar@cygnus.co.uk>
|
||||
Andrew MacLeod <amacleod@cygnus.com>
|
||||
Andrew MacLeod <amacleod@cygnus.com>
|
||||
|
||||
* Makefile.in (lcm.o): Depend on insn-attr.h.
|
||||
* basic-block.h (optimize_mode_switching): Declare.
|
||||
@ -4136,7 +4166,7 @@ Tue Feb 15 22:30:36 2000 J"orn Rennecke <amylaar@cygnus.co.uk>
|
||||
to import the frames themselves.
|
||||
|
||||
Mon Feb 14 13:31:01 2000 Stan Cox <scox@cygnus.com>
|
||||
Jason Eckhardt <jle@cygnus.com>
|
||||
Jason Eckhardt <jle@cygnus.com>
|
||||
|
||||
* basic_block.h: Added prototype for reorder_basic_blocks.
|
||||
* toplev.c: Changes to add -freorder-blocks and graph dump after
|
||||
|
@ -121,7 +121,8 @@ v_message (pfile, is_error, file, line, col, msg, ap)
|
||||
cpp_buf_line_and_col (ip, &line, &col);
|
||||
|
||||
print_containing_files (pfile, ip);
|
||||
print_file_and_line (file, line, col);
|
||||
print_file_and_line (file, line,
|
||||
CPP_OPTION (pfile, show_column) ? col : 0);
|
||||
}
|
||||
else
|
||||
fprintf (stderr, "%s: ", progname);
|
||||
@ -217,7 +218,7 @@ cpp_error VPARAMS ((cpp_reader * pfile, const char *msgid, ...))
|
||||
msgid = va_arg (ap, const char *);
|
||||
#endif
|
||||
|
||||
if (CPP_OPTIONS (pfile)->inhibit_errors)
|
||||
if (CPP_OPTION (pfile, inhibit_errors))
|
||||
return;
|
||||
|
||||
v_message (pfile, 1, NULL, -1, -1, msgid, ap);
|
||||
@ -245,7 +246,7 @@ cpp_error_with_line VPARAMS ((cpp_reader *pfile, int line, int column,
|
||||
msgid = va_arg (ap, const char *);
|
||||
#endif
|
||||
|
||||
if (CPP_OPTIONS (pfile)->inhibit_errors)
|
||||
if (CPP_OPTION (pfile, inhibit_errors))
|
||||
return;
|
||||
|
||||
v_message (pfile, 1, NULL, line, column, msgid, ap);
|
||||
@ -277,7 +278,7 @@ cpp_warning VPARAMS ((cpp_reader * pfile, const char *msgid, ...))
|
||||
msgid = va_arg (ap, const char *);
|
||||
#endif
|
||||
|
||||
if (CPP_OPTIONS (pfile)->inhibit_warnings)
|
||||
if (CPP_OPTION (pfile, inhibit_warnings))
|
||||
return;
|
||||
|
||||
v_message (pfile, 0, NULL, -1, -1, msgid, ap);
|
||||
@ -305,7 +306,7 @@ cpp_warning_with_line VPARAMS ((cpp_reader * pfile, int line, int column,
|
||||
msgid = va_arg (ap, const char *);
|
||||
#endif
|
||||
|
||||
if (CPP_OPTIONS (pfile)->inhibit_warnings)
|
||||
if (CPP_OPTION (pfile, inhibit_warnings))
|
||||
return;
|
||||
|
||||
v_message (pfile, 0, NULL, line, column, msgid, ap);
|
||||
@ -328,12 +329,12 @@ cpp_pedwarn VPARAMS ((cpp_reader * pfile, const char *msgid, ...))
|
||||
msgid = va_arg (ap, const char *);
|
||||
#endif
|
||||
|
||||
if (CPP_OPTIONS (pfile)->pedantic_errors
|
||||
? CPP_OPTIONS (pfile)->inhibit_errors
|
||||
: CPP_OPTIONS (pfile)->inhibit_warnings)
|
||||
if (CPP_OPTION (pfile, pedantic_errors)
|
||||
? CPP_OPTION (pfile, inhibit_errors)
|
||||
: CPP_OPTION (pfile, inhibit_warnings))
|
||||
return;
|
||||
|
||||
v_message (pfile, CPP_OPTIONS (pfile)->pedantic_errors,
|
||||
v_message (pfile, CPP_OPTION (pfile, pedantic_errors),
|
||||
NULL, -1, -1, msgid, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
@ -359,12 +360,12 @@ cpp_pedwarn_with_line VPARAMS ((cpp_reader * pfile, int line, int column,
|
||||
msgid = va_arg (ap, const char *);
|
||||
#endif
|
||||
|
||||
if (CPP_OPTIONS (pfile)->pedantic_errors
|
||||
? CPP_OPTIONS (pfile)->inhibit_errors
|
||||
: CPP_OPTIONS (pfile)->inhibit_warnings)
|
||||
if (CPP_OPTION (pfile, pedantic_errors)
|
||||
? CPP_OPTION (pfile, inhibit_errors)
|
||||
: CPP_OPTION (pfile, inhibit_warnings))
|
||||
return;
|
||||
|
||||
v_message (pfile, CPP_OPTIONS (pfile)->pedantic_errors,
|
||||
v_message (pfile, CPP_OPTION (pfile, pedantic_errors),
|
||||
NULL, line, column, msgid, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
@ -396,12 +397,12 @@ cpp_pedwarn_with_file_and_line VPARAMS ((cpp_reader *pfile,
|
||||
msgid = va_arg (ap, const char *);
|
||||
#endif
|
||||
|
||||
if (CPP_OPTIONS (pfile)->pedantic_errors
|
||||
? CPP_OPTIONS (pfile)->inhibit_errors
|
||||
: CPP_OPTIONS (pfile)->inhibit_warnings)
|
||||
if (CPP_OPTION (pfile, pedantic_errors)
|
||||
? CPP_OPTION (pfile, inhibit_errors)
|
||||
: CPP_OPTION (pfile, inhibit_warnings))
|
||||
return;
|
||||
|
||||
v_message (pfile, CPP_OPTIONS (pfile)->pedantic_errors,
|
||||
v_message (pfile, CPP_OPTION (pfile, pedantic_errors),
|
||||
file, line, col, msgid, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
@ -204,7 +204,7 @@ parse_number (pfile, start, end)
|
||||
cpp_error (pfile, "invalid number in #if expression");
|
||||
goto error;
|
||||
}
|
||||
else if (spec_long > (CPP_OPTIONS (pfile)->c89 ? 1 : 2))
|
||||
else if (spec_long > (CPP_OPTION (pfile, c89) ? 1 : 2))
|
||||
{
|
||||
cpp_error (pfile, "too many `l' suffixes in integer constant");
|
||||
goto error;
|
||||
@ -443,7 +443,7 @@ lex (pfile, skip_evaluation)
|
||||
op.unsignedp = 0;
|
||||
op.value = 0;
|
||||
|
||||
if (CPP_OPTIONS (pfile)->warn_undef && !skip_evaluation)
|
||||
if (CPP_OPTION (pfile, warn_undef) && !skip_evaluation)
|
||||
cpp_warning (pfile, "`%.*s' is not defined",
|
||||
(int) (tok_end - tok_start), tok_start);
|
||||
return op;
|
||||
@ -505,7 +505,7 @@ parse_escape (pfile, string_ptr, result_mask)
|
||||
return TARGET_BS;
|
||||
case 'e':
|
||||
case 'E':
|
||||
if (CPP_OPTIONS (pfile)->pedantic)
|
||||
if (CPP_PEDANTIC (pfile))
|
||||
cpp_pedwarn (pfile, "non-ANSI-standard escape sequence, `\\%c'", c);
|
||||
return TARGET_ESC;
|
||||
case 'f':
|
||||
|
@ -243,7 +243,7 @@ find_include_file (pfile, fname, search_start, ihash, before)
|
||||
name[path->nlen] = '/';
|
||||
strcpy (&name[path->nlen+1], fname);
|
||||
_cpp_simplify_pathname (name);
|
||||
if (CPP_OPTIONS (pfile)->remap)
|
||||
if (CPP_OPTION (pfile, remap))
|
||||
name = remap_filename (pfile, name, path);
|
||||
|
||||
f = open_include_file (pfile, name);
|
||||
@ -369,7 +369,7 @@ read_name_map (pfile, dirname)
|
||||
char *name;
|
||||
FILE *f;
|
||||
|
||||
for (map_list_ptr = CPP_OPTIONS (pfile)->map_list; map_list_ptr;
|
||||
for (map_list_ptr = CPP_OPTION (pfile, map_list); map_list_ptr;
|
||||
map_list_ptr = map_list_ptr->map_list_next)
|
||||
if (! strcmp (map_list_ptr->map_list_name, dirname))
|
||||
return map_list_ptr->map_list_map;
|
||||
@ -429,8 +429,8 @@ read_name_map (pfile, dirname)
|
||||
fclose (f);
|
||||
}
|
||||
|
||||
map_list_ptr->map_list_next = CPP_OPTIONS (pfile)->map_list;
|
||||
CPP_OPTIONS (pfile)->map_list = map_list_ptr;
|
||||
map_list_ptr->map_list_next = CPP_OPTION (pfile, map_list);
|
||||
CPP_OPTION (pfile, map_list) = map_list_ptr;
|
||||
|
||||
return map_list_ptr->map_list_map;
|
||||
}
|
||||
@ -511,9 +511,9 @@ _cpp_execute_include (pfile, fname, len, no_reinclude, search_start)
|
||||
if (!search_start)
|
||||
{
|
||||
if (angle_brackets)
|
||||
search_start = CPP_OPTIONS (pfile)->bracket_include;
|
||||
else if (CPP_OPTIONS (pfile)->ignore_srcdir)
|
||||
search_start = CPP_OPTIONS (pfile)->quote_include;
|
||||
search_start = CPP_OPTION (pfile, bracket_include);
|
||||
else if (CPP_OPTION (pfile, ignore_srcdir))
|
||||
search_start = CPP_OPTION (pfile, quote_include);
|
||||
else
|
||||
search_start = CPP_BUFFER (pfile)->actual_dir;
|
||||
}
|
||||
@ -536,7 +536,7 @@ _cpp_execute_include (pfile, fname, len, no_reinclude, search_start)
|
||||
|
||||
if (fd == -1)
|
||||
{
|
||||
if (CPP_OPTIONS (pfile)->print_deps_missing_files
|
||||
if (CPP_OPTION (pfile, print_deps_missing_files)
|
||||
&& CPP_PRINT_DEPS (pfile) > (angle_brackets ||
|
||||
(pfile->system_include_depth > 0)))
|
||||
{
|
||||
@ -548,10 +548,10 @@ _cpp_execute_include (pfile, fname, len, no_reinclude, search_start)
|
||||
struct file_name_list *ptr;
|
||||
/* If requested as a system header, assume it belongs in
|
||||
the first system header directory. */
|
||||
if (CPP_OPTIONS (pfile)->bracket_include)
|
||||
ptr = CPP_OPTIONS (pfile)->bracket_include;
|
||||
if (CPP_OPTION (pfile, bracket_include))
|
||||
ptr = CPP_OPTION (pfile, bracket_include);
|
||||
else
|
||||
ptr = CPP_OPTIONS (pfile)->quote_include;
|
||||
ptr = CPP_OPTION (pfile, quote_include);
|
||||
|
||||
p = (char *) alloca (strlen (ptr->name)
|
||||
+ strlen (fname) + 2);
|
||||
@ -586,7 +586,7 @@ _cpp_execute_include (pfile, fname, len, no_reinclude, search_start)
|
||||
deps_add_dep (pfile->deps, ihash->name);
|
||||
|
||||
/* Handle -H option. */
|
||||
if (CPP_OPTIONS(pfile)->print_include_names)
|
||||
if (CPP_OPTION (pfile, print_include_names))
|
||||
{
|
||||
cpp_buffer *fp = CPP_BUFFER (pfile);
|
||||
while ((fp = CPP_PREV_BUFFER (fp)) != NULL)
|
||||
@ -753,7 +753,7 @@ read_include_file (pfile, fd, ihash)
|
||||
|
||||
/* The ->actual_dir field is only used when ignore_srcdir is not in effect;
|
||||
see do_include */
|
||||
if (!CPP_OPTIONS (pfile)->ignore_srcdir)
|
||||
if (!CPP_OPTION (pfile, ignore_srcdir))
|
||||
fp->actual_dir = actual_directory (pfile, ihash->name);
|
||||
|
||||
pfile->input_stack_listing_current = 0;
|
||||
@ -819,7 +819,7 @@ actual_directory (pfile, fname)
|
||||
x = (struct file_name_list *) xmalloc (sizeof (struct file_name_list));
|
||||
x->name = dir;
|
||||
x->nlen = dlen;
|
||||
x->next = CPP_OPTIONS (pfile)->quote_include;
|
||||
x->next = CPP_OPTION (pfile, quote_include);
|
||||
x->alloc = pfile->actual_dirs;
|
||||
x->sysp = CPP_BUFFER (pfile)->system_header_p;
|
||||
x->name_map = NULL;
|
||||
|
@ -406,7 +406,7 @@ collect_expansion (pfile, arglist)
|
||||
if (last_token == STRIZE)
|
||||
cpp_error (pfile, "`#' is not followed by a macro argument name");
|
||||
|
||||
if (CPP_TRADITIONAL (pfile) || CPP_OPTIONS (pfile)->warn_stringify)
|
||||
if (CPP_TRADITIONAL (pfile) || CPP_OPTION (pfile, warn_stringify))
|
||||
goto maybe_trad_stringify;
|
||||
else
|
||||
goto norm;
|
||||
@ -480,7 +480,7 @@ collect_expansion (pfile, arglist)
|
||||
(int) argv[i].len, argv[i].name);
|
||||
continue;
|
||||
}
|
||||
if (CPP_OPTIONS (pfile)->warn_stringify)
|
||||
if (CPP_OPTION (pfile, warn_stringify))
|
||||
cpp_warning (pfile, "macro argument `%.*s' is stringified",
|
||||
(int) argv[i].len, argv[i].name);
|
||||
|
||||
@ -614,7 +614,7 @@ collect_formal_parameters (pfile)
|
||||
cpp_error (pfile, "duplicate macro argument name `%s'", tok);
|
||||
continue;
|
||||
}
|
||||
if (CPP_PEDANTIC (pfile) && CPP_OPTIONS (pfile)->c99
|
||||
if (CPP_PEDANTIC (pfile) && CPP_OPTION (pfile, c99)
|
||||
&& len == sizeof "__VA_ARGS__" - 1
|
||||
&& !strncmp (tok, "__VA_ARGS__", len))
|
||||
cpp_pedwarn (pfile,
|
||||
@ -661,7 +661,7 @@ collect_formal_parameters (pfile)
|
||||
those elsewhere. */
|
||||
if (argv[argc].len == 0)
|
||||
{
|
||||
if (CPP_PEDANTIC (pfile) && ! CPP_OPTIONS (pfile)->c99)
|
||||
if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, c99))
|
||||
cpp_pedwarn (pfile, "C89 does not permit varargs macros");
|
||||
|
||||
len = sizeof "__VA_ARGS__" - 1;
|
||||
@ -740,8 +740,8 @@ _cpp_create_definition (pfile, funlike)
|
||||
|
||||
pfile->no_macro_expand++;
|
||||
pfile->parsing_define_directive++;
|
||||
CPP_OPTIONS (pfile)->discard_comments++;
|
||||
CPP_OPTIONS (pfile)->no_line_commands++;
|
||||
CPP_OPTION (pfile, discard_comments)++;
|
||||
CPP_OPTION (pfile, no_line_commands)++;
|
||||
|
||||
if (funlike)
|
||||
{
|
||||
@ -760,15 +760,15 @@ _cpp_create_definition (pfile, funlike)
|
||||
|
||||
pfile->no_macro_expand--;
|
||||
pfile->parsing_define_directive--;
|
||||
CPP_OPTIONS (pfile)->discard_comments--;
|
||||
CPP_OPTIONS (pfile)->no_line_commands--;
|
||||
CPP_OPTION (pfile, discard_comments)--;
|
||||
CPP_OPTION (pfile, no_line_commands)--;
|
||||
return defn;
|
||||
|
||||
err:
|
||||
pfile->no_macro_expand--;
|
||||
pfile->parsing_define_directive--;
|
||||
CPP_OPTIONS (pfile)->discard_comments--;
|
||||
CPP_OPTIONS (pfile)->no_line_commands--;
|
||||
CPP_OPTION (pfile, discard_comments)--;
|
||||
CPP_OPTION (pfile, no_line_commands)--;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1069,8 +1069,8 @@ _cpp_macroexpand (pfile, hp)
|
||||
rest_args = 0;
|
||||
|
||||
/* Skip over the opening parenthesis. */
|
||||
CPP_OPTIONS (pfile)->discard_comments++;
|
||||
CPP_OPTIONS (pfile)->no_line_commands++;
|
||||
CPP_OPTION (pfile, discard_comments)++;
|
||||
CPP_OPTION (pfile, no_line_commands)++;
|
||||
pfile->no_macro_expand++;
|
||||
pfile->no_directives++;
|
||||
|
||||
@ -1102,8 +1102,8 @@ _cpp_macroexpand (pfile, hp)
|
||||
i++;
|
||||
}
|
||||
while (token == CPP_COMMA);
|
||||
CPP_OPTIONS (pfile)->discard_comments--;
|
||||
CPP_OPTIONS (pfile)->no_line_commands--;
|
||||
CPP_OPTION (pfile, discard_comments)--;
|
||||
CPP_OPTION (pfile, no_line_commands)--;
|
||||
pfile->no_macro_expand--;
|
||||
pfile->no_directives--;
|
||||
if (token != CPP_RPAREN)
|
||||
@ -1457,7 +1457,7 @@ unsafe_chars (pfile, c1, c2)
|
||||
goto letter;
|
||||
|
||||
case '$':
|
||||
if (CPP_OPTIONS (pfile)->dollars_in_ident)
|
||||
if (CPP_OPTION (pfile, dollars_in_ident))
|
||||
goto letter;
|
||||
return 0;
|
||||
|
||||
|
@ -172,7 +172,7 @@ typedef struct ihash IHASH;
|
||||
#define IShspace 0x08 /* ' ' \t \f \v */
|
||||
#define ISspace 0x10 /* ' ' \t \f \v \n */
|
||||
|
||||
#define _dollar_ok(x) ((x) == '$' && CPP_OPTIONS (pfile)->dollars_in_ident)
|
||||
#define _dollar_ok(x) ((x) == '$' && CPP_OPTION (pfile, dollars_in_ident))
|
||||
|
||||
#define is_idchar(x) ((_cpp_IStable[x] & ISidnum) || _dollar_ok(x))
|
||||
#define is_idstart(x) ((_cpp_IStable[x] & ISidstart) || _dollar_ok(x))
|
||||
@ -223,10 +223,10 @@ extern unsigned char _cpp_IStable[256];
|
||||
#define CPP_BUMP_LINE(PFILE) CPP_BUMP_BUFFER_LINE(CPP_BUFFER(PFILE))
|
||||
#define CPP_PREV_BUFFER(BUFFER) ((BUFFER)->prev)
|
||||
|
||||
#define CPP_PRINT_DEPS(PFILE) (CPP_OPTIONS (PFILE)->print_deps)
|
||||
#define CPP_TRADITIONAL(PFILE) (CPP_OPTIONS(PFILE)->traditional)
|
||||
#define CPP_PRINT_DEPS(PFILE) CPP_OPTION (PFILE, print_deps)
|
||||
#define CPP_TRADITIONAL(PFILE) CPP_OPTION (PFILE, traditional)
|
||||
#define CPP_PEDANTIC(PFILE) \
|
||||
(CPP_OPTIONS (PFILE)->pedantic && !CPP_BUFFER (pfile)->system_header_p)
|
||||
(CPP_OPTION (PFILE, pedantic) && !CPP_BUFFER (pfile)->system_header_p)
|
||||
|
||||
/* CPP_IS_MACRO_BUFFER is true if the buffer contains macro expansion.
|
||||
(Note that it is false while we're expanding macro *arguments*.) */
|
||||
|
686
gcc/cppinit.c
686
gcc/cppinit.c
File diff suppressed because it is too large
Load Diff
57
gcc/cpplex.c
57
gcc/cpplex.c
@ -119,7 +119,7 @@ cpp_scan_buffer (pfile)
|
||||
{
|
||||
cpp_buffer *buffer = CPP_BUFFER (pfile);
|
||||
enum cpp_token token;
|
||||
if (CPP_OPTIONS (pfile)->no_output)
|
||||
if (CPP_OPTION (pfile, no_output))
|
||||
{
|
||||
long old_written = CPP_WRITTEN (pfile);
|
||||
/* In no-output mode, we can ignore everything but directives. */
|
||||
@ -193,12 +193,12 @@ cpp_expand_to_buffer (pfile, buf, length)
|
||||
ip->has_escapes = 1;
|
||||
|
||||
/* Scan the input, create the output. */
|
||||
save_no_output = CPP_OPTIONS (pfile)->no_output;
|
||||
CPP_OPTIONS (pfile)->no_output = 0;
|
||||
CPP_OPTIONS (pfile)->no_line_commands++;
|
||||
save_no_output = CPP_OPTION (pfile, no_output);
|
||||
CPP_OPTION (pfile, no_output) = 0;
|
||||
CPP_OPTION (pfile, no_line_commands)++;
|
||||
cpp_scan_buffer (pfile);
|
||||
CPP_OPTIONS (pfile)->no_line_commands--;
|
||||
CPP_OPTIONS (pfile)->no_output = save_no_output;
|
||||
CPP_OPTION (pfile, no_line_commands)--;
|
||||
CPP_OPTION (pfile, no_output) = save_no_output;
|
||||
|
||||
CPP_NUL_TERMINATE (pfile);
|
||||
}
|
||||
@ -264,7 +264,7 @@ skip_block_comment (pfile)
|
||||
else if (c == '/' && prev_c == '*')
|
||||
return;
|
||||
else if (c == '*' && prev_c == '/'
|
||||
&& CPP_OPTIONS (pfile)->warn_comments)
|
||||
&& CPP_OPTION (pfile, warn_comments))
|
||||
cpp_warning (pfile, "`/*' within comment");
|
||||
|
||||
prev_c = c;
|
||||
@ -294,7 +294,7 @@ skip_line_comment (pfile)
|
||||
/* \r cannot be a macro escape marker here. */
|
||||
if (!ACTIVE_MARK_P (pfile))
|
||||
CPP_BUMP_LINE (pfile);
|
||||
if (CPP_OPTIONS (pfile)->warn_comments)
|
||||
if (CPP_OPTION (pfile, warn_comments))
|
||||
cpp_warning (pfile, "backslash-newline within line comment");
|
||||
}
|
||||
}
|
||||
@ -325,9 +325,9 @@ skip_comment (pfile, m)
|
||||
skip_line_comment (pfile);
|
||||
return ' ';
|
||||
}
|
||||
else if (CPP_OPTIONS (pfile)->cplusplus_comments)
|
||||
else if (CPP_OPTION (pfile, cplusplus_comments))
|
||||
{
|
||||
if (CPP_OPTIONS (pfile)->c89
|
||||
if (CPP_OPTION (pfile, c89)
|
||||
&& CPP_PEDANTIC (pfile)
|
||||
&& ! CPP_BUFFER (pfile)->warned_cplusplus_comments)
|
||||
{
|
||||
@ -344,7 +344,7 @@ skip_comment (pfile, m)
|
||||
return m;
|
||||
}
|
||||
else if (m == '-' && PEEKC() == '-'
|
||||
&& CPP_OPTIONS (pfile)->chill)
|
||||
&& CPP_OPTION (pfile, chill))
|
||||
{
|
||||
skip_line_comment (pfile);
|
||||
return ' ';
|
||||
@ -524,8 +524,8 @@ skip_string (pfile, c)
|
||||
strings of either variety at end of line. This is a
|
||||
kludge around not knowing where comments are in these
|
||||
languages. */
|
||||
if (CPP_OPTIONS (pfile)->lang_fortran
|
||||
|| CPP_OPTIONS (pfile)->lang_asm)
|
||||
if (CPP_OPTION (pfile, lang_fortran)
|
||||
|| CPP_OPTION (pfile, lang_asm))
|
||||
{
|
||||
FORWARD(-1);
|
||||
return;
|
||||
@ -675,7 +675,6 @@ _cpp_lex_token (pfile)
|
||||
{
|
||||
register int c, c2, c3;
|
||||
enum cpp_token token;
|
||||
struct cpp_options *opts = CPP_OPTIONS (pfile);
|
||||
|
||||
get_next:
|
||||
c = GETC();
|
||||
@ -689,7 +688,7 @@ _cpp_lex_token (pfile)
|
||||
goto op2;
|
||||
|
||||
comment:
|
||||
if (opts->discard_comments)
|
||||
if (CPP_OPTION (pfile, discard_comments))
|
||||
c = skip_comment (pfile, c);
|
||||
else
|
||||
c = copy_comment (pfile, c);
|
||||
@ -698,7 +697,7 @@ _cpp_lex_token (pfile)
|
||||
|
||||
/* Comments are equivalent to spaces.
|
||||
For -traditional, a comment is equivalent to nothing. */
|
||||
if (opts->traditional || !opts->discard_comments)
|
||||
if (CPP_TRADITIONAL (pfile) || !CPP_OPTION (pfile, discard_comments))
|
||||
return CPP_COMMENT;
|
||||
else
|
||||
{
|
||||
@ -745,12 +744,12 @@ _cpp_lex_token (pfile)
|
||||
return c == '\'' ? CPP_CHAR : CPP_STRING;
|
||||
|
||||
case '$':
|
||||
if (!opts->dollars_in_ident)
|
||||
if (!CPP_OPTION (pfile, dollars_in_ident))
|
||||
goto randomchar;
|
||||
goto letter;
|
||||
|
||||
case ':':
|
||||
if (opts->cplusplus && PEEKC () == ':')
|
||||
if (CPP_OPTION (pfile, cplusplus) && PEEKC () == ':')
|
||||
goto op2;
|
||||
goto randomchar;
|
||||
|
||||
@ -775,7 +774,7 @@ _cpp_lex_token (pfile)
|
||||
c2 = PEEKC ();
|
||||
if (c2 == '-')
|
||||
{
|
||||
if (opts->chill)
|
||||
if (CPP_OPTION (pfile, chill))
|
||||
goto comment; /* Chill style comment */
|
||||
else
|
||||
goto op2;
|
||||
@ -784,7 +783,7 @@ _cpp_lex_token (pfile)
|
||||
goto op2;
|
||||
else if (c2 == '>')
|
||||
{
|
||||
if (opts->cplusplus && PEEKN (1) == '*')
|
||||
if (CPP_OPTION (pfile, cplusplus) && PEEKN (1) == '*')
|
||||
{
|
||||
/* In C++, there's a ->* operator. */
|
||||
token = CPP_OTHER;
|
||||
@ -842,7 +841,7 @@ _cpp_lex_token (pfile)
|
||||
if (c2 == '=')
|
||||
goto op2;
|
||||
/* GNU C++ supports MIN and MAX operators <? and >?. */
|
||||
if (c2 != c && (!opts->cplusplus || c2 != '?'))
|
||||
if (c2 != c && (!CPP_OPTION (pfile, cplusplus) || c2 != '?'))
|
||||
goto randomchar;
|
||||
FORWARD(1);
|
||||
CPP_RESERVE (pfile, 4);
|
||||
@ -866,7 +865,7 @@ _cpp_lex_token (pfile)
|
||||
}
|
||||
|
||||
/* In C++ there's a .* operator. */
|
||||
if (opts->cplusplus && c2 == '*')
|
||||
if (CPP_OPTION (pfile, cplusplus) && c2 == '*')
|
||||
goto op2;
|
||||
|
||||
if (c2 == '.' && PEEKN(1) == '.')
|
||||
@ -917,7 +916,7 @@ _cpp_lex_token (pfile)
|
||||
if (!is_numchar(c) && c != '.'
|
||||
&& ((c2 != 'e' && c2 != 'E'
|
||||
&& ((c2 != 'p' && c2 != 'P')
|
||||
|| CPP_OPTIONS (pfile)->c89))
|
||||
|| CPP_OPTION (pfile, c89)))
|
||||
|| (c != '+' && c != '-')))
|
||||
break;
|
||||
FORWARD(1);
|
||||
@ -928,7 +927,7 @@ _cpp_lex_token (pfile)
|
||||
return CPP_NUMBER;
|
||||
case 'b': case 'c': case 'd': case 'h': case 'o':
|
||||
case 'B': case 'C': case 'D': case 'H': case 'O':
|
||||
if (opts->chill && PEEKC () == '\'')
|
||||
if (CPP_OPTION (pfile, chill) && PEEKC () == '\'')
|
||||
{
|
||||
pfile->only_seen_white = 0;
|
||||
CPP_RESERVE (pfile, 2);
|
||||
@ -1023,7 +1022,7 @@ _cpp_lex_token (pfile)
|
||||
if (pfile->only_seen_white == 0)
|
||||
pfile->only_seen_white = 1;
|
||||
CPP_BUMP_LINE (pfile);
|
||||
if (! CPP_OPTIONS (pfile)->no_line_commands)
|
||||
if (! CPP_OPTION (pfile, no_line_commands))
|
||||
{
|
||||
pfile->lineno++;
|
||||
if (CPP_BUFFER (pfile)->lineno != pfile->lineno)
|
||||
@ -1466,12 +1465,12 @@ _cpp_read_and_prescan (pfile, fp, desc, len)
|
||||
if (t == 0)
|
||||
break;
|
||||
|
||||
if (CPP_OPTIONS (pfile)->warn_trigraphs)
|
||||
if (CPP_OPTION (pfile, warn_trigraphs))
|
||||
{
|
||||
unsigned long col;
|
||||
line_base = find_position (line_base, op, &line);
|
||||
col = op - line_base + 1;
|
||||
if (CPP_OPTIONS (pfile)->trigraphs)
|
||||
if (CPP_OPTION (pfile, trigraphs))
|
||||
cpp_warning_with_line (pfile, line, col,
|
||||
"trigraph ??%c converted to %c", d, t);
|
||||
else
|
||||
@ -1480,7 +1479,7 @@ _cpp_read_and_prescan (pfile, fp, desc, len)
|
||||
}
|
||||
|
||||
ip += 2;
|
||||
if (CPP_OPTIONS (pfile)->trigraphs)
|
||||
if (CPP_OPTION (pfile, trigraphs))
|
||||
{
|
||||
op[-1] = t; /* Overwrite '?' */
|
||||
if (t == '\\')
|
||||
@ -1554,7 +1553,7 @@ _cpp_init_input_buffer (pfile)
|
||||
memset (tmp, SPECCASE_EMPTY, 1 << CHAR_BIT);
|
||||
tmp['\r'] = SPECCASE_CR;
|
||||
tmp['\\'] = SPECCASE_BACKSLASH;
|
||||
if (CPP_OPTIONS (pfile)->trigraphs || CPP_OPTIONS (pfile)->warn_trigraphs)
|
||||
if (CPP_OPTION (pfile, trigraphs) || CPP_OPTION (pfile, warn_trigraphs))
|
||||
tmp['?'] = SPECCASE_QUESTION;
|
||||
pfile->input_speccase = tmp;
|
||||
|
||||
|
44
gcc/cpplib.c
44
gcc/cpplib.c
@ -157,11 +157,11 @@ _cpp_handle_directive (pfile)
|
||||
input (preprocessed or fed back in by the C++ frontend). */
|
||||
if (c >= '0' && c <= '9')
|
||||
{
|
||||
if (CPP_OPTIONS (pfile)->lang_asm)
|
||||
if (CPP_OPTION (pfile, lang_asm))
|
||||
return 0;
|
||||
|
||||
if (CPP_PEDANTIC (pfile)
|
||||
&& ! CPP_OPTIONS (pfile)->preprocessed
|
||||
&& ! CPP_OPTION (pfile, preprocessed)
|
||||
&& ! CPP_BUFFER (pfile)->manual_pop)
|
||||
cpp_pedwarn (pfile, "`#' followed by integer");
|
||||
do_line (pfile);
|
||||
@ -170,7 +170,7 @@ _cpp_handle_directive (pfile)
|
||||
|
||||
/* If we are rescanning preprocessed input, don't obey any directives
|
||||
other than # nnn. */
|
||||
if (CPP_OPTIONS (pfile)->preprocessed)
|
||||
if (CPP_OPTION (pfile, preprocessed))
|
||||
return 0;
|
||||
|
||||
/* Now find the directive name. */
|
||||
@ -320,7 +320,7 @@ do_define (pfile)
|
||||
ok = ! _cpp_compare_defs (pfile, def, hp->value.defn);
|
||||
/* Redefining a constant is ok with -D. */
|
||||
else if (hp->type == T_CONST || hp->type == T_STDC)
|
||||
ok = ! CPP_OPTIONS (pfile)->done_initializing;
|
||||
ok = ! pfile->done_initializing;
|
||||
/* Otherwise it's not ok. */
|
||||
else
|
||||
ok = 0;
|
||||
@ -331,7 +331,7 @@ do_define (pfile)
|
||||
cpp_error (pfile, "redefining poisoned `%.*s'", len, sym);
|
||||
else
|
||||
cpp_pedwarn (pfile, "`%.*s' redefined", len, sym);
|
||||
if (hp->type == T_MACRO && CPP_OPTIONS (pfile)->done_initializing)
|
||||
if (hp->type == T_MACRO && pfile->done_initializing)
|
||||
{
|
||||
DEFINITION *d = hp->value.defn;
|
||||
cpp_pedwarn_with_file_and_line (pfile, d->file, d->line, d->col,
|
||||
@ -354,10 +354,10 @@ do_define (pfile)
|
||||
*slot = hp;
|
||||
}
|
||||
|
||||
if (CPP_OPTIONS (pfile)->debug_output
|
||||
|| CPP_OPTIONS (pfile)->dump_macros == dump_definitions)
|
||||
if (CPP_OPTION (pfile, debug_output)
|
||||
|| CPP_OPTION (pfile, dump_macros) == dump_definitions)
|
||||
_cpp_dump_definition (pfile, sym, len, def);
|
||||
else if (CPP_OPTIONS (pfile)->dump_macros == dump_names)
|
||||
else if (CPP_OPTION (pfile, dump_macros) == dump_names)
|
||||
pass_thru_directive (sym, len, pfile, T_DEFINE);
|
||||
|
||||
return 0;
|
||||
@ -376,8 +376,8 @@ _cpp_output_line_command (pfile, file_change)
|
||||
long line;
|
||||
cpp_buffer *ip;
|
||||
|
||||
if (CPP_OPTIONS (pfile)->no_line_commands
|
||||
|| CPP_OPTIONS (pfile)->no_output)
|
||||
if (CPP_OPTION (pfile, no_line_commands)
|
||||
|| CPP_OPTION (pfile, no_output))
|
||||
return;
|
||||
|
||||
ip = cpp_file_buffer (pfile);
|
||||
@ -428,7 +428,7 @@ _cpp_output_line_command (pfile, file_change)
|
||||
}
|
||||
#ifndef NO_IMPLICIT_EXTERN_C
|
||||
/* Tell cc1plus if following text should be treated as C. */
|
||||
if (ip->system_header_p == 2 && CPP_OPTIONS (pfile)->cplusplus)
|
||||
if (ip->system_header_p == 2 && CPP_OPTION (pfile, cplusplus))
|
||||
{
|
||||
CPP_PUTC_Q (pfile, ' ');
|
||||
CPP_PUTC_Q (pfile, '4');
|
||||
@ -513,7 +513,7 @@ do_include (pfile)
|
||||
token = alloca (len + 1);
|
||||
strcpy (token, CPP_PWRITTEN (pfile));
|
||||
|
||||
if (CPP_OPTIONS (pfile)->dump_includes)
|
||||
if (CPP_OPTION (pfile, dump_includes))
|
||||
pass_thru_directive (token, len, pfile, T_INCLUDE);
|
||||
|
||||
_cpp_execute_include (pfile, token, len, 0, 0);
|
||||
@ -530,7 +530,7 @@ do_import (pfile)
|
||||
if (CPP_PEDANTIC (pfile))
|
||||
cpp_pedwarn (pfile, "ANSI C does not allow `#import'");
|
||||
|
||||
if (CPP_OPTIONS (pfile)->warn_import
|
||||
if (CPP_OPTION (pfile, warn_import)
|
||||
&& !CPP_BUFFER (pfile)->system_header_p && !pfile->import_warning)
|
||||
{
|
||||
pfile->import_warning = 1;
|
||||
@ -544,7 +544,7 @@ do_import (pfile)
|
||||
token = alloca (len + 1);
|
||||
strcpy (token, CPP_PWRITTEN (pfile));
|
||||
|
||||
if (CPP_OPTIONS (pfile)->dump_includes)
|
||||
if (CPP_OPTION (pfile, dump_includes))
|
||||
pass_thru_directive (token, len, pfile, T_IMPORT);
|
||||
|
||||
_cpp_execute_include (pfile, token, len, 1, 0);
|
||||
@ -568,7 +568,7 @@ do_include_next (pfile)
|
||||
token = alloca (len + 1);
|
||||
strcpy (token, CPP_PWRITTEN (pfile));
|
||||
|
||||
if (CPP_OPTIONS (pfile)->dump_includes)
|
||||
if (CPP_OPTION (pfile, dump_includes))
|
||||
pass_thru_directive (token, len, pfile, T_INCLUDE_NEXT);
|
||||
|
||||
/* For #include_next, skip in the search path past the dir in which the
|
||||
@ -782,7 +782,7 @@ do_undef (pfile)
|
||||
HASHNODE *hp = *slot;
|
||||
/* If we are generating additional info for debugging (with -g) we
|
||||
need to pass through all effective #undef commands. */
|
||||
if (CPP_OPTIONS (pfile)->debug_output)
|
||||
if (CPP_OPTION (pfile, debug_output))
|
||||
pass_thru_directive (name, len, pfile, T_UNDEF);
|
||||
if (hp->type == T_POISON)
|
||||
cpp_error (pfile, "cannot undefine poisoned `%s'", hp->name);
|
||||
@ -1021,9 +1021,9 @@ do_pragma_poison (pfile)
|
||||
|
||||
/* As a rule, don't include #pragma poison commands in output,
|
||||
unless the user asks for them. */
|
||||
writeit = (CPP_OPTIONS (pfile)->debug_output
|
||||
|| CPP_OPTIONS (pfile)->dump_macros == dump_definitions
|
||||
|| CPP_OPTIONS (pfile)->dump_macros == dump_names);
|
||||
writeit = (CPP_OPTION (pfile, debug_output)
|
||||
|| CPP_OPTION (pfile, dump_macros) == dump_definitions
|
||||
|| CPP_OPTION (pfile, dump_macros) == dump_names);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
@ -1399,7 +1399,7 @@ consider_directive_while_skipping (pfile, stack)
|
||||
}
|
||||
|
||||
/* Don't let erroneous code go by. */
|
||||
if (!CPP_OPTIONS (pfile)->lang_asm && CPP_PEDANTIC (pfile))
|
||||
if (!CPP_OPTION (pfile, lang_asm) && CPP_PEDANTIC (pfile))
|
||||
cpp_pedwarn (pfile, "invalid preprocessor directive name");
|
||||
return 0;
|
||||
}
|
||||
@ -1612,7 +1612,7 @@ do_assert (pfile)
|
||||
size_t blen, tlen;
|
||||
unsigned long bhash, thash;
|
||||
|
||||
if (CPP_PEDANTIC (pfile) && CPP_OPTIONS (pfile)->done_initializing)
|
||||
if (CPP_PEDANTIC (pfile) && pfile->done_initializing)
|
||||
cpp_pedwarn (pfile, "ANSI C does not allow `#assert'");
|
||||
|
||||
_cpp_skip_hspace (pfile);
|
||||
@ -1678,7 +1678,7 @@ do_unassert (pfile)
|
||||
long baselen, thislen;
|
||||
HASHNODE *base, *this, *next;
|
||||
|
||||
if (CPP_PEDANTIC (pfile) && CPP_OPTIONS (pfile)->done_initializing)
|
||||
if (CPP_PEDANTIC (pfile) && pfile->done_initializing)
|
||||
cpp_pedwarn (pfile, "ANSI C does not allow `#unassert'");
|
||||
|
||||
_cpp_skip_hspace (pfile);
|
||||
|
445
gcc/cpplib.h
445
gcc/cpplib.h
@ -128,6 +128,182 @@ struct htab;
|
||||
efficiency, and partly to limit runaway recursion. */
|
||||
#define CPP_STACK_MAX 200
|
||||
|
||||
/* Values for opts.dump_macros.
|
||||
dump_only means inhibit output of the preprocessed text
|
||||
and instead output the definitions of all user-defined
|
||||
macros in a form suitable for use as input to cccp.
|
||||
dump_names means pass #define and the macro name through to output.
|
||||
dump_definitions means pass the whole definition (plus #define) through
|
||||
*/
|
||||
enum { dump_none = 0, dump_only, dump_names, dump_definitions };
|
||||
|
||||
/* This structure is nested inside struct cpp_reader, and
|
||||
carries all the options visible to the command line. */
|
||||
struct cpp_options
|
||||
{
|
||||
/* Name of input and output files. */
|
||||
const char *in_fname;
|
||||
const char *out_fname;
|
||||
|
||||
/* Pending options - -D, -U, -A, -I, -ixxx. */
|
||||
struct cpp_pending *pending;
|
||||
|
||||
/* File name which deps are being written to. This is 0 if deps are
|
||||
being written to stdout. */
|
||||
const char *deps_file;
|
||||
|
||||
/* Target-name to write with the dependency information. */
|
||||
char *deps_target;
|
||||
|
||||
/* Search paths for include files. */
|
||||
struct file_name_list *quote_include; /* First dir to search for "file" */
|
||||
struct file_name_list *bracket_include;/* First dir to search for <file> */
|
||||
|
||||
/* Map between header names and file names, used only on DOS where
|
||||
file names are limited in length. */
|
||||
struct file_name_map_list *map_list;
|
||||
|
||||
/* Directory prefix that should replace `/usr/lib/gcc-lib/TARGET/VERSION'
|
||||
in the standard include file directories. */
|
||||
const char *include_prefix;
|
||||
unsigned int include_prefix_len;
|
||||
|
||||
/* Non-0 means -v, so print the full set of include dirs. */
|
||||
unsigned char verbose;
|
||||
|
||||
/* Nonzero means use extra default include directories for C++. */
|
||||
unsigned char cplusplus;
|
||||
|
||||
/* Nonzero means handle cplusplus style comments */
|
||||
unsigned char cplusplus_comments;
|
||||
|
||||
/* Nonzero means handle #import, for objective C. */
|
||||
unsigned char objc;
|
||||
|
||||
/* Nonzero means this is an assembly file, so ignore unrecognized
|
||||
directives and the "# 33" form of #line, both of which are
|
||||
probably comments. Also, permit unbalanced ' strings (again,
|
||||
likely to be in comments). */
|
||||
unsigned char lang_asm;
|
||||
|
||||
/* Nonzero means this is Fortran, and we don't know where the
|
||||
comments are, so permit unbalanced ' strings. Unlike lang_asm,
|
||||
this does not ignore unrecognized directives. */
|
||||
unsigned char lang_fortran;
|
||||
|
||||
/* Nonzero means handle CHILL comment syntax and output CHILL string
|
||||
delimiters for __DATE__ etc. */
|
||||
unsigned char chill;
|
||||
|
||||
/* Nonzero means don't copy comments into the output file. */
|
||||
unsigned char discard_comments;
|
||||
|
||||
/* Nonzero means process the ANSI trigraph sequences. */
|
||||
unsigned char trigraphs;
|
||||
|
||||
/* Nonzero means print the names of included files rather than the
|
||||
preprocessed output. 1 means just the #include "...", 2 means
|
||||
#include <...> as well. */
|
||||
unsigned char print_deps;
|
||||
|
||||
/* Nonzero if missing .h files in -M output are assumed to be
|
||||
generated files and not errors. */
|
||||
unsigned char print_deps_missing_files;
|
||||
|
||||
/* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
|
||||
unsigned char print_deps_append;
|
||||
|
||||
/* Nonzero means print names of header files (-H). */
|
||||
unsigned char print_include_names;
|
||||
|
||||
/* Nonzero means cpp_pedwarn causes a hard error. */
|
||||
unsigned char pedantic_errors;
|
||||
|
||||
/* Nonzero means don't print warning messages. */
|
||||
unsigned char inhibit_warnings;
|
||||
|
||||
/* Nonzero means don't print error messages. Has no option to
|
||||
select it, but can be set by a user of cpplib (e.g. fix-header). */
|
||||
unsigned char inhibit_errors;
|
||||
|
||||
/* Nonzero means warn if slash-star appears in a comment. */
|
||||
unsigned char warn_comments;
|
||||
|
||||
/* Nonzero means warn if there are any trigraphs. */
|
||||
unsigned char warn_trigraphs;
|
||||
|
||||
/* Nonzero means warn if #import is used. */
|
||||
unsigned char warn_import;
|
||||
|
||||
/* Nonzero means warn if a macro argument is (or would be)
|
||||
stringified with -traditional. */
|
||||
unsigned char warn_stringify;
|
||||
|
||||
/* Nonzero means turn warnings into errors. */
|
||||
unsigned char warnings_are_errors;
|
||||
|
||||
/* Nonzero causes output not to be done, but directives such as
|
||||
#define that have side effects are still obeyed. */
|
||||
unsigned char no_output;
|
||||
|
||||
/* Nonzero means we should look for header.gcc files that remap file
|
||||
names. */
|
||||
unsigned char remap;
|
||||
|
||||
/* Nonzero means don't output line number information. */
|
||||
unsigned char no_line_commands;
|
||||
|
||||
/* Nonzero means -I- has been seen, so don't look for #include "foo"
|
||||
the source-file directory. */
|
||||
unsigned char ignore_srcdir;
|
||||
|
||||
/* Zero means dollar signs are punctuation. */
|
||||
unsigned char dollars_in_ident;
|
||||
|
||||
/* Nonzero means try to imitate old fashioned non-ANSI preprocessor. */
|
||||
unsigned char traditional;
|
||||
|
||||
/* Nonzero means warn if undefined identifiers are evaluated in an #if. */
|
||||
unsigned char warn_undef;
|
||||
|
||||
/* Nonzero for the 1989 C Standard, including corrigenda and amendments. */
|
||||
unsigned char c89;
|
||||
|
||||
/* Nonzero for the 1999 C Standard, including corrigenda and amendments. */
|
||||
unsigned char c99;
|
||||
|
||||
/* Nonzero means give all the error messages the ANSI standard requires. */
|
||||
unsigned char pedantic;
|
||||
|
||||
/* Nonzero means we're looking at already preprocessed code, so don't
|
||||
bother trying to do macro expansion and whatnot. */
|
||||
unsigned char preprocessed;
|
||||
|
||||
/* Nonzero disables all the standard directories for headers. */
|
||||
unsigned char no_standard_includes;
|
||||
|
||||
/* Nonzero disables the C++-specific standard directories for headers. */
|
||||
unsigned char no_standard_cplusplus_includes;
|
||||
|
||||
/* Nonzero means dump macros in some fashion - see above. */
|
||||
unsigned char dump_macros;
|
||||
|
||||
/* Nonzero means pass all #define and #undef directives which we
|
||||
actually process through to the output stream. This feature is
|
||||
used primarily to allow cc1 to record the #defines and #undefs
|
||||
for the sake of debuggers which understand about preprocessor
|
||||
macros, but it may also be useful with -E to figure out how
|
||||
symbols are defined, and where they are defined. */
|
||||
unsigned char debug_output;
|
||||
|
||||
/* Nonzero means pass #include lines through to the output. */
|
||||
unsigned char dump_includes;
|
||||
|
||||
/* Print column number in error messages. */
|
||||
unsigned char show_column;
|
||||
};
|
||||
|
||||
|
||||
/* A cpp_reader encapsulates the "state" of a pre-processor run.
|
||||
Applying cpp_get_token repeatedly yields a stream of pre-processor
|
||||
tokens. Usually, there is only one cpp_reader object active. */
|
||||
@ -135,7 +311,6 @@ struct htab;
|
||||
struct cpp_reader
|
||||
{
|
||||
cpp_buffer *buffer;
|
||||
cpp_options *opts;
|
||||
|
||||
/* A buffer used for both for cpp_get_token's output, and also internally. */
|
||||
unsigned char *token_buffer;
|
||||
@ -172,41 +347,6 @@ struct cpp_reader
|
||||
|
||||
struct if_stack *if_stack;
|
||||
|
||||
/* Nonzero means we have printed (while error reporting) a list of
|
||||
containing files that matches the current status. */
|
||||
char input_stack_listing_current;
|
||||
|
||||
/* If non-zero, macros are not expanded. */
|
||||
char no_macro_expand;
|
||||
|
||||
/* If non-zero, directives cause a hard error. Used when parsing
|
||||
macro arguments. */
|
||||
char no_directives;
|
||||
|
||||
/* Print column number in error messages. */
|
||||
char show_column;
|
||||
|
||||
/* We're printed a warning recommending against using #import. */
|
||||
char import_warning;
|
||||
|
||||
/* If true, character between '<' and '>' are a single (string) token. */
|
||||
char parsing_include_directive;
|
||||
|
||||
/* If true, # introduces an assertion (see do_assert) */
|
||||
char parsing_if_directive;
|
||||
|
||||
/* If true, # and ## are the STRINGIZE and TOKPASTE operators */
|
||||
char parsing_define_directive;
|
||||
|
||||
/* True if escape sequences (as described for has_escapes in
|
||||
parse_buffer) should be emitted. */
|
||||
char output_escapes;
|
||||
|
||||
/* 0: Have seen non-white-space on this line.
|
||||
1: Only seen white space so far on this line.
|
||||
2: Only seen white space so far in this file. */
|
||||
char only_seen_white;
|
||||
|
||||
long lineno;
|
||||
|
||||
struct tm *timebuf;
|
||||
@ -220,6 +360,45 @@ struct cpp_reader
|
||||
unsigned char *input_buffer;
|
||||
unsigned char *input_speccase;
|
||||
size_t input_buffer_len;
|
||||
|
||||
/* User visible options. */
|
||||
struct cpp_options opts;
|
||||
|
||||
/* Nonzero means we have printed (while error reporting) a list of
|
||||
containing files that matches the current status. */
|
||||
unsigned char input_stack_listing_current;
|
||||
|
||||
/* If non-zero, macros are not expanded. */
|
||||
unsigned char no_macro_expand;
|
||||
|
||||
/* If non-zero, directives cause a hard error. Used when parsing
|
||||
macro arguments. */
|
||||
unsigned char no_directives;
|
||||
|
||||
/* We're printed a warning recommending against using #import. */
|
||||
unsigned char import_warning;
|
||||
|
||||
/* If true, characters between '<' and '>' are a single (string) token. */
|
||||
unsigned char parsing_include_directive;
|
||||
|
||||
/* If true, # introduces an assertion (see do_assert) */
|
||||
unsigned char parsing_if_directive;
|
||||
|
||||
/* If true, # and ## are the STRINGIZE and TOKPASTE operators */
|
||||
unsigned char parsing_define_directive;
|
||||
|
||||
/* True if escape sequences (as described for has_escapes in
|
||||
parse_buffer) should be emitted. */
|
||||
unsigned char output_escapes;
|
||||
|
||||
/* 0: Have seen non-white-space on this line.
|
||||
1: Only seen white space so far on this line.
|
||||
2: Only seen white space so far in this file. */
|
||||
unsigned char only_seen_white;
|
||||
|
||||
/* True after cpp_start_read completes. Used to inhibit some
|
||||
warnings while parsing the command line. */
|
||||
unsigned char done_initializing;
|
||||
};
|
||||
|
||||
#define CPP_FATAL_LIMIT 1000
|
||||
@ -234,200 +413,9 @@ struct cpp_reader
|
||||
#define CPP_ADJUST_WRITTEN(PFILE,DELTA) ((PFILE)->limit += (DELTA))
|
||||
#define CPP_SET_WRITTEN(PFILE,N) ((PFILE)->limit = (PFILE)->token_buffer + (N))
|
||||
|
||||
#define CPP_OPTIONS(PFILE) ((PFILE)->opts)
|
||||
#define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION)
|
||||
#define CPP_BUFFER(PFILE) ((PFILE)->buffer)
|
||||
|
||||
/* Pointed to by cpp_reader.opts. */
|
||||
struct cpp_options
|
||||
{
|
||||
const char *in_fname;
|
||||
|
||||
/* Name of output file, for error messages. */
|
||||
const char *out_fname;
|
||||
|
||||
struct file_name_map_list *map_list;
|
||||
|
||||
/* Non-0 means -v, so print the full set of include dirs. */
|
||||
char verbose;
|
||||
|
||||
/* Nonzero means use extra default include directories for C++. */
|
||||
|
||||
char cplusplus;
|
||||
|
||||
/* Nonzero means handle cplusplus style comments */
|
||||
|
||||
char cplusplus_comments;
|
||||
|
||||
/* Nonzero means handle #import, for objective C. */
|
||||
|
||||
char objc;
|
||||
|
||||
/* Nonzero means this is an assembly file, so ignore unrecognized
|
||||
directives and the "# 33" form of #line, both of which are
|
||||
probably comments. Also, permit unbalanced ' strings (again,
|
||||
likely to be in comments). */
|
||||
|
||||
char lang_asm;
|
||||
|
||||
/* Nonzero means this is Fortran, and we don't know where the
|
||||
comments are, so permit unbalanced ' strings. Unlike lang_asm,
|
||||
this does not ignore unrecognized directives. */
|
||||
|
||||
char lang_fortran;
|
||||
|
||||
/* Nonzero means handle CHILL comment syntax
|
||||
and output CHILL string delimiter for __DATE___ etc. */
|
||||
|
||||
char chill;
|
||||
|
||||
/* Nonzero means don't copy comments into the output file. */
|
||||
|
||||
char discard_comments;
|
||||
|
||||
/* Nonzero means process the ANSI trigraph sequences. */
|
||||
|
||||
char trigraphs;
|
||||
|
||||
/* Nonzero means print the names of included files rather than
|
||||
the preprocessed output. 1 means just the #include "...",
|
||||
2 means #include <...> as well. */
|
||||
|
||||
char print_deps;
|
||||
|
||||
/* Nonzero if missing .h files in -M output are assumed to be generated
|
||||
files and not errors. */
|
||||
|
||||
char print_deps_missing_files;
|
||||
|
||||
/* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
|
||||
char print_deps_append;
|
||||
|
||||
/* Nonzero means print names of header files (-H). */
|
||||
|
||||
char print_include_names;
|
||||
|
||||
/* Nonzero means try to make failure to fit ANSI C an error. */
|
||||
|
||||
char pedantic_errors;
|
||||
|
||||
/* Nonzero means don't print warning messages. */
|
||||
|
||||
char inhibit_warnings;
|
||||
|
||||
/* Nonzero means don't print error messages. Has no option to select it,
|
||||
but can be set by a user of cpplib (e.g. fix-header). */
|
||||
|
||||
char inhibit_errors;
|
||||
|
||||
/* Nonzero means warn if slash-star appears in a comment. */
|
||||
|
||||
char warn_comments;
|
||||
|
||||
/* Nonzero means warn if there are any trigraphs. */
|
||||
|
||||
char warn_trigraphs;
|
||||
|
||||
/* Nonzero means warn if #import is used. */
|
||||
|
||||
char warn_import;
|
||||
|
||||
/* Nonzero means warn if a macro argument is (or would be)
|
||||
stringified with -traditional. */
|
||||
|
||||
char warn_stringify;
|
||||
|
||||
/* Nonzero means turn warnings into errors. */
|
||||
|
||||
char warnings_are_errors;
|
||||
|
||||
/* Nonzero causes output not to be done,
|
||||
but directives such as #define that have side effects
|
||||
are still obeyed. */
|
||||
|
||||
char no_output;
|
||||
|
||||
/* Nonzero means we should look for header.gcc files that remap file
|
||||
names. */
|
||||
char remap;
|
||||
|
||||
/* Nonzero means don't output line number information. */
|
||||
char no_line_commands;
|
||||
|
||||
/* Nonzero means -I- has been seen,
|
||||
so don't look for #include "foo" the source-file directory. */
|
||||
char ignore_srcdir;
|
||||
|
||||
/* Zero means dollar signs are punctuation.
|
||||
This used to be needed for conformance to the C Standard,
|
||||
before the C Standard was corrected. */
|
||||
char dollars_in_ident;
|
||||
|
||||
/* Nonzero means try to imitate old fashioned non-ANSI preprocessor. */
|
||||
char traditional;
|
||||
|
||||
/* Nonzero means warn if undefined identifiers are evaluated in an #if. */
|
||||
char warn_undef;
|
||||
|
||||
/* Nonzero for the 1989 C Standard, including corrigenda and amendments. */
|
||||
char c89;
|
||||
|
||||
/* Nonzero for the 1999 C Standard, including corrigenda and amendments. */
|
||||
char c99;
|
||||
|
||||
/* Nonzero means give all the error messages the ANSI standard requires. */
|
||||
char pedantic;
|
||||
|
||||
/* Nonzero means we're looking at already preprocessed code, so don't
|
||||
bother trying to do macro expansion and whatnot. */
|
||||
char preprocessed;
|
||||
|
||||
char done_initializing;
|
||||
|
||||
/* Search paths for include files. */
|
||||
struct file_name_list *quote_include; /* First dir to search for "file" */
|
||||
struct file_name_list *bracket_include;/* First dir to search for <file> */
|
||||
|
||||
/* Directory prefix that should replace `/usr/lib/gcc-lib/TARGET/VERSION'
|
||||
in the standard include file directories. */
|
||||
const char *include_prefix;
|
||||
int include_prefix_len;
|
||||
|
||||
char no_standard_includes;
|
||||
char no_standard_cplusplus_includes;
|
||||
|
||||
/* dump_only means inhibit output of the preprocessed text
|
||||
and instead output the definitions of all user-defined
|
||||
macros in a form suitable for use as input to cccp.
|
||||
dump_names means pass #define and the macro name through to output.
|
||||
dump_definitions means pass the whole definition (plus #define) through
|
||||
*/
|
||||
|
||||
enum {dump_none = 0, dump_only, dump_names, dump_definitions}
|
||||
dump_macros;
|
||||
|
||||
/* Nonzero means pass all #define and #undef directives which we actually
|
||||
process through to the output stream. This feature is used primarily
|
||||
to allow cc1 to record the #defines and #undefs for the sake of
|
||||
debuggers which understand about preprocessor macros, but it may
|
||||
also be useful with -E to figure out how symbols are defined, and
|
||||
where they are defined. */
|
||||
int debug_output;
|
||||
|
||||
/* Nonzero means pass #include lines through to the output,
|
||||
even if they are ifdefed out. */
|
||||
int dump_includes;
|
||||
|
||||
/* Pending options - -D, -U, -A, -I, -ixxx. */
|
||||
struct cpp_pending *pending;
|
||||
|
||||
/* File name which deps are being written to.
|
||||
This is 0 if deps are being written to stdout. */
|
||||
const char *deps_file;
|
||||
|
||||
/* Target-name to write with the dependency information. */
|
||||
char *deps_target;
|
||||
};
|
||||
|
||||
/* Name under which this program was invoked. */
|
||||
extern const char *progname;
|
||||
|
||||
@ -436,7 +424,6 @@ extern enum cpp_token cpp_get_token PARAMS ((cpp_reader *));
|
||||
extern enum cpp_token cpp_get_non_space_token PARAMS ((cpp_reader *));
|
||||
|
||||
extern void cpp_reader_init PARAMS ((cpp_reader *));
|
||||
extern void cpp_options_init PARAMS ((cpp_options *));
|
||||
extern int cpp_start_read PARAMS ((cpp_reader *, const char *));
|
||||
extern void cpp_finish PARAMS ((cpp_reader *));
|
||||
extern void cpp_cleanup PARAMS ((cpp_reader *PFILE));
|
||||
|
@ -28,7 +28,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
const char *progname;
|
||||
|
||||
cpp_reader parse_in;
|
||||
cpp_options options;
|
||||
|
||||
|
||||
extern int main PARAMS ((int, char **));
|
||||
@ -38,9 +37,11 @@ main (argc, argv)
|
||||
char **argv;
|
||||
{
|
||||
char *p;
|
||||
cpp_reader *pfile = &parse_in;
|
||||
int argi = 1; /* Next argument to handle. */
|
||||
struct cpp_options *opts = &options;
|
||||
enum cpp_token kind;
|
||||
FILE *out;
|
||||
const char *out_fname;
|
||||
|
||||
p = argv[0] + strlen (argv[0]);
|
||||
while (p != argv[0] && p[-1] != '/') --p;
|
||||
@ -54,47 +55,49 @@ main (argc, argv)
|
||||
(void) bindtextdomain (PACKAGE, localedir);
|
||||
(void) textdomain (PACKAGE);
|
||||
|
||||
cpp_reader_init (&parse_in);
|
||||
parse_in.opts = opts;
|
||||
|
||||
cpp_options_init (opts);
|
||||
cpp_reader_init (pfile);
|
||||
|
||||
argi += cpp_handle_options (&parse_in, argc - argi , argv + argi);
|
||||
if (argi < argc && ! CPP_FATAL_ERRORS (&parse_in))
|
||||
cpp_fatal (&parse_in, "Invalid option `%s'", argv[argi]);
|
||||
if (CPP_FATAL_ERRORS (&parse_in))
|
||||
argi += cpp_handle_options (pfile, argc - argi , argv + argi);
|
||||
if (argi < argc && ! CPP_FATAL_ERRORS (pfile))
|
||||
cpp_fatal (pfile, "Invalid option %s", argv[argi]);
|
||||
if (CPP_FATAL_ERRORS (pfile))
|
||||
return (FATAL_EXIT_CODE);
|
||||
|
||||
parse_in.show_column = 1;
|
||||
|
||||
if (! cpp_start_read (&parse_in, opts->in_fname))
|
||||
if (! cpp_start_read (pfile, CPP_OPTION (pfile, in_fname)))
|
||||
return (FATAL_EXIT_CODE);
|
||||
|
||||
/* Now that we know the input file is valid, open the output. */
|
||||
|
||||
if (!opts->out_fname || !strcmp (opts->out_fname, ""))
|
||||
opts->out_fname = "stdout";
|
||||
else if (! freopen (opts->out_fname, "w", stdout))
|
||||
out_fname = CPP_OPTION (pfile, out_fname);
|
||||
if (*out_fname == '\0')
|
||||
{
|
||||
cpp_notice_from_errno (&parse_in, opts->out_fname);
|
||||
return (FATAL_EXIT_CODE);
|
||||
out_fname = "stdout";
|
||||
out = stdout;
|
||||
}
|
||||
else
|
||||
{
|
||||
out = fopen (out_fname, "w");
|
||||
if (!out)
|
||||
{
|
||||
cpp_notice_from_errno (pfile, CPP_OPTION (pfile, out_fname));
|
||||
return (FATAL_EXIT_CODE);
|
||||
}
|
||||
}
|
||||
|
||||
if (! opts->no_output)
|
||||
if (! CPP_OPTION (pfile, no_output))
|
||||
{
|
||||
do
|
||||
{
|
||||
kind = cpp_get_token (&parse_in);
|
||||
if (CPP_WRITTEN (&parse_in) >= BUFSIZ || kind == CPP_EOF)
|
||||
kind = cpp_get_token (pfile);
|
||||
if (CPP_WRITTEN (pfile) >= BUFSIZ || kind == CPP_EOF)
|
||||
{
|
||||
size_t rem, count = CPP_WRITTEN (&parse_in);
|
||||
size_t rem, count = CPP_WRITTEN (pfile);
|
||||
|
||||
rem = fwrite (parse_in.token_buffer, 1, count, stdout);
|
||||
rem = fwrite (parse_in.token_buffer, 1, count, out);
|
||||
if (rem < count)
|
||||
/* Write error. */
|
||||
cpp_notice_from_errno (&parse_in, opts->out_fname);
|
||||
cpp_notice_from_errno (pfile, CPP_OPTION (pfile, out_fname));
|
||||
|
||||
CPP_SET_WRITTEN (&parse_in, 0);
|
||||
CPP_SET_WRITTEN (pfile, 0);
|
||||
}
|
||||
}
|
||||
while (kind != CPP_EOF);
|
||||
@ -103,19 +106,22 @@ main (argc, argv)
|
||||
{
|
||||
do
|
||||
{
|
||||
cpp_scan_buffer (&parse_in);
|
||||
kind = cpp_get_token (&parse_in);
|
||||
cpp_scan_buffer (pfile);
|
||||
kind = cpp_get_token (pfile);
|
||||
}
|
||||
while (kind != CPP_EOF);
|
||||
CPP_SET_WRITTEN (&parse_in, 0);
|
||||
CPP_SET_WRITTEN (pfile, 0);
|
||||
}
|
||||
|
||||
cpp_finish (&parse_in);
|
||||
if (fwrite (parse_in.token_buffer, 1, CPP_WRITTEN (&parse_in), stdout)
|
||||
< CPP_WRITTEN (&parse_in))
|
||||
cpp_notice_from_errno (&parse_in, opts->out_fname);
|
||||
cpp_finish (pfile);
|
||||
if (fwrite (parse_in.token_buffer, 1, CPP_WRITTEN (pfile), out)
|
||||
< CPP_WRITTEN (pfile))
|
||||
cpp_notice_from_errno (pfile, CPP_OPTION (pfile, out_fname));
|
||||
|
||||
cpp_cleanup (&parse_in);
|
||||
if (ferror (out) || fclose (out))
|
||||
cpp_notice_from_errno (pfile, CPP_OPTION (pfile, out_fname));
|
||||
|
||||
cpp_cleanup (pfile);
|
||||
|
||||
if (parse_in.errors)
|
||||
return (FATAL_EXIT_CODE);
|
||||
|
@ -617,7 +617,6 @@ read_scan_file (in_fname, argc, argv)
|
||||
char **argv;
|
||||
{
|
||||
cpp_reader scan_in;
|
||||
cpp_options scan_options;
|
||||
struct fn_decl *fn;
|
||||
int i;
|
||||
register struct symbol_list *cur_symbols;
|
||||
@ -625,13 +624,11 @@ read_scan_file (in_fname, argc, argv)
|
||||
obstack_init (&scan_file_obstack);
|
||||
|
||||
cpp_reader_init (&scan_in);
|
||||
scan_in.opts = &scan_options;
|
||||
cpp_options_init (&scan_options);
|
||||
/* We are going to be scanning a header file out of its proper context,
|
||||
so ignore warnings and errors. */
|
||||
scan_options.inhibit_warnings = 1;
|
||||
scan_options.inhibit_errors = 1;
|
||||
scan_options.no_line_commands = 1;
|
||||
CPP_OPTION (&scan_in, inhibit_warnings) = 1;
|
||||
CPP_OPTION (&scan_in, inhibit_errors) = 1;
|
||||
CPP_OPTION (&scan_in, no_line_commands) = 1;
|
||||
i = cpp_handle_options (&scan_in, argc, argv);
|
||||
if (i < argc && ! CPP_FATAL_ERRORS (&scan_in))
|
||||
cpp_fatal (&scan_in, "Invalid option `%s'", argv[i]);
|
||||
|
Loading…
Reference in New Issue
Block a user