diff --git a/gcc/ChangeLog b/gcc/ChangeLog index add224b1c28..6e84eb6df51 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2000-08-29 Zack Weinberg + + * cpperror.c (print_file_and_line): If line is (unsigned int)-1, + print just the filename. + * cpplex.c (_cpp_run_directive): Add additional argument, the + name to give the synthetic buffer. This defaults to + translated "". + * cpplib.c (cpp_define, cpp_undef, cpp_assert, cpp_unassert): + Adjust to match. + (_cpp_define_builtin): New function. + * cppinit.c (initialize_builtins): Use _cpp_define_builtin. + * cpphash.h: Update prototypes. + + * tradcpp.c (main): Process -D and -U simultaneously, in the + order they appeared on the command line. + 2000-08-29 Kaveh R. Ghazi * c-decl.c (define_label): Call warning_with_file_and_line and diff --git a/gcc/cpperror.c b/gcc/cpperror.c index edf199273fc..a6c7b2dbf3e 100644 --- a/gcc/cpperror.c +++ b/gcc/cpperror.c @@ -91,17 +91,15 @@ print_file_and_line (filename, line, column) const char *filename; unsigned int line, column; { - if (line == 0) - fputs (_(": "), stderr); + if (filename == 0 || *filename == '\0') + filename = ""; + + if (line == (unsigned int)-1) + fprintf (stderr, "%s: ", filename); + else if (column > 0) + fprintf (stderr, "%s:%u:%u: ", filename, line, column); else - { - if (filename == 0 || *filename == '\0') - filename = ""; - if (column > 0) - fprintf (stderr, "%s:%u:%u: ", filename, line, column); - else - fprintf (stderr, "%s:%u: ", filename, line); - } + fprintf (stderr, "%s:%u: ", filename, line); } /* Set up for an error message: print the file and line, bump the error diff --git a/gcc/cpphash.h b/gcc/cpphash.h index 23e1d813b0b..45abb691975 100644 --- a/gcc/cpphash.h +++ b/gcc/cpphash.h @@ -267,7 +267,8 @@ extern int _cpp_equiv_tokens PARAMS ((const cpp_token *, const cpp_token *)); extern void _cpp_run_directive PARAMS ((cpp_reader *, const struct directive *, - const char *, size_t)); + const char *, size_t, + const char *)); extern unsigned int _cpp_get_line PARAMS ((cpp_reader *, unsigned int *)); extern const cpp_token *_cpp_get_token PARAMS ((cpp_reader *)); @@ -284,6 +285,8 @@ extern cpp_hashnode *_cpp_parse_assertion PARAMS ((cpp_reader *, struct answer **)); extern struct answer **_cpp_find_answer PARAMS ((cpp_hashnode *, const cpp_toklist *)); +extern void _cpp_define_builtin PARAMS ((cpp_reader *, const char *)); + extern void _cpp_init_stacks PARAMS ((cpp_reader *)); extern void _cpp_cleanup_stacks PARAMS ((cpp_reader *)); extern void _cpp_init_internal_pragmas PARAMS ((cpp_reader *)); diff --git a/gcc/cppinit.c b/gcc/cppinit.c index f1ed54fd85f..fbccfc358ed 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -610,9 +610,9 @@ initialize_builtins (pfile) if (b->flags & VERS) { - /* Allocate enough space for 'name="value"\0'. */ - str = xmalloc (b->len + strlen (version_string) + 4); - sprintf (str, "%s=\"%s\"", b->name, version_string); + /* Allocate enough space for 'name "value"\n\0'. */ + str = alloca (b->len + strlen (version_string) + 5); + sprintf (str, "%s \"%s\"\n", b->name, version_string); } else { @@ -621,13 +621,12 @@ initialize_builtins (pfile) else val = b->value; - /* Allocate enough space for "name=value\0". */ - str = xmalloc (b->len + strlen (val) + 2); - sprintf(str, "%s=%s", b->name, val); + /* Allocate enough space for "name value\n\0". */ + str = alloca (b->len + strlen (val) + 3); + sprintf(str, "%s %s\n", b->name, val); } - cpp_define (pfile, str); - free (str); + _cpp_define_builtin (pfile, str); } else { diff --git a/gcc/cpplex.c b/gcc/cpplex.c index ba53e5cd616..37d1de8c440 100644 --- a/gcc/cpplex.c +++ b/gcc/cpplex.c @@ -3565,16 +3565,23 @@ _cpp_skip_rest_of_line (pfile) /* Directive handler wrapper used by the command line option processor. */ void -_cpp_run_directive (pfile, dir, buf, count) +_cpp_run_directive (pfile, dir, buf, count, name) cpp_reader *pfile; const struct directive *dir; const char *buf; size_t count; + const char *name; { if (cpp_push_buffer (pfile, (const U_CHAR *)buf, count) != NULL) { unsigned int prev_lvl = 0; + if (name) + CPP_BUFFER (pfile)->nominal_fname = name; + else + CPP_BUFFER (pfile)->nominal_fname = _(""); + CPP_BUFFER (pfile)->lineno = (unsigned int)-1; + /* Scan the line now, else prevent_macro_expansion won't work. */ lex_next (pfile, 1); if (! (dir->flags & EXPAND)) diff --git a/gcc/cpplib.c b/gcc/cpplib.c index 2cc956dea42..3273dce4544 100644 --- a/gcc/cpplib.c +++ b/gcc/cpplib.c @@ -1410,7 +1410,20 @@ cpp_define (pfile, str) strcpy (&buf[count-4], " 1\n"); } - _cpp_run_directive (pfile, &dtable[T_DEFINE], buf, count - 1); + _cpp_run_directive (pfile, &dtable[T_DEFINE], buf, count - 1, 0); +} + +/* Slight variant of the above for use by initialize_builtins, which (a) + knows how to set up the buffer itself, (b) needs a different "filename" + tag. */ +void +_cpp_define_builtin (pfile, str) + cpp_reader *pfile; + const char *str; +{ + _cpp_run_directive (pfile, &dtable[T_DEFINE], + str, strlen (str), + _("")); } /* Process MACRO as if it appeared as the body of an #undef. */ @@ -1419,7 +1432,7 @@ cpp_undef (pfile, macro) cpp_reader *pfile; const char *macro; { - _cpp_run_directive (pfile, &dtable[T_UNDEF], macro, strlen (macro)); + _cpp_run_directive (pfile, &dtable[T_UNDEF], macro, strlen (macro), 0); } /* Process the string STR as if it appeared as the body of a #assert. */ @@ -1428,7 +1441,7 @@ cpp_assert (pfile, str) cpp_reader *pfile; const char *str; { - _cpp_run_directive (pfile, &dtable[T_ASSERT], str, strlen (str)); + _cpp_run_directive (pfile, &dtable[T_ASSERT], str, strlen (str), 0); } /* Process STR as if it appeared as the body of an #unassert. */ @@ -1437,7 +1450,7 @@ cpp_unassert (pfile, str) cpp_reader *pfile; const char *str; { - _cpp_run_directive (pfile, &dtable[T_UNASSERT], str, strlen (str)); + _cpp_run_directive (pfile, &dtable[T_UNASSERT], str, strlen (str), 0); } /* Determine whether the identifier ID, of length LEN, is a defined macro. */ diff --git a/gcc/tradcpp.c b/gcc/tradcpp.c index 5e88c022989..125e2cbe602 100644 --- a/gcc/tradcpp.c +++ b/gcc/tradcpp.c @@ -711,14 +711,11 @@ main (argc, argv) and option processing. */ initialize_builtins (); - /* Do defines specified with -D. */ + /* Do defines specified with -D and undefines specified with -U. */ for (i = 1; i < argc; i++) if (pend_defs[i]) make_definition ((U_CHAR *)pend_defs[i]); - - /* Do undefines specified with -U. */ - for (i = 1; i < argc; i++) - if (pend_undefs[i]) + else if (pend_undefs[i]) make_undef ((U_CHAR *)pend_undefs[i]); /* Unless -fnostdinc,