[cfe-commits] [PATCH] Implement a better plugin API for clang, v2

Joshua Cranmer pidgeot18 at gmail.com
Thu Jul 5 13:05:40 PDT 2012

On 6/28/2012 11:43 PM, Richard Smith wrote:
> It seems strange to split the key=value part of plugin arguments in 
> the frontend. Why not just let the plugin do that, if it wants the 
> argument split that way?
I think that key=value pairs are sufficiently common to be worthwhile to 
parse beforehand, since they'll be the form that is used to pass in 
things like auxiliary configuration details, output files, etc.
> GCC's plugin API tells the plugin what its name is (for use in 
> diagnostics etc). Might it make sense to do the same?
I don't know how helpful this feature is. On reflection, it strikes me 
that the path of the library file might be useful (so you can load a 
"global" data file which is sited relative to the library or something), 
but I'm not sure it's worth complicating the UI without a use case.
> +/// Helper macro to call a given function in a plugin:
> +/// CALL_PLUGIN_FUNCTION(plugin, clang_plugin_some_func, (arg1, arg2))
> +#define CALL_PLUGIN_FUNCTION(plugin, fname, Args) \
> +  do { \
> +    Plugin::fname Func_ = 
> (Plugin::fname)(plugin)->getFunctionCall(#fname); \
> +    if (Func_) \
> +      Func_ Args; \
> +  } while (0)
> +
> +  // These typedefs must have the same signatures as the ones in
> +  // clang/Basic/Plugin.h, including the same name (it makes the 
> helper macro
> +  // above work properly).
> +  typedef void (*clang_plugin_begin_file)(StringRef, const 
> CompilerInstance &,
> +  plugin::PluginFileCallbacks &);
> +  typedef void (*clang_plugin_end_file)();
> +  typedef void (*clang_plugin_destroy)();
> Maybe you could add a PluginAPI.def x-macro for these, and generate 
> Plugin member functions to perform the getAddressOfSymbol + call from 
> that?

I don't think macros are powerful enough to generate the member 
functions here, since it would need both function argument types and 
argument names :-(

Joshua Cranmer
News submodule owner
DXR coauthor

More information about the cfe-commits mailing list