On 08/09/2011 10:54 AM, Dodji Seketeli wrote:
+ goto ftrack_macro_expansion_with_arg; + + case OPT_ftrack_macro_expansion_: + ftrack_macro_expansion_with_arg:
Instead of the goto, just write /* Fall through. */
+consumption if necessary. Value @samp{0} of @var{level} de-activates +this option just as if no @option{-ftrack-macro-expansion} was present +on the command line. Value @samp{1} tracks tokens locations in a +degraded mode for the sake of minimal memory overhead. In this mode +all tokens resulting from the expansion of an argument of a +function-like macro have the same location. Value @samp{2} tracks +tokens locations completely. This value is the most memory hungry. It +is the default value.
"It is the default value" sounds to me like no -ftrack-macro-expansion option is equivalent to -ftrack-macro-expansion=2, rather than =0.
+ expansion of arguments of function-like macro. all macro + expansion. 2 Means we do track all macro expansions. This last
Seems like the "all macro expansion" is left over from a previous version of this sentence.
+/* This describes some additional data that is added to the macro + token context of type cpp_context, when -ftrack-macro-expansion is + on. */ +typedef struct +{ + /* The node of the macro we are referring to. */ + cpp_hashnode *macro_node; + /* This buffer contains an array of virtual locations. The virtual + location at index 0 is the virtual location of the token at index + 0 in the current instance of cpp_context; similarly for all the + other virtual locations. */ + source_location *virt_locs; + /* This is a pointer to the current virtual location. This is used + to iterate over the virtual locations while we iterate over the + tokens they belong to. */ + source_location *cur_virt_loc; +} macro_context;
Why track virtual locations separately rather than use them directly as the src_loc of the tokens?
Jason