diff options
author | Mikhail Glushenkov <foldr@codedgers.com> | 2008-09-22 20:51:19 +0000 |
---|---|---|
committer | Mikhail Glushenkov <foldr@codedgers.com> | 2008-09-22 20:51:19 +0000 |
commit | b52720af22812b7adbd86f02ab123811aef9e475 (patch) | |
tree | fa085bac24ef1ecc358a4d5f0515d948c2b95c98 /include/llvm/CompilerDriver/Plugin.h | |
parent | 62ab31103a0656f6ce032e20d3874dd9c5c7cccc (diff) | |
download | external_llvm-b52720af22812b7adbd86f02ab123811aef9e475.zip external_llvm-b52720af22812b7adbd86f02ab123811aef9e475.tar.gz external_llvm-b52720af22812b7adbd86f02ab123811aef9e475.tar.bz2 |
Convert llvmc2 plugins to use llvm/Support/Registry.h machinery.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56467 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CompilerDriver/Plugin.h')
-rw-r--r-- | include/llvm/CompilerDriver/Plugin.h | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/include/llvm/CompilerDriver/Plugin.h b/include/llvm/CompilerDriver/Plugin.h index ba22450..bfaabee 100644 --- a/include/llvm/CompilerDriver/Plugin.h +++ b/include/llvm/CompilerDriver/Plugin.h @@ -14,6 +14,8 @@ #ifndef LLVM_TOOLS_LLVMC2_PLUGIN_H #define LLVM_TOOLS_LLVMC2_PLUGIN_H +#include "llvm/Support/Registry.h" + namespace llvmc { class LanguageMap; @@ -31,25 +33,38 @@ namespace llvmc { virtual void PopulateCompilationGraph(CompilationGraph&) const = 0; }; - // Helper class for RegisterPlugin. - class RegisterPluginImpl { - protected: - RegisterPluginImpl(BasePlugin*); - }; + typedef llvm::Registry<BasePlugin> PluginRegistry; - /// RegisterPlugin<T> template - Used to register LLVMC plugins. - template <class T> - struct RegisterPlugin : RegisterPluginImpl { - RegisterPlugin() : RegisterPluginImpl (new T()) {} + template <class P> + struct RegisterPlugin + : public PluginRegistry::Add<P> { + typedef PluginRegistry::Add<P> Base; + + RegisterPlugin(const char* Name = "Nameless", + const char* Desc = "Auto-generated plugin") + : Base(Name, Desc) {} }; - /// PopulateLanguageMap - Fills in the language map by calling - /// PopulateLanguageMap methods of all plugins. - void PopulateLanguageMap(LanguageMap& langMap); - /// PopulateCompilationGraph - Populates the compilation graph by - /// calling PopulateCompilationGraph methods of all plugins. - void PopulateCompilationGraph(CompilationGraph& tools); + /// PluginLoader - Helper class used by the main program for + /// lifetime management. + struct PluginLoader { + PluginLoader(); + ~PluginLoader(); + + /// PopulateLanguageMap - Fills in the language map by calling + /// PopulateLanguageMap methods of all plugins. + void PopulateLanguageMap(LanguageMap& langMap); + + /// PopulateCompilationGraph - Populates the compilation graph by + /// calling PopulateCompilationGraph methods of all plugins. + void PopulateCompilationGraph(CompilationGraph& tools); + + private: + // noncopyable + PluginLoader(const PluginLoader& other); + const PluginLoader& operator=(const PluginLoader& other); + }; } |