[cfe-dev] Feature proposal: adding optional custom info to clang AST nodes.

Enea Zaffanella zaffanella at cs.unipr.it
Sat Aug 15 06:57:42 PDT 2009


Hello.

Our application uses clang to parse a program, build the corresponding 
AST and then visit the AST so as to collect many kinds of info. Our 
visitors typically exploit functionality provided by clang AST nodes.
However, sooner or later, we face the need to collect and cache 
additional info which is of interest for our visitors only: being 
ad-hoc, this info cannot be arbitrarily stored in clang AST nodes; on 
the other hand, storing it in the clang AST nodes would result in 
maximum efficiency, since we would avoid the need to maintain and query 
(potentially huge) data structures whose only purpose is to map a clang 
AST node into the corresponding additional info.

For the reasons above, we would like to propose a minor modification to 
the definition of the classes at the root of the clang AST hierarchy 
that, when enabled via a suitable configuration option, would let 
clients add arbitrary info to the clang AST nodes.

The basic idea is to have a new header file defining a suitable macro 
(e.g., CLANG_CLIENT_CUSTOM_INFO): the name of the header file will be 
fixed, but its content will be controlled by a clang configuration 
option. All the root classes for AST nodes (i.e., Decl, Stmt, Type) will 
include such a header file and will invoke the macro in their public 
section.

By default, when the customization mechanism is disabled, the macro will 
expand to no text at all, so as to incur zero overhead:

#define CLANG_CLIENT_CUSTOM_INFO

When customization is enabled, the macro will instead expand to whatever 
data the client might need; for instance:

#define CLANG_CLIENT_CUSTOM_INFO void* my_data;

Clearly, the client will be responsible of all the problems related with 
the management of customly allocated resources.

Does this approach sound reasonable?
Do you foresee better alternatives?

Cheers,
Enea Zaffanella.



More information about the cfe-dev mailing list