Hello Dehao,

I have mostly cosmetic comments to make about the libcpp parts.

Dehao Chen <de...@google.com> writes:

> Index: libcpp/include/line-map.h
> ===================================================================
> *** libcpp/include/line-map.h (revision 189835)
> --- libcpp/include/line-map.h (working copy)
> *************** struct GTY(()) line_map_ordinary {
> *** 89,95 ****
>

Just to sum things up, here is what I understand from the libcpp
changes.

The integer space is now segmented like this:

    X  A  B  C
    [        ]  <--- integer space of source_location

C is the smallest possible source_location and X is the biggest
possible.

>From X to A, we have instances of source_location encoded in an ad-hoc
client specific (from the point of view of libcpp/line-map) map.

>From A to B, we have instances of source_location encoded in macro maps.

>From B to C, we have instances of source_location encoded in ordinary
maps.

As of this patch, MAX_SOURCE_LOCATION is A.  X is 0xFFFFFFFF and is not
represented by any particular constant declaration.

>From the point of view libcpp the goal of this patch is to 

1/ Provide functions to encode a pair of 
   {non-ad-hoc source_location, client specific data} and yield an
   integer for that (a new instance of source_location).

2/ modify the lookup routines of line-map to have them recognize
   instances of source_location encoded in the ad-hoc map.

If this description is correct, I think a high level comment like this
should be added to line-map.c or line-map.h to help people understand
this in the future, a bit like what has been done for ordinary and macro
maps.

[...]

> + extern void *get_block_from_location (source_location);

I'd call this function get_block_from_ad_hoc_location instead.  Or
something like that, to hint at the fact that the parameter is not an
actual source location.

> + extern source_location get_locus_from_location (source_location);

Likewise, I'd call this get_source_location_from_ad_hoc_loc.

> +
> + #define COMBINE_LOCATION(LOC, BLOCK) \
> +   ((BLOCK) ? get_combine_location ((LOC), (BLOCK)) : (LOC))
> + #define IS_COMBINED_LOCATION(LOC) (((LOC) & MAX_SOURCE_LOCATION) != (LOC))
> +
>   /* Initialize a line map set.  */
>   extern void linemap_init (struct line_maps *);
>
> *************** typedef struct
> *** 594,599 ****
> --- 604,611 ----
>
>     int column;
>
> +   void *block;
> +

I'd just call this 'data' or something like, and add I comment
explaining that its a client specific data that is not manipulated by
libcpp.

>     /* In a system header?. */
>     bool sysp;
>   } expanded_location;


> --- libcpp/line-map.c (working copy)

[...]


> + struct location_block {
> +   source_location locus;
> +   void *block;
> + };

I think we should have a more general name than "block" here.  I am
thinking that other client code might be willing to associate entities
other than blocks to a given source_location in a scheme similar to this
one.  Also, it seems surprising to have the line-maps library deal with
blocks specifically.

So maybe something like this instead?:

    /* Data structure to associate an arbitrary data to a source location.  */
    struct location_ad_hoc_data {
      source_location locus;
      void *data;
    };


Subsequently, if you agree with this, all the occurrences of 'block' in
the new code (function, types, and variable names) you introduced should
be replaced with 'ad_hoc_data'.

> + source_location
> + get_combine_location (source_location locus, void *block)

Shouldn't this be get_combined_location instead?  Note the 'd' after the
combine.

> --- gcc/input.h       (working copy)

[...]

> + #define LOCATION_LOCUS(LOC) \
> +   ((IS_COMBINED_LOCATION(LOC)) ? get_locus_from_location (LOC) : (LOC))

I think this name sounds confusing.  Maybe something like
SOURCE_LOCATION_FROM_AD_HOC_LOC instead?  And please add a comment to
explain a little bit about this business of ad hoc location that
associates a block with an actual source location.

> + #define LOCATION_BLOCK(LOC) \
> +   ((tree) ((IS_COMBINED_LOCATION (LOC)) ? get_block_from_location (LOC) \
> +   : NULL))

And the name of this macro would then be something like BLOCK_FROM_AD_HOC_LOC.

> + #define IS_UNKNOWN_LOCATION(LOC) \
> +   ((IS_COMBINED_LOCATION (LOC)) ? get_locus_from_location (LOC) == 0 \
> +   : (LOC) == 0)

-- 
                Dodji

Reply via email to