On 09/29/2011 05:21 PM, Dodji Seketeli wrote:
+ When the token is /not/ an argument for a macro, xI is the same
+ location as yI. Otherwise, xI is either the virtual location of
+ that argument token if it comes from a macro expansion itself, or
+ its spelling location.
I think this could be a little clearer:
.... Otherwise, xI is the location of the token outside this macro
expansion. If this macro was expanded from another macro expansion, xI
is a virtual location representing the token in that macro expansion;
otherwise, it is the spelling location of the token.
+ /* This is the location of the expansion point of the current macro
+ map. That expansion point location is held by the map that was
+ current right before the current one. It could have been either
+ a macro or an ordinary map, depending on if we are in a
+ nested expansion context not. */
This should clarify what location the expansion point is: is it the
location of the macro name? the closing paren?
+source_location linemap_macro_map_loc_to_def_point (const struct line_map*,
+ source_location);
+source_location linemap_macro_map_loc_unwind_toward_spelling (const struct line
_map*,
+ source_location);
+source_location linemap_macro_map_loc_to_exp_point (const struct line_map*,
+ source_location);
These should be static.
+const struct line_map *linemap_enter_macro (struct line_maps *,
+ struct cpp_hashnode*,
+ source_location,
+ unsigned int);
+source_location linemap_add_macro_token (const struct line_map *,
+ unsigned int,
+ source_location,
+ source_location);
+int linemap_get_expansion_line (struct line_maps *,
+ source_location);
+const char* linemap_get_expansion_filename (struct line_maps *,
+ source_location);
And these should be declared in an internal header, not the public
include/line-map.h.
+/* Expand source code location LOC and return a user readable source
+ code location. */
+expanded_location linemap_expand_location (const struct line_map *,
+ source_location loc);
+
+/* Expand source code location LOC and return a user readable source
+ code location. The LRK parameter is the same as for
+ linemap_resolve_location. */
+
+expanded_location linemap_expand_location_full (struct line_maps *,
These comments should clarify that the first function only takes
spelling locations, while the second also takes virtual locations.
-finish_declspecs (struct c_declspecs *specs)
+finish_declspecs (struct c_declspecs *specs,
+ location_t where)
I'm not sure the beginning of the declspecs is a better place for these
diagnostics than the beginning of the declarator. Why make this change?
Jason