aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/CompilerDriver/Plugin.h
diff options
context:
space:
mode:
authorMikhail Glushenkov <foldr@codedgers.com>2008-09-22 20:51:19 +0000
committerMikhail Glushenkov <foldr@codedgers.com>2008-09-22 20:51:19 +0000
commit14ef05937fbf5fb747176710a475fa8a671e4a44 (patch)
treefa085bac24ef1ecc358a4d5f0515d948c2b95c98 /include/llvm/CompilerDriver/Plugin.h
parent4a1a77c1c9e0992735aa66b75c9e4c75c3b70561 (diff)
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.h45
1 files changed, 30 insertions, 15 deletions
diff --git a/include/llvm/CompilerDriver/Plugin.h b/include/llvm/CompilerDriver/Plugin.h
index ba22450697..bfaabee77b 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);
+ };
}