Makefile.in: Update.

* Makefile.in: Update.
	* c-common.c (flag_no_line_commands, flag_no_output,
	flag_dump_macros, flag_dump_includes): New.
	* c-common.h (flag_no_line_commands, flag_no_output,
	flag_dump_macros, flag_dump_includes, preprocess_file): New.
	(init_c_lex): Update prototype.
	* c-lex.c (init_c_lex): Update prototype; move some code to
	c_common_init.
	* c-opts.c (preprocess_file): Subsume into c_common_init.
	(c_common_decode_option): Update flags.
	(c_common_init): Move code from preprocess_file and init_c_lex.
	(sanitize_cpp_opts): Update.
	* c-ppoutput.c: New, cppmain.c almost verbatim.
	* cpphash.h (struct printer): Remove.
	(struct cpp_reader): Remove print.
	* cpplib.h (dump_none, dump_only, dump_names, dump_definitions,
	cpp_preprocess_file): Remove.
	(struct cpp_options): Remove no_output, no_line_commands, dump_macros
	and dump_includes.
	* cppmain.c: Remove.
	* doc/passes.texi: Update.

From-SVN: r63773
This commit is contained in:
Neil Booth 2003-03-04 07:00:39 +00:00 committed by Neil Booth
parent 95f3f59efd
commit 63973df350
10 changed files with 229 additions and 216 deletions

View File

@ -1,3 +1,27 @@
2003-03-04 Neil Booth <neil@daikokuya.co.uk>
* Makefile.in: Update.
* c-common.c (flag_no_line_commands, flag_no_output,
flag_dump_macros, flag_dump_includes): New.
* c-common.h (flag_no_line_commands, flag_no_output,
flag_dump_macros, flag_dump_includes, preprocess_file): New.
(init_c_lex): Update prototype.
* c-lex.c (init_c_lex): Update prototype; move some code to
c_common_init.
* c-opts.c (preprocess_file): Subsume into c_common_init.
(c_common_decode_option): Update flags.
(c_common_init): Move code from preprocess_file and init_c_lex.
(sanitize_cpp_opts): Update.
* c-ppoutput.c: New, cppmain.c almost verbatim.
* cpphash.h (struct printer): Remove.
(struct cpp_reader): Remove print.
* cpplib.h (dump_none, dump_only, dump_names, dump_definitions,
cpp_preprocess_file): Remove.
(struct cpp_options): Remove no_output, no_line_commands, dump_macros
and dump_includes.
* cppmain.c: Remove.
* doc/passes.texi: Update.
2003-03-04 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* function.c (STACK_ALIGNMENT_NEEDED): New macro. Default to 1.

View File

@ -759,7 +759,7 @@ CXX_TARGET_OBJS=@cxx_target_objs@
# Language-specific object files for C and Objective C.
C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \
c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \
c-incpath.o cppdefault.o \
c-incpath.o cppdefault.o c-ppoutput.o \
c-objc-common.o c-dump.o c-pch.o libcpp.a $(C_TARGET_OBJS)
# Language-specific object files for C.
@ -1234,6 +1234,8 @@ c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(RTL_H) debug.h $(C_TREE_H) c-common.h real.h c-incpath.h cppdefault.h \
c-pragma.h input.h intl.h flags.h toplev.h output.h \
mbchar.h $(CPPLIB_H) $(EXPR_H) $(TM_P_H)
c-ppoutput.o : c-ppoutput.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
c-common.h $(TREE_H) $(CPPLIB_H) cpphash.h $(TM_P_H)
c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(C_TREE_H) $(RTL_H) insn-config.h integrate.h $(EXPR_H) $(C_TREE_H) \
flags.h toplev.h tree-inline.h diagnostic.h integrate.h $(VARRAY_H) \
@ -2275,7 +2277,7 @@ PREPROCESSOR_DEFINES = \
@TARGET_SYSTEM_ROOT_DEFINE@
LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o \
cpphash.o cpperror.o cppinit.o cppmain.o \
cpphash.o cpperror.o cppinit.o \
hashtable.o line-map.o mkdeps.o prefix.o mbchar.o cpppch.o
LIBCPP_DEPS = $(CPPLIB_H) cpphash.h line-map.h hashtable.h intl.h \
@ -2288,8 +2290,6 @@ libcpp.a: $(LIBCPP_OBJS)
$(AR) $(AR_FLAGS) libcpp.a $(LIBCPP_OBJS)
-$(RANLIB) libcpp.a
cppmain.o: cppmain.c $(LIBCPP_DEPS)
cpperror.o: cpperror.c $(LIBCPP_DEPS)
cppexp.o: cppexp.c $(LIBCPP_DEPS)
cpplex.o: cpplex.c $(LIBCPP_DEPS) mbchar.h

View File

@ -198,8 +198,26 @@ int allow_pch = 1;
/* Switches common to the C front ends. */
/* Nonzero if prepreprocessing only. */
int flag_preprocess_only;
/* Nonzero means don't output line number information. */
char flag_no_line_commands;
/* Nonzero causes -E output not to be done, but directives such as
#define that have side effects are still obeyed. */
char flag_no_output;
/* Nonzero means dump macros in some fashion. */
char flag_dump_macros;
/* Nonzero means pass #include lines through to the output. */
char flag_dump_includes;
/* The file name to which we should write a precompiled header, or
NULL if no header will be written in this compile. */

View File

@ -370,6 +370,24 @@ extern int allow_pch;
extern int flag_preprocess_only;
/* Nonzero means don't output line number information. */
extern char flag_no_line_commands;
/* Nonzero causes -E output not to be done, but directives such as
#define that have side effects are still obeyed. */
extern char flag_no_output;
/* Nonzero means dump macros in some fashion; contains the 'D', 'M' or
'N' of the command line switch. */
extern char flag_dump_macros;
/* Nonzero means pass #include lines through to the output. */
extern char flag_dump_includes;
/* The file name to which we should write a precompiled header, or
NULL if no header will be written in this compile. */
@ -1243,7 +1261,7 @@ extern int c_staticp PARAMS ((tree));
extern int c_common_unsafe_for_reeval PARAMS ((tree));
extern const char *init_c_lex PARAMS ((const char *));
extern void init_c_lex PARAMS ((void));
extern void cb_register_builtins PARAMS ((cpp_reader *));
@ -1274,5 +1292,8 @@ extern void c_common_read_pch PARAMS ((cpp_reader *pfile,
int fd,
const char *orig));
extern void c_common_write_pch PARAMS ((void));
extern void preprocess_file PARAMS ((cpp_reader *,
const char *,
FILE *));
#endif /* ! GCC_C_COMMON_H */

View File

@ -93,9 +93,8 @@ static void cb_define PARAMS ((cpp_reader *, unsigned int,
static void cb_undef PARAMS ((cpp_reader *, unsigned int,
cpp_hashnode *));
const char *
init_c_lex (filename)
const char *filename;
void
init_c_lex ()
{
struct cpp_callbacks *cb;
struct c_fileinfo *toplevel;
@ -135,11 +134,6 @@ init_c_lex (filename)
cb->define = cb_define;
cb->undef = cb_undef;
}
/* Start it at 0. */
lineno = 0;
return cpp_read_main_file (parse_in, filename, ident_hash);
}
/* A thin wrapper around the real parser that initializes the

View File

@ -90,7 +90,6 @@ static void set_std_cxx98 PARAMS ((int));
static void set_std_c89 PARAMS ((int, int));
static void set_std_c99 PARAMS ((int));
static void check_deps_environment_vars PARAMS ((void));
static void preprocess_file PARAMS ((void));
static void handle_deferred_opts PARAMS ((void));
static void sanitize_cpp_opts PARAMS ((void));
static void add_prefixed_path PARAMS ((const char *, size_t));
@ -715,7 +714,7 @@ c_common_decode_option (argc, argv)
depends on this. Preprocessed output does occur if -MD, -MMD
or environment var dependency generation is used. */
cpp_opts->deps.style = (code == OPT_M ? DEPS_SYSTEM: DEPS_USER);
cpp_opts->no_output = 1;
flag_no_output = 1;
cpp_opts->inhibit_warnings = 1;
break;
@ -747,7 +746,7 @@ c_common_decode_option (argc, argv)
break;
case OPT_P:
cpp_opts->no_line_commands = 1;
flag_no_line_commands = 1;
break;
case OPT_Wabi:
@ -1500,24 +1499,6 @@ c_common_post_options ()
return flag_preprocess_only;
}
/* Preprocess the input file to out_stream. */
static void
preprocess_file ()
{
/* Open the output now. We must do so even if no_output is on,
because there may be other output than from the actual
preprocessing (e.g. from -dM). */
if (out_fname[0] == '\0')
out_stream = stdout;
else
out_stream = fopen (out_fname, "w");
if (out_stream == NULL)
fatal_io_error ("opening output file %s", out_fname);
else
cpp_preprocess_file (parse_in, in_fname, out_stream);
}
/* Front end initialization common to C, ObjC and C++. */
const char *
c_common_init (filename)
@ -1535,18 +1516,35 @@ c_common_init (filename)
cpp_main_file. */
cpp_get_callbacks (parse_in)->register_builtins = cb_register_builtins;
/* NULL is passed up to toplev.c and we exit quickly. */
if (flag_preprocess_only)
{
preprocess_file ();
/* Open the output now. We must do so even if flag_no_output is
on, because there may be other output than from the actual
preprocessing (e.g. from -dM). */
if (out_fname[0] == '\0')
out_stream = stdout;
else
out_stream = fopen (out_fname, "w");
if (out_stream == NULL)
fatal_io_error ("opening output file %s", out_fname);
else
/* Preprocess the input file to out_stream. */
preprocess_file (parse_in, in_fname, out_stream);
/* Exit quickly in toplev.c. */
return NULL;
}
/* Do this before initializing pragmas, as then cpplib's hash table
has been set up. NOTE: we are using our own file name here, not
the one supplied. */
filename = init_c_lex (in_fname);
init_c_lex ();
/* Start it at 0. */
lineno = 0;
/* NOTE: we use in_fname here, not the one supplied. */
filename = cpp_read_main_file (parse_in, in_fname, ident_hash);
/* Has to wait until now so that cpplib has its hash table. */
init_pragma ();
return filename;
@ -1665,16 +1663,16 @@ sanitize_cpp_opts ()
/* -dM and dependencies suppress normal output; do it here so that
the last -d[MDN] switch overrides earlier ones. */
if (cpp_opts->dump_macros == dump_only)
cpp_opts->no_output = 1;
if (flag_dump_macros == 'M')
flag_no_output = 1;
/* Disable -dD, -dN and -dI if normal output is suppressed. Allow
-dM since at least glibc relies on -M -dM to work. */
if (cpp_opts->no_output)
if (flag_no_output)
{
if (cpp_opts->dump_macros != dump_only)
cpp_opts->dump_macros = dump_none;
cpp_opts->dump_includes = 0;
if (flag_dump_macros != 'M')
flag_dump_macros = 0;
flag_dump_includes = 0;
}
cpp_opts->unsigned_char = !flag_signed_char;
@ -1769,20 +1767,14 @@ handle_OPT_d (arg)
while ((c = *arg++) != '\0')
switch (c)
{
case 'M':
cpp_opts->dump_macros = dump_only;
break;
case 'N':
cpp_opts->dump_macros = dump_names;
break;
case 'D':
cpp_opts->dump_macros = dump_definitions;
case 'M': /* Dump macros only. */
case 'N': /* Dump names. */
case 'D': /* Dump definitions. */
flag_dump_macros = c;
break;
case 'I':
cpp_opts->dump_includes = 1;
flag_dump_includes = 1;
break;
}
}

View File

@ -1,5 +1,5 @@
/* Preprocess only, using cpplib.
Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002
Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
Written by Per Bothner, 1994-95.
@ -15,11 +15,7 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
In other words, you are welcome to use, share and improve this program.
You are forbidden to forbid anyone else to use, share and improve
what you give them. Help stamp out software-hoarding! */
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "config.h"
#include "system.h"
@ -27,20 +23,32 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "tm.h"
#include "cpplib.h"
#include "cpphash.h"
#include "tree.h"
#include "c-common.h"
/* Encapsulates state used to convert a stream of tokens into a text
file. */
static struct
{
FILE *outf; /* Stream to write to. */
const struct line_map *map; /* Logical to physical line mappings. */
const cpp_token *prev; /* Previous token. */
const cpp_token *source; /* Source token for spacing. */
unsigned int line; /* Line currently being written. */
unsigned char printed; /* Nonzero if something output at line. */
} print;
static void setup_callbacks PARAMS ((cpp_reader *));
/* General output routines. */
static void scan_translation_unit PARAMS ((cpp_reader *));
static void scan_translation_unit_trad PARAMS ((cpp_reader *));
static void account_for_newlines PARAMS ((cpp_reader *, const uchar *,
size_t));
static void account_for_newlines PARAMS ((const uchar *, size_t));
static int dump_macro PARAMS ((cpp_reader *, cpp_hashnode *, void *));
static void print_line PARAMS ((cpp_reader *, const struct line_map *,
unsigned int, const char *));
static void maybe_print_line PARAMS ((cpp_reader *, const struct line_map *,
unsigned int));
static void print_line PARAMS ((const struct line_map *, unsigned int,
const char *));
static void maybe_print_line PARAMS ((const struct line_map *, unsigned int));
/* Callback routines for the parser. Most of these are active only
in specific modes. */
@ -56,49 +64,48 @@ static void cb_def_pragma PARAMS ((cpp_reader *, unsigned int));
/* Preprocess and output. */
void
cpp_preprocess_file (pfile, in_fname, out_stream)
preprocess_file (pfile, in_fname, out_stream)
cpp_reader *pfile;
const char *in_fname;
FILE *out_stream;
{
/* Initialize the printer structure. Setting print.line to -1 here
is a trick to guarantee that the first token of the file will
cause a linemarker to be output by maybe_print_line. */
pfile->print.line = (unsigned int) -1;
pfile->print.printed = 0;
pfile->print.prev = 0;
pfile->print.map = 0;
pfile->print.outf = out_stream;
/* Initialize the print structure. Setting print.line to -1 here is
a trick to guarantee that the first token of the file will cause
a linemarker to be output by maybe_print_line. */
print.line = (unsigned int) -1;
print.printed = 0;
print.prev = 0;
print.map = 0;
print.outf = out_stream;
setup_callbacks (pfile);
if (cpp_read_main_file (pfile, in_fname, NULL))
{
cpp_options *options = &pfile->opts;
cpp_finish_options (pfile);
/* A successful cpp_read_main_file guarantees that we can call
cpp_scan_nooutput or cpp_get_token next. */
if (options->no_output)
if (flag_no_output)
{
/* Scan -included buffers, then the main file. */
while (pfile->buffer->prev)
cpp_scan_nooutput (pfile);
cpp_scan_nooutput (pfile);
}
else if (options->traditional)
else if (cpp_get_options (pfile)->traditional)
scan_translation_unit_trad (pfile);
else
scan_translation_unit (pfile);
/* -dM command line option. Should this be in cpp_finish? */
if (options->dump_macros == dump_only)
/* -dM command line option. Should this be elsewhere? */
if (flag_dump_macros == 'M')
cpp_forall_identifiers (pfile, dump_macro, NULL);
}
/* Flush any pending output. */
if (pfile->print.printed)
putc ('\n', pfile->print.outf);
if (print.printed)
putc ('\n', print.outf);
}
/* Set up the callbacks as appropriate. */
@ -109,7 +116,7 @@ setup_callbacks (pfile)
cpp_options *options = &pfile->opts;
cpp_callbacks *cb = cpp_get_callbacks (pfile);
if (! options->no_output)
if (!flag_no_output)
{
cb->line_change = cb_line_change;
/* Don't emit #pragma or #ident directives if we are processing
@ -119,15 +126,14 @@ setup_callbacks (pfile)
cb->ident = cb_ident;
cb->def_pragma = cb_def_pragma;
}
if (! options->no_line_commands)
if (!flag_no_line_commands)
cb->file_change = cb_file_change;
}
if (options->dump_includes)
if (flag_dump_includes)
cb->include = cb_include;
if (options->dump_macros == dump_names
|| options->dump_macros == dump_definitions)
if (flag_dump_macros == 'N' || flag_dump_macros == 'D')
{
cb->define = cb_define;
cb->undef = cb_undef;
@ -142,7 +148,7 @@ scan_translation_unit (pfile)
{
bool avoid_paste = false;
pfile->print.source = NULL;
print.source = NULL;
for (;;)
{
const cpp_token *token = cpp_get_token (pfile);
@ -150,10 +156,10 @@ scan_translation_unit (pfile)
if (token->type == CPP_PADDING)
{
avoid_paste = true;
if (pfile->print.source == NULL
|| (!(pfile->print.source->flags & PREV_WHITE)
if (print.source == NULL
|| (!(print.source->flags & PREV_WHITE)
&& token->val.source == NULL))
pfile->print.source = token->val.source;
print.source = token->val.source;
continue;
}
@ -163,37 +169,36 @@ scan_translation_unit (pfile)
/* Subtle logic to output a space if and only if necessary. */
if (avoid_paste)
{
if (pfile->print.source == NULL)
pfile->print.source = token;
if (pfile->print.source->flags & PREV_WHITE
|| (pfile->print.prev
&& cpp_avoid_paste (pfile, pfile->print.prev, token))
|| (pfile->print.prev == NULL && token->type == CPP_HASH))
putc (' ', pfile->print.outf);
if (print.source == NULL)
print.source = token;
if (print.source->flags & PREV_WHITE
|| (print.prev
&& cpp_avoid_paste (pfile, print.prev, token))
|| (print.prev == NULL && token->type == CPP_HASH))
putc (' ', print.outf);
}
else if (token->flags & PREV_WHITE)
putc (' ', pfile->print.outf);
putc (' ', print.outf);
avoid_paste = false;
pfile->print.source = NULL;
pfile->print.prev = token;
cpp_output_token (token, pfile->print.outf);
print.source = NULL;
print.prev = token;
cpp_output_token (token, print.outf);
if (token->type == CPP_COMMENT)
account_for_newlines (pfile, token->val.str.text, token->val.str.len);
account_for_newlines (token->val.str.text, token->val.str.len);
}
}
/* Adjust pfile->print.line for newlines embedded in output. */
/* Adjust print.line for newlines embedded in output. */
static void
account_for_newlines (pfile, str, len)
cpp_reader *pfile;
account_for_newlines (str, len)
const uchar *str;
size_t len;
{
while (len--)
if (*str++ == '\n')
pfile->print.line++;
print.line++;
}
/* Writes out a traditionally preprocessed file. */
@ -204,11 +209,11 @@ scan_translation_unit_trad (pfile)
while (_cpp_read_logical_line_trad (pfile))
{
size_t len = pfile->out.cur - pfile->out.base;
maybe_print_line (pfile, pfile->print.map, pfile->out.first_line);
fwrite (pfile->out.base, 1, len, pfile->print.outf);
pfile->print.printed = 1;
maybe_print_line (print.map, pfile->out.first_line);
fwrite (pfile->out.base, 1, len, print.outf);
print.printed = 1;
if (!CPP_OPTION (pfile, discard_comments))
account_for_newlines (pfile, pfile->out.base, len);
account_for_newlines (pfile->out.base, len);
}
}
@ -216,47 +221,45 @@ scan_translation_unit_trad (pfile)
different line to the current one, output the required newlines or
a line marker, and return 1. Otherwise return 0. */
static void
maybe_print_line (pfile, map, line)
cpp_reader *pfile;
maybe_print_line (map, line)
const struct line_map *map;
unsigned int line;
{
/* End the previous line of text. */
if (pfile->print.printed)
if (print.printed)
{
putc ('\n', pfile->print.outf);
pfile->print.line++;
pfile->print.printed = 0;
putc ('\n', print.outf);
print.line++;
print.printed = 0;
}
if (line >= pfile->print.line && line < pfile->print.line + 8)
if (line >= print.line && line < print.line + 8)
{
while (line > pfile->print.line)
while (line > print.line)
{
putc ('\n', pfile->print.outf);
pfile->print.line++;
putc ('\n', print.outf);
print.line++;
}
}
else
print_line (pfile, map, line, "");
print_line (map, line, "");
}
/* Output a line marker for logical line LINE. Special flags are "1"
or "2" indicating entering or leaving a file. */
static void
print_line (pfile, map, line, special_flags)
cpp_reader *pfile;
print_line (map, line, special_flags)
const struct line_map *map;
unsigned int line;
const char *special_flags;
{
/* End any previous line of text. */
if (pfile->print.printed)
putc ('\n', pfile->print.outf);
pfile->print.printed = 0;
if (print.printed)
putc ('\n', print.outf);
print.printed = 0;
pfile->print.line = line;
if (! CPP_OPTION (pfile, no_line_commands))
print.line = line;
if (!flag_no_line_commands)
{
size_t to_file_len = strlen (map->to_file);
unsigned char *to_file_quoted = alloca (to_file_len * 4 + 1);
@ -267,16 +270,16 @@ print_line (pfile, map, line, special_flags)
p = cpp_quote_string (to_file_quoted,
(unsigned char *)map->to_file, to_file_len);
*p = '\0';
fprintf (pfile->print.outf, "# %u \"%s\"%s",
SOURCE_LINE (map, pfile->print.line),
fprintf (print.outf, "# %u \"%s\"%s",
SOURCE_LINE (map, print.line),
to_file_quoted, special_flags);
if (map->sysp == 2)
fputs (" 3 4", pfile->print.outf);
fputs (" 3 4", print.outf);
else if (map->sysp == 1)
fputs (" 3", pfile->print.outf);
fputs (" 3", print.outf);
putc ('\n', pfile->print.outf);
putc ('\n', print.outf);
}
}
@ -291,9 +294,9 @@ cb_line_change (pfile, token, parsing_args)
if (token->type == CPP_EOF || parsing_args)
return;
maybe_print_line (pfile, pfile->print.map, token->line);
pfile->print.prev = 0;
pfile->print.source = 0;
maybe_print_line (print.map, token->line);
print.prev = 0;
print.source = 0;
/* Supply enough spaces to put this token in its original column,
one space per column greater than 2, since scan_translation_unit
@ -302,26 +305,26 @@ cb_line_change (pfile, token, parsing_args)
ought to care. Some things do care; the fault lies with them. */
if (!CPP_OPTION (pfile, traditional))
{
pfile->print.printed = 1;
print.printed = 1;
if (token->col > 2)
{
unsigned int spaces = token->col - 2;
while (spaces--)
putc (' ', pfile->print.outf);
putc (' ', print.outf);
}
}
}
static void
cb_ident (pfile, line, str)
cpp_reader *pfile;
cpp_reader *pfile ATTRIBUTE_UNUSED;
unsigned int line;
const cpp_string * str;
{
maybe_print_line (pfile, pfile->print.map, line);
fprintf (pfile->print.outf, "#ident \"%s\"\n", str->text);
pfile->print.line++;
maybe_print_line (print.map, line);
fprintf (print.outf, "#ident \"%s\"\n", str->text);
print.line++;
}
static void
@ -330,29 +333,29 @@ cb_define (pfile, line, node)
unsigned int line;
cpp_hashnode *node;
{
maybe_print_line (pfile, pfile->print.map, line);
fputs ("#define ", pfile->print.outf);
maybe_print_line (print.map, line);
fputs ("#define ", print.outf);
/* -dD command line option. */
if (CPP_OPTION (pfile, dump_macros) == dump_definitions)
/* 'D' is whole definition; 'N' is name only. */
if (flag_dump_macros == 'D')
fputs ((const char *) cpp_macro_definition (pfile, node),
pfile->print.outf);
print.outf);
else
fputs ((const char *) NODE_NAME (node), pfile->print.outf);
fputs ((const char *) NODE_NAME (node), print.outf);
putc ('\n', pfile->print.outf);
pfile->print.line++;
putc ('\n', print.outf);
print.line++;
}
static void
cb_undef (pfile, line, node)
cpp_reader *pfile;
cpp_reader *pfile ATTRIBUTE_UNUSED;
unsigned int line;
cpp_hashnode *node;
{
maybe_print_line (pfile, pfile->print.map, line);
fprintf (pfile->print.outf, "#undef %s\n", NODE_NAME (node));
pfile->print.line++;
maybe_print_line (print.map, line);
fprintf (print.outf, "#undef %s\n", NODE_NAME (node));
print.line++;
}
static void
@ -362,14 +365,14 @@ cb_include (pfile, line, dir, header)
const unsigned char *dir;
const cpp_token *header;
{
maybe_print_line (pfile, pfile->print.map, line);
fprintf (pfile->print.outf, "#%s %s\n", dir,
maybe_print_line (print.map, line);
fprintf (print.outf, "#%s %s\n", dir,
cpp_token_as_text (pfile, header));
pfile->print.line++;
print.line++;
}
/* The file name, line number or system header flags have changed, as
described in MAP. From this point on, the old pfile->print.map might be
described in MAP. From this point on, the old print.map might be
pointing to freed memory, and so must not be dereferenced. */
static void
@ -380,26 +383,26 @@ cb_file_change (pfile, map)
const char *flags = "";
/* First time? */
if (pfile->print.map == NULL)
if (print.map == NULL)
{
/* Avoid printing foo.i when the main file is foo.c. */
if (!CPP_OPTION (pfile, preprocessed))
print_line (pfile, map, map->from_line, flags);
print_line (map, map->from_line, flags);
}
else
{
/* Bring current file to correct line when entering a new file. */
if (map->reason == LC_ENTER)
maybe_print_line (pfile, map - 1, map->from_line - 1);
maybe_print_line (map - 1, map->from_line - 1);
if (map->reason == LC_ENTER)
flags = " 1";
else if (map->reason == LC_LEAVE)
flags = " 2";
print_line (pfile, map, map->from_line, flags);
print_line (map, map->from_line, flags);
}
pfile->print.map = map;
print.map = map;
}
/* Copy a #pragma directive to the preprocessed output. */
@ -408,10 +411,10 @@ cb_def_pragma (pfile, line)
cpp_reader *pfile;
unsigned int line;
{
maybe_print_line (pfile, pfile->print.map, line);
fputs ("#pragma ", pfile->print.outf);
cpp_output_line (pfile, pfile->print.outf);
pfile->print.line++;
maybe_print_line (print.map, line);
fputs ("#pragma ", print.outf);
cpp_output_line (pfile, print.outf);
print.line++;
}
/* Dump out the hash table. */
@ -423,11 +426,11 @@ dump_macro (pfile, node, v)
{
if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
{
fputs ("#define ", pfile->print.outf);
fputs ("#define ", print.outf);
fputs ((const char *) cpp_macro_definition (pfile, node),
pfile->print.outf);
putc ('\n', pfile->print.outf);
pfile->print.line++;
print.outf);
putc ('\n', print.outf);
print.line++;
}
return 1;

View File

@ -240,18 +240,6 @@ struct spec_nodes
cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */
};
/* Encapsulates state used to convert a stream of tokens into a text
file. */
struct printer
{
FILE *outf; /* Stream to write to. */
const struct line_map *map; /* Logical to physical line mappings. */
const cpp_token *prev; /* Previous token. */
const cpp_token *source; /* Source token for spacing. */
unsigned int line; /* Line currently being written. */
unsigned char printed; /* Nonzero if something output at line. */
};
/* Represents the contents of a file cpplib has read in. */
struct cpp_buffer
{
@ -422,9 +410,6 @@ struct cpp_reader
preprocessor. */
struct spec_nodes spec_nodes;
/* Used when doing preprocessed output. */
struct printer print;
/* Nonzero means don't look for #include "foo" the source-file
directory. */
unsigned char quote_ignores_source_dir;

View File

@ -206,15 +206,6 @@ struct cpp_token
typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
typedef CPPCHAR_SIGNED_T cppchar_signed_t;
/* 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 cpp.
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
@ -306,17 +297,10 @@ struct cpp_options
/* 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;
/* Zero means dollar signs are punctuation. */
unsigned char dollars_in_ident;
@ -339,12 +323,6 @@ struct cpp_options
bother trying to do macro expansion and whatnot. */
unsigned char preprocessed;
/* Nonzero means dump macros in some fashion - see above. */
unsigned char dump_macros;
/* Nonzero means pass #include lines through to the output. */
unsigned char dump_includes;
/* Print column number in error messages. */
unsigned char show_column;
@ -753,9 +731,6 @@ extern void cpp_prepare_state PARAMS ((cpp_reader *,
extern int cpp_read_state PARAMS ((cpp_reader *, const char *, FILE *,
struct save_macro_data *));
/* In cppmain.c */
extern void cpp_preprocess_file PARAMS ((cpp_reader *, const char *, FILE *));
#ifdef __cplusplus
}
#endif

View File

@ -82,7 +82,8 @@ the other C-like languages: @file{c-common.c},
@file{c-pragma.c},
@file{c-semantics.c},
@file{c-lex.c},
@file{c-incpath.c}
@file{c-incpath.c},
@file{c-ppoutput.c},
@file{c-common.h},
@file{c-dump.h},
@file{c-incpath.h}