mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
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
This commit is contained in:
@@ -16,25 +16,48 @@
|
||||
#include <vector>
|
||||
|
||||
namespace {
|
||||
typedef std::vector<llvmc::BasePlugin*> PluginRegistry;
|
||||
static PluginRegistry GlobalPluginRegistry;
|
||||
|
||||
// Registry::Add<> does not do lifetime management (probably issues
|
||||
// with static constructor/destructor ordering), so we have to
|
||||
// implement it here.
|
||||
//
|
||||
// All this static registration/life-before-main model seems
|
||||
// unnecessary convoluted to me.
|
||||
|
||||
static bool pluginListInitialized = false;
|
||||
typedef std::vector<const llvmc::BasePlugin*> PluginList;
|
||||
static PluginList Plugins;
|
||||
}
|
||||
|
||||
namespace llvmc {
|
||||
|
||||
RegisterPluginImpl::RegisterPluginImpl(BasePlugin* plugin) {
|
||||
GlobalPluginRegistry.push_back(plugin);
|
||||
PluginLoader::PluginLoader() {
|
||||
if (!pluginListInitialized) {
|
||||
for (PluginRegistry::iterator B = PluginRegistry::begin(),
|
||||
E = PluginRegistry::end(); B != E; ++B)
|
||||
Plugins.push_back(B->instantiate());
|
||||
}
|
||||
pluginListInitialized = true;
|
||||
}
|
||||
|
||||
void PopulateLanguageMap(LanguageMap& langMap) {
|
||||
for (PluginRegistry::const_iterator B = GlobalPluginRegistry.begin(),
|
||||
E = GlobalPluginRegistry.end(); B != E; ++B)
|
||||
PluginLoader::~PluginLoader() {
|
||||
if (pluginListInitialized) {
|
||||
for (PluginList::iterator B = Plugins.begin(), E = Plugins.end();
|
||||
B != E; ++B)
|
||||
delete (*B);
|
||||
}
|
||||
pluginListInitialized = false;
|
||||
}
|
||||
|
||||
void PluginLoader::PopulateLanguageMap(LanguageMap& langMap) {
|
||||
for (PluginList::iterator B = Plugins.begin(), E = Plugins.end();
|
||||
B != E; ++B)
|
||||
(*B)->PopulateLanguageMap(langMap);
|
||||
}
|
||||
|
||||
void PopulateCompilationGraph(CompilationGraph& graph) {
|
||||
for (PluginRegistry::const_iterator B = GlobalPluginRegistry.begin(),
|
||||
E = GlobalPluginRegistry.end(); B != E; ++B)
|
||||
void PluginLoader::PopulateCompilationGraph(CompilationGraph& graph) {
|
||||
for (PluginList::iterator B = Plugins.begin(), E = Plugins.end();
|
||||
B != E; ++B)
|
||||
(*B)->PopulateCompilationGraph(graph);
|
||||
}
|
||||
|
||||
|
@@ -85,8 +85,9 @@ int main(int argc, char** argv) {
|
||||
cl::ParseCommandLineOptions
|
||||
(argc, argv, "LLVM Compiler Driver (Work In Progress)", true);
|
||||
|
||||
PopulateLanguageMap(langMap);
|
||||
PopulateCompilationGraph(graph);
|
||||
PluginLoader Plugins;
|
||||
Plugins.PopulateLanguageMap(langMap);
|
||||
Plugins.PopulateCompilationGraph(graph);
|
||||
|
||||
if (WriteGraph) {
|
||||
graph.writeGraph();
|
||||
|
@@ -25,7 +25,7 @@ struct MyPlugin : public llvmc::BasePlugin {
|
||||
{}
|
||||
};
|
||||
|
||||
static llvmc::RegisterPlugin<MyPlugin> RP;
|
||||
static llvmc::RegisterPlugin<MyPlugin> RP("Hello", "Hello World plugin");
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user