Add language command and LanguageRuntime plugin changes to allow vending of command objects.

Differential Revision: http://reviews.llvm.org/D9402

llvm-svn: 236443
diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp
index 95574cb2..67581b5 100644
--- a/lldb/source/Core/PluginManager.cpp
+++ b/lldb/source/Core/PluginManager.cpp
@@ -885,6 +885,7 @@
     ConstString name;
     std::string description;
     LanguageRuntimeCreateInstance create_callback;
+    LanguageRuntimeGetCommandObject command_callback;
 };
 
 typedef std::vector<LanguageRuntimeInstance> LanguageRuntimeInstances;
@@ -908,7 +909,8 @@
 (
     const ConstString &name,
     const char *description,
-    LanguageRuntimeCreateInstance create_callback
+    LanguageRuntimeCreateInstance create_callback,
+    LanguageRuntimeGetCommandObject command_callback
 )
 {
     if (create_callback)
@@ -919,6 +921,7 @@
         if (description && description[0])
             instance.description = description;
         instance.create_callback = create_callback;
+        instance.command_callback = command_callback;
         Mutex::Locker locker (GetLanguageRuntimeMutex ());
         GetLanguageRuntimeInstances ().push_back (instance);
     }
@@ -956,6 +959,16 @@
     return NULL;
 }
 
+LanguageRuntimeGetCommandObject
+PluginManager::GetLanguageRuntimeGetCommandObjectAtIndex (uint32_t idx)
+{
+    Mutex::Locker locker (GetLanguageRuntimeMutex ());
+    LanguageRuntimeInstances &instances = GetLanguageRuntimeInstances ();
+    if (idx < instances.size())
+        return instances[idx].command_callback;
+    return NULL;
+}
+
 LanguageRuntimeCreateInstance
 PluginManager::GetLanguageRuntimeCreateCallbackForPluginName (const ConstString &name)
 {