aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-lex.c
diff options
context:
space:
mode:
authorNeil Booth <neil@daikokuya.demon.co.uk>2001-09-14 22:04:46 +0000
committerNeil Booth <neil@gcc.gnu.org>2001-09-14 22:04:46 +0000
commit972938978677f76ef6af494932345945947852ee (patch)
tree4c00cb933362af65600541484760cce6502de1a6 /gcc/c-lex.c
parent4fb1661fea89a2d72f69dcbe341e253d4b3fffe3 (diff)
downloadgcc-972938978677f76ef6af494932345945947852ee.zip
gcc-972938978677f76ef6af494932345945947852ee.tar.gz
gcc-972938978677f76ef6af494932345945947852ee.tar.bz2
cpperror.c (print_location): Take line and column, for default positioning use the previously lexed token.
* cpperror.c (print_location): Take line and column, for default positioning use the previously lexed token. (_cpp_begin_message): Take line and column. (cpp_ice, cpp_fatal, cpp_error, cpp_error_with_line, cpp_warning, cpp_warning_with_line, cpp_pedwarn, cpp_pedwarn_with_line): Update. * cpphash.h (_cpp_begin_message): Update prototype. * cppinit.c (push_include): Don't set output line. * cpplex.c (_cpp_lex_token): Callback for start of new output lines. * cpplib.c (do_diagnostic, _cpp_pop_buffer): Update. (do_pragma): Kludge for front ends. Don't expand macros at all. * cpplib.h (cpp_lookahead, cpp_token_with_pos, cpp_get_line): Remove. (struct cpp_token): Remove output_line. (struct cpp_callbacks): New member line_change. * cppmacro.c (builtin_macro, paste_all_tokens, replace_args, cpp_get_token): Preserve BOL flag. (cpp_get_line): Remove. (_cpp_backup_tokens): Remove useless abort(). * cppmain.c (cb_line_change): New. (scan_translation_unit): Don't worry about starting new lines here. * scan-decls.c (scan_decls): Update. * c-lex.c (c_lex, init_c_lex): Update. (cb_line_change, src_lineno): New. From-SVN: r45613
Diffstat (limited to 'gcc/c-lex.c')
-rw-r--r--gcc/c-lex.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/c-lex.c b/gcc/c-lex.c
index 669bb16..3a80a74 100644
--- a/gcc/c-lex.c
+++ b/gcc/c-lex.c
@@ -60,6 +60,9 @@ static const char *cpp_filename;
/* The current line map. */
static const struct line_map *map;
+/* The line used to refresh the lineno global variable after each token. */
+static unsigned int src_lineno;
+
/* We may keep statistics about how long which files took to compile. */
static int header_time, body_time;
static splay_tree file_info_tree;
@@ -89,6 +92,7 @@ static tree lex_string PARAMS ((const char *, unsigned int, int));
static tree lex_charconst PARAMS ((const cpp_token *));
static void update_header_times PARAMS ((const char *));
static int dump_one_header PARAMS ((splay_tree_node, void *));
+static void cb_line_change PARAMS ((cpp_reader *, const cpp_token *, int));
static void cb_ident PARAMS ((cpp_reader *, unsigned int,
const cpp_string *));
static void cb_file_change PARAMS ((cpp_reader *, const struct line_map *));
@@ -125,6 +129,7 @@ init_c_lex (filename)
cb = cpp_get_callbacks (parse_in);
+ cb->line_change = cb_line_change;
cb->ident = cb_ident;
cb->file_change = cb_file_change;
cb->def_pragma = cb_def_pragma;
@@ -243,6 +248,17 @@ cb_ident (pfile, line, str)
#endif
}
+/* Called at the start of every non-empty line. TOKEN is the first
+ lexed token on the line. Used for diagnostic line numbers. */
+static void
+cb_line_change (pfile, token, parsing_args)
+ cpp_reader *pfile ATTRIBUTE_UNUSED;
+ const cpp_token *token;
+ int parsing_args ATTRIBUTE_UNUSED;
+{
+ src_lineno = SOURCE_LINE (map, token->line);
+}
+
static void
cb_file_change (pfile, new_map)
cpp_reader *pfile ATTRIBUTE_UNUSED;
@@ -762,7 +778,7 @@ c_lex (value)
/* The C++ front end does horrible things with the current line
number. To ensure an accurate line number, we must reset it
every time we return a token. */
- lineno = SOURCE_LINE (map, cpp_get_line (parse_in)->line);
+ lineno = src_lineno;
*value = NULL_TREE;
type = tok.type;