diff options
author | Neil Booth <neil@daikokuya.demon.co.uk> | 2001-09-14 22:04:46 +0000 |
---|---|---|
committer | Neil Booth <neil@gcc.gnu.org> | 2001-09-14 22:04:46 +0000 |
commit | 972938978677f76ef6af494932345945947852ee (patch) | |
tree | 4c00cb933362af65600541484760cce6502de1a6 /gcc/c-lex.c | |
parent | 4fb1661fea89a2d72f69dcbe341e253d4b3fffe3 (diff) | |
download | gcc-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.c | 18 |
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; |