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/Commands/CMakeLists.txt b/lldb/source/Commands/CMakeLists.txt
index cee8146..c27a805 100644
--- a/lldb/source/Commands/CMakeLists.txt
+++ b/lldb/source/Commands/CMakeLists.txt
@@ -29,4 +29,5 @@
   CommandObjectVersion.cpp
   CommandObjectWatchpoint.cpp
   CommandObjectWatchpointCommand.cpp
+  CommandObjectLanguage.cpp
   )
diff --git a/lldb/source/Commands/CommandObjectLanguage.cpp b/lldb/source/Commands/CommandObjectLanguage.cpp
new file mode 100644
index 0000000..ae1df6c
--- /dev/null
+++ b/lldb/source/Commands/CommandObjectLanguage.cpp
@@ -0,0 +1,46 @@
+//===-- CommandObjectLanguage.cpp -------------------------------*- C++ -*-===//

+//

+//                     The LLVM Compiler Infrastructure

+//

+// This file is distributed under the University of Illinois Open Source

+// License. See LICENSE.TXT for details.

+//

+//===----------------------------------------------------------------------===//

+

+#include "lldb/lldb-python.h"

+

+#include "CommandObjectLanguage.h"

+

+#include "lldb/Host/Host.h"

+

+#include "lldb/Interpreter/CommandInterpreter.h"

+#include "lldb/Interpreter/CommandReturnObject.h"

+

+#include "lldb/Target/LanguageRuntime.h"

+

+using namespace lldb;

+using namespace lldb_private;

+

+CommandObjectLanguage::CommandObjectLanguage (CommandInterpreter &interpreter) :

+CommandObjectMultiword (interpreter,

+                        "language",

+                        "A set of commands for managing language-specific functionality.'.",

+                        "language <language-name> <subcommand> [<subcommand-options>]"

+                        )

+{

+    //Let the LanguageRuntime populates this command with subcommands

+    LanguageRuntime::InitializeCommands(this);

+}

+

+void

+CommandObjectLanguage::GenerateHelpText (Stream &output_stream) {

+    CommandObjectMultiword::GenerateHelpText(output_stream);

+

+    output_stream << "\nlanguage name can be one of the following:\n";

+

+    LanguageRuntime::PrintAllLanguages(output_stream, "  ", "\n");

+}

+

+CommandObjectLanguage::~CommandObjectLanguage ()

+{

+}

diff --git a/lldb/source/Commands/CommandObjectLanguage.h b/lldb/source/Commands/CommandObjectLanguage.h
new file mode 100644
index 0000000..751fe14
--- /dev/null
+++ b/lldb/source/Commands/CommandObjectLanguage.h
@@ -0,0 +1,41 @@
+//===-- CommandObjectLanguage.h ---------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandObjectLanguage_h_
+#define liblldb_CommandObjectLanguage_h_
+
+// C Includes
+// C++ Includes
+
+
+// Other libraries and framework includes
+// Project includes
+
+#include "lldb/lldb-types.h"
+#include "lldb/Interpreter/CommandObjectMultiword.h"
+
+namespace lldb_private {
+    class CommandObjectLanguage : public CommandObjectMultiword
+    {
+    public:
+        CommandObjectLanguage (CommandInterpreter &interpreter);
+        
+        virtual
+        ~CommandObjectLanguage ();
+        
+        virtual void
+        GenerateHelpText (Stream &output_stream);
+        
+    protected:
+        bool
+        DoExecute (Args& command, CommandReturnObject &result);
+    };
+} // namespace lldb_private
+
+#endif  // liblldb_CommandObjectLanguage_h_