cpplib: Macro use location and comparison
authorNathan Sidwell <nathan@acm.org>
Mon, 2 Nov 2020 16:29:58 +0000 (08:29 -0800)
committerNathan Sidwell <nathan@acm.org>
Mon, 2 Nov 2020 16:56:38 +0000 (08:56 -0800)
commite9a2e208dd763bf71b0cc9db8526ef8f47ee289e
tree0d5f2dd77fcc92b927b3b4bbfb97f8cac4cb9a92
parent1c689b827c6a0a5e164f22865696a94e6d7ec308
cpplib:  Macro use location and comparison

Our macro use hook passes a location, but doesn't recieve it from the
using location.  This patch adds the extra location_t parameter and
passes it though.

A second cleanup is breaking out the macro comparison code from the
redefinition warning.  That;ll turn out useful for modules.

Finally, there's a filename comparison needed for the location
optimization of rewinding from line 2 (occurs during the emission of
builtin macros).

libcpp/
* internal.h (_cpp_notify_macro_use): Add location parm.
(_cpp_maybe_notify_macro_use): Likewise.
* directives.c (_cpp_do_file_change): Check we've not changed file
when optimizing a rewind.
(do_ifdef): Pass location to _cpp_maybe_notify_macro_use.
(do_ifndef): Likewise.  Delete obsolete comment about powerpc.
* expr.c (parse_defined): Pass location to
_cpp_maybe_notify_macro_use.
* macro.c (enter_macro_context): Likewise.
(warn_of_redefinition): Break out helper function.  Call it.
(compare_macros): New function broken out of warn_of_redefinition.
(_cpp_new_macro): Zero all fields.
(_cpp_notify_macro_use): Add location parameter.
libcpp/directives.c
libcpp/expr.c
libcpp/internal.h
libcpp/macro.c