* cpphash.h (struct cpp_reader): New member directive_line.
* cpplib.h (struct cpp_callbacks): Update prototypes of callbacks.
* cpplib.c (do_define, do_undef, do_ident, do_include_common,
do_pragma): Pass line to callbacks.
(start_directive): Record line of directive.
* cppmain.c (cb_ident, cb_define, cb_undef, cb_def_pragma,
cb_include): Similarly.
* c-lex.c (cb_ident, cb_define, cb_undef, cb_def_pragma):
Similarly.
From-SVN: r44637
+2001-08-04 Neil Booth <neil@daikokuya.demon.co.uk>
+
+ * cpphash.h (struct cpp_reader): New member directive_line.
+ * cpplib.h (struct cpp_callbacks): Update prototypes of callbacks.
+ * cpplib.c (do_define, do_undef, do_ident, do_include_common,
+ do_pragma): Pass line to callbacks.
+ (start_directive): Record line of directive.
+ * cppmain.c (cb_ident, cb_define, cb_undef, cb_def_pragma,
+ cb_include): Similarly.
+ * c-lex.c (cb_ident, cb_define, cb_undef, cb_def_pragma):
+ Similarly.
+
2001-08-04 Hans-Peter Nilsson <hp@bitrange.com>
* config/d30v/d30v.h: Fix typo in start of UNIQUE_SECTION
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_ident PARAMS ((cpp_reader *, const cpp_string *));
+static void cb_ident PARAMS ((cpp_reader *, unsigned int,
+ const cpp_string *));
static void cb_file_change PARAMS ((cpp_reader *, const cpp_file_change *));
-static void cb_def_pragma PARAMS ((cpp_reader *));
-static void cb_define PARAMS ((cpp_reader *, cpp_hashnode *));
-static void cb_undef PARAMS ((cpp_reader *, cpp_hashnode *));
+static void cb_def_pragma PARAMS ((cpp_reader *, unsigned int));
+static void cb_define PARAMS ((cpp_reader *, unsigned int,
+ cpp_hashnode *));
+static void cb_undef PARAMS ((cpp_reader *, unsigned int,
+ cpp_hashnode *));
\f
const char *
init_c_lex (filename)
No need to deal with linemarkers under normal conditions. */
static void
-cb_ident (pfile, str)
+cb_ident (pfile, line, str)
cpp_reader *pfile ATTRIBUTE_UNUSED;
+ unsigned int line ATTRIBUTE_UNUSED;
const cpp_string *str ATTRIBUTE_UNUSED;
{
#ifdef ASM_OUTPUT_IDENT
}
static void
-cb_def_pragma (pfile)
+cb_def_pragma (pfile, line)
cpp_reader *pfile;
+ unsigned int line ATTRIBUTE_UNUSED;
{
/* Issue a warning message if we have been asked to do so. Ignore
unknown pragmas in system headers unless an explicit
/* #define callback for DWARF and DWARF2 debug info. */
static void
-cb_define (pfile, node)
+cb_define (pfile, line, node)
cpp_reader *pfile;
+ unsigned int line ATTRIBUTE_UNUSED;
cpp_hashnode *node;
{
(*debug_hooks->define) (cpp_get_line (pfile)->line,
/* #undef callback for DWARF and DWARF2 debug info. */
static void
-cb_undef (pfile, node)
+cb_undef (pfile, line, node)
cpp_reader *pfile;
+ unsigned int line ATTRIBUTE_UNUSED;
cpp_hashnode *node;
{
(*debug_hooks->undef) (cpp_get_line (pfile)->line,
/* The position of the last lexed token and last lexed directive. */
cpp_lexer_pos lexer_pos;
cpp_lexer_pos directive_pos;
+ unsigned int directive_line;
/* Memory pools. */
cpp_pool ident_pool; /* For all identifiers, and permanent
/* Some handlers need the position of the # for diagnostics. */
pfile->directive_pos = pfile->lexer_pos;
+ pfile->directive_line = pfile->line;
/* Don't save directive tokens for external clients. */
pfile->la_saved = pfile->la_write;
{
if (_cpp_create_definition (pfile, node))
if (pfile->cb.define)
- (*pfile->cb.define) (pfile, node);
+ (*pfile->cb.define) (pfile, pfile->directive_line, node);
}
}
if (node && node->type == NT_MACRO)
{
if (pfile->cb.undef)
- (*pfile->cb.undef) (pfile, node);
+ (*pfile->cb.undef) (pfile, pfile->directive_line, node);
if (node->flags & NODE_WARN)
cpp_warning (pfile, "undefining \"%s\"", NODE_NAME (node));
/* Get out of macro context, if we are. */
end_directive (pfile, 1);
if (pfile->cb.include)
- (*pfile->cb.include) (pfile, pfile->directive->name, &header);
+ (*pfile->cb.include) (pfile, pfile->directive_line,
+ pfile->directive->name, &header);
_cpp_execute_include (pfile, &header, type);
}
if (str.type != CPP_STRING)
cpp_error (pfile, "invalid #ident");
else if (pfile->cb.ident)
- (*pfile->cb.ident) (pfile, &str.val.str);
+ (*pfile->cb.ident) (pfile, pfile->directive_line, &str.val.str);
check_eol (pfile);
}
if (handler)
(*handler) (pfile);
else if (pfile->cb.def_pragma)
- (*pfile->cb.def_pragma) (pfile);
+ (*pfile->cb.def_pragma) (pfile, pfile->directive_line);
}
static void
struct cpp_callbacks
{
void (*file_change) PARAMS ((cpp_reader *, const cpp_file_change *));
- void (*include) PARAMS ((cpp_reader *, const unsigned char *,
- const cpp_token *));
- void (*define) PARAMS ((cpp_reader *, cpp_hashnode *));
- void (*undef) PARAMS ((cpp_reader *, cpp_hashnode *));
- void (*ident) PARAMS ((cpp_reader *, const cpp_string *));
- void (*def_pragma) PARAMS ((cpp_reader *));
+ void (*include) PARAMS ((cpp_reader *, unsigned int,
+ const unsigned char *, const cpp_token *));
+ void (*define) PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
+ void (*undef) PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
+ void (*ident) PARAMS ((cpp_reader *, unsigned int, const cpp_string *));
+ void (*def_pragma) PARAMS ((cpp_reader *, unsigned int));
};
#define CPP_FATAL_LIMIT 1000
/* Callback routines for the parser. Most of these are active only
in specific modes. */
-static void cb_define PARAMS ((cpp_reader *, cpp_hashnode *));
-static void cb_undef PARAMS ((cpp_reader *, cpp_hashnode *));
-static void cb_include PARAMS ((cpp_reader *, const unsigned char *,
- const cpp_token *));
-static void cb_ident PARAMS ((cpp_reader *, const cpp_string *));
+static void cb_define PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
+static void cb_undef PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
+static void cb_include PARAMS ((cpp_reader *, unsigned int,
+ const unsigned char *, const cpp_token *));
+static void cb_ident PARAMS ((cpp_reader *, unsigned int,
+ const cpp_string *));
static void cb_file_change PARAMS ((cpp_reader *, const cpp_file_change *));
-static void cb_def_pragma PARAMS ((cpp_reader *));
+static void cb_def_pragma PARAMS ((cpp_reader *, unsigned int));
const char *progname; /* Needs to be global. */
static cpp_reader *pfile; /* An opaque handle. */
/* Callbacks. */
static void
-cb_ident (pfile, str)
+cb_ident (pfile, line, str)
cpp_reader *pfile ATTRIBUTE_UNUSED;
+ unsigned int line ATTRIBUTE_UNUSED;
const cpp_string * str;
{
maybe_print_line (cpp_get_line (pfile)->output_line);
}
static void
-cb_define (pfile, node)
+cb_define (pfile, line, node)
cpp_reader *pfile;
+ unsigned int line ATTRIBUTE_UNUSED;
cpp_hashnode *node;
{
maybe_print_line (cpp_get_line (pfile)->output_line);
}
static void
-cb_undef (pfile, node)
+cb_undef (pfile, line, node)
cpp_reader *pfile;
+ unsigned int line ATTRIBUTE_UNUSED;
cpp_hashnode *node;
{
maybe_print_line (cpp_get_line (pfile)->output_line);
}
static void
-cb_include (pfile, dir, header)
+cb_include (pfile, line, dir, header)
cpp_reader *pfile ATTRIBUTE_UNUSED;
+ unsigned int line ATTRIBUTE_UNUSED;
const unsigned char *dir;
const cpp_token *header;
{
/* Copy a #pragma directive to the preprocessed output. LINE is the
line of the current source file, not the logical line. */
static void
-cb_def_pragma (pfile)
+cb_def_pragma (pfile, line)
cpp_reader *pfile;
+ unsigned int line ATTRIBUTE_UNUSED;
{
maybe_print_line (cpp_get_line (pfile)->output_line);
fputs ("#pragma ", print.outf);