cpplib.h, line-map.h: Update comments.

* cpplib.h, line-map.h: Update comments.
	* cppmain.c (printer_init): Move inline.
	(maybe_print_line, print_line): Take a map pointer.
	(cb_ident, cb_define, cb_undef, cb_include, cb_def_pragma): Update.
	(cb_file_change): Don't use prior value of print.map.

From-SVN: r44697
This commit is contained in:
Neil Booth 2001-08-07 17:55:01 +00:00 committed by Neil Booth
parent e851528350
commit 42dcba3463
4 changed files with 49 additions and 40 deletions

View File

@ -1,3 +1,11 @@
2001-08-07 Neil Booth <neil@daikokuya.demon.co.uk>
* cpplib.h, line-map.h: Update comments.
* cppmain.c (printer_init): Move inline.
(maybe_print_line, print_line): Take a map pointer.
(cb_ident, cb_define, cb_undef, cb_include, cb_def_pragma): Update.
(cb_file_change): Don't use prior value of print.map.
2001-08-07 David Edelsohn <edelsohn@gnu.org>
* doc/install.texi: Document fine-grained multilib configuration.

View File

@ -390,7 +390,7 @@ struct cpp_options
typedef struct cpp_file_change cpp_file_change;
struct cpp_file_change
{
struct line_map *map; /* Line map to use until next callback. */
struct line_map *map; /* Line map, valid until next callback. */
unsigned int line; /* Logical line number of next line. */
enum lc_reason reason; /* Reason for change. */
unsigned char sysp; /* Nonzero if system header. */

View File

@ -32,9 +32,9 @@ struct printer
{
FILE *outf; /* Stream to write to. */
const char *syshdr_flags; /* System header flags, if any. */
struct line_map *map; /* Logical to physical line mappings. */
unsigned int line; /* Line currently being written. */
unsigned char printed; /* Nonzero if something output at line. */
struct line_map *map; /* Logical to physical line mappings. */
};
int main PARAMS ((int, char **));
@ -45,11 +45,11 @@ static void setup_callbacks PARAMS ((void));
/* General output routines. */
static void scan_translation_unit PARAMS ((cpp_reader *));
static void check_multiline_token PARAMS ((cpp_string *));
static void printer_init PARAMS ((void));
static int dump_macro PARAMS ((cpp_reader *, cpp_hashnode *, void *));
static void print_line PARAMS ((unsigned int, const char *));
static void maybe_print_line PARAMS ((unsigned int));
static void print_line PARAMS ((struct line_map *, unsigned int,
const char *));
static void maybe_print_line PARAMS ((struct line_map *, unsigned int));
/* Callback routines for the parser. Most of these are active only
in specific modes. */
@ -139,14 +139,26 @@ do_preprocessing (argc, argv)
if (options->help_only)
return;
/* 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. */
print.line = (unsigned int) -1;
print.printed = 0;
print.map = 0;
/* 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). */
printer_init ();
if (print.outf == NULL)
if (options->out_fname[0] == '\0')
print.outf = stdout;
else
{
cpp_notice_from_errno (pfile, options->out_fname);
return;
print.outf = fopen (options->out_fname, "w");
if (print.outf == NULL)
{
cpp_notice_from_errno (pfile, options->out_fname);
return;
}
}
setup_callbacks ();
@ -226,7 +238,7 @@ scan_translation_unit (pfile)
column. Don't bother trying to reconstruct tabs; we can't
get it right in general, and nothing ought to care. (Yes,
some things do care; the fault lies with them.) */
maybe_print_line (line);
maybe_print_line (print.map, line);
if (col > 1)
{
if (token->flags & PREV_WHITE)
@ -267,29 +279,13 @@ check_multiline_token (str)
print.line++;
}
/* Initialize a cpp_printer structure. As a side effect, open the
output file. If print.outf is NULL an error occurred. */
static void
printer_init ()
{
/* Setting print.line to -1 here guarantees 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.map = 0;
if (options->out_fname[0] == '\0')
print.outf = stdout;
else
print.outf = fopen (options->out_fname, "w");
}
/* If the token read on logical line LINE needs to be output on a
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 (line)
maybe_print_line (map, line)
struct line_map *map;
unsigned int line;
{
/* End the previous line of text. */
@ -309,11 +305,12 @@ maybe_print_line (line)
}
}
else
print_line (line, "");
print_line (map, line, "");
}
static void
print_line (line, special_flags)
print_line (map, line, special_flags)
struct line_map *map;
unsigned int line;
const char *special_flags;
{
@ -325,8 +322,8 @@ print_line (line, special_flags)
print.line = line;
if (! options->no_line_commands)
fprintf (print.outf, "# %u \"%s\"%s%s\n",
SOURCE_LINE (print.map, print.line),
print.map->to_file, special_flags, print.syshdr_flags);
SOURCE_LINE (map, print.line), map->to_file,
special_flags, print.syshdr_flags);
}
/* Callbacks. */
@ -337,7 +334,7 @@ cb_ident (pfile, line, str)
unsigned int line;
const cpp_string * str;
{
maybe_print_line (line);
maybe_print_line (print.map, line);
fprintf (print.outf, "#ident \"%s\"\n", str->text);
print.line++;
}
@ -348,7 +345,7 @@ cb_define (pfile, line, node)
unsigned int line;
cpp_hashnode *node;
{
maybe_print_line (line);
maybe_print_line (print.map, line);
fputs ("#define ", print.outf);
/* -dD command line option. */
@ -367,7 +364,7 @@ cb_undef (pfile, line, node)
unsigned int line;
cpp_hashnode *node;
{
maybe_print_line (line);
maybe_print_line (print.map, line);
fprintf (print.outf, "#undef %s\n", NODE_NAME (node));
print.line++;
}
@ -379,11 +376,14 @@ cb_include (pfile, line, dir, header)
const unsigned char *dir;
const cpp_token *header;
{
maybe_print_line (line);
maybe_print_line (print.map, line);
fprintf (print.outf, "#%s %s\n", dir, cpp_token_as_text (pfile, header));
print.line++;
}
/* The file name, line number or system header flags have changed, as
described in FC. NB: the old print.map must be considered invalid. */
static void
cb_file_change (pfile, fc)
cpp_reader *pfile ATTRIBUTE_UNUSED;
@ -395,7 +395,7 @@ cb_file_change (pfile, fc)
change callback specially, so that a first line of "# 1 "foo.c"
in file foo.i outputs just the foo.c line, and not a foo.i line. */
if (fc->reason == LC_ENTER && !first_time)
maybe_print_line (fc->line - 1);
maybe_print_line (fc->map - 1, fc->line - 1);
print.map = fc->map;
if (fc->externc)
@ -414,7 +414,7 @@ cb_file_change (pfile, fc)
else if (fc->reason == LC_LEAVE)
flags = " 2";
print_line (fc->line, flags);
print_line (print.map, fc->line, flags);
}
}
@ -425,7 +425,7 @@ cb_def_pragma (pfile, line)
cpp_reader *pfile;
unsigned int line;
{
maybe_print_line (line);
maybe_print_line (print.map, line);
fputs ("#pragma ", print.outf);
cpp_output_line (pfile, print.outf);
print.line++;

View File

@ -69,7 +69,8 @@ extern void free_line_maps
at least as long as the final call to lookup_line ().
FROM_LINE should be monotonic increasing across calls to this
function. */
function. A call to this function can relocate the previous set of
maps, so any stored line_map pointers should not be used. */
extern struct line_map *add_line_map
PARAMS ((struct line_maps *, enum lc_reason,
unsigned int from_line, const char *to_file, unsigned int to_line));