Romain Geissler <romain.geiss...@gmail.com> a écrit:

> I just checked again, and PLUGIN_FINISH_DECL is triggered for a
> typedef in C mode, but not in C++ mode. I'll patch that.

Correct.  This is because the event is emitted at the end of
cp_finish_decl, but that function has many return points.  Maybe
unifying all the those return points by replacing them with "goto out;"
and adding an "out" label right at the end, before emitting the event.

> When i recontributed the PLUGIN_FINISH_DECL patch from the original
> Brian Hackett, i didn't exactly checked  what may or may not trigger
> this new event. I know for example that declaring a function triggers
> this event, but defining it does not.
>
> I don't really know when those event should be triggered, we should
> clarify the meaning of those.
>
> According to me:
> PLUGIN_FINISH_DECL should be triggered anytime the parser parse a
> declaration (which includes declaration + definition of function,
> typedef definition, namespaces, ..., all DECL_P trees built by the
> parser).

The general idea sounds sensible, IMHO.  However, we must keep in mind
that there are cases like, e.g, 'struct C;' where G++ creates a typedef
'typedef struct C C;' so that you can name that type 'C' instead of
having to type "struct C' all the time.  For these cases, I don't think
the PLUGIN_FINISH_DECL event should be emitted.

> For, PLUGIN_FINISH_TYPE i don't really know it means a new type
> declaration (or declaration + definition) or if it means usage of a
> type (in a function prototype, the type of a local variable.

I'd say it's a definition of a new type, IMHO.

> I would rather vote for new type definition (including typedefs)

My understanding is that a typedef declaration doesn't define a new
type.  Rather, it declares an alias for an existing type.  As such, I
would think that notifying typedef declarations via PLUGIN_FINISH_DECL
would be the way to go.

> but for special cases of struct, you can declare and use them at the
> same time:

Just to be sure I understand, do you need to be notified about *uses* of
types and decls as well?  If so, maybe a new kind of event should
probably be defined, because PLUGIN_FINISH_DECL and PLUGIN_FINISH_TYPE
seem to have more to do with declaring/defining decls and types than
using them.

> So, what the real meaning of all those events ?

From plugin.def, I read:

 /* After finishing parsing a type.  */
 DEFEVENT (PLUGIN_FINISH_TYPE)

 /* After finishing parsing a declaration. */
 DEFEVENT (PLUGIN_FINISH_DECL)

I agree that's rather terse, but it doesn't seem to be related to the
use of the type/decls.

-- 
                Dodji

Reply via email to