Author: domipheus Date: Mon May 4 13:39:38 2015 New Revision: 236443 URL: http://llvm.org/viewvc/llvm-project?rev=236443&view=rev Log: Add language command and LanguageRuntime plugin changes to allow vending of command objects.
Differential Revision: http://reviews.llvm.org/D9402 Added: lldb/trunk/source/Commands/CommandObjectLanguage.cpp lldb/trunk/source/Commands/CommandObjectLanguage.h Modified: lldb/trunk/include/lldb/Core/PluginManager.h lldb/trunk/include/lldb/Target/LanguageRuntime.h lldb/trunk/include/lldb/lldb-private-interfaces.h lldb/trunk/source/Commands/CMakeLists.txt lldb/trunk/source/Core/PluginManager.cpp lldb/trunk/source/Interpreter/CommandInterpreter.cpp lldb/trunk/source/Target/LanguageRuntime.cpp Modified: lldb/trunk/include/lldb/Core/PluginManager.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/PluginManager.h?rev=236443&r1=236442&r2=236443&view=diff ============================================================================== --- lldb/trunk/include/lldb/Core/PluginManager.h (original) +++ lldb/trunk/include/lldb/Core/PluginManager.h Mon May 4 13:39:38 2015 @@ -137,7 +137,8 @@ public: static bool RegisterPlugin (const ConstString &name, const char *description, - LanguageRuntimeCreateInstance create_callback); + LanguageRuntimeCreateInstance create_callback, + LanguageRuntimeGetCommandObject command_callback = nullptr); static bool UnregisterPlugin (LanguageRuntimeCreateInstance create_callback); @@ -145,6 +146,9 @@ public: static LanguageRuntimeCreateInstance GetLanguageRuntimeCreateCallbackAtIndex (uint32_t idx); + static LanguageRuntimeGetCommandObject + GetLanguageRuntimeGetCommandObjectAtIndex (uint32_t idx); + static LanguageRuntimeCreateInstance GetLanguageRuntimeCreateCallbackForPluginName (const ConstString &name); Modified: lldb/trunk/include/lldb/Target/LanguageRuntime.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/LanguageRuntime.h?rev=236443&r1=236442&r2=236443&view=diff ============================================================================== --- lldb/trunk/include/lldb/Target/LanguageRuntime.h (original) +++ lldb/trunk/include/lldb/Target/LanguageRuntime.h Mon May 4 13:39:38 2015 @@ -34,6 +34,9 @@ public: static LanguageRuntime* FindPlugin (Process *process, lldb::LanguageType language); + + static void + InitializeCommands (CommandObject* parent); virtual lldb::LanguageType GetLanguageType () const = 0; Modified: lldb/trunk/include/lldb/lldb-private-interfaces.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-private-interfaces.h?rev=236443&r1=236442&r2=236443&view=diff ============================================================================== --- lldb/trunk/include/lldb/lldb-private-interfaces.h (original) +++ lldb/trunk/include/lldb/lldb-private-interfaces.h Mon May 4 13:39:38 2015 @@ -29,6 +29,7 @@ namespace lldb_private typedef EmulateInstruction * (*EmulateInstructionCreateInstance) (const ArchSpec &arch, InstructionType inst_type); typedef OperatingSystem* (*OperatingSystemCreateInstance) (Process *process, bool force); typedef LanguageRuntime *(*LanguageRuntimeCreateInstance) (Process *process, lldb::LanguageType language); + typedef lldb::CommandObjectSP (*LanguageRuntimeGetCommandObject) (CommandInterpreter& interpreter); typedef SystemRuntime *(*SystemRuntimeCreateInstance) (Process *process); typedef lldb::PlatformSP (*PlatformCreateInstance) (bool force, const ArchSpec *arch); typedef lldb::ProcessSP (*ProcessCreateInstance) (Target &target, Listener &listener, const FileSpec *crash_file_path); Modified: lldb/trunk/source/Commands/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CMakeLists.txt?rev=236443&r1=236442&r2=236443&view=diff ============================================================================== --- lldb/trunk/source/Commands/CMakeLists.txt (original) +++ lldb/trunk/source/Commands/CMakeLists.txt Mon May 4 13:39:38 2015 @@ -29,4 +29,5 @@ add_lldb_library(lldbCommands CommandObjectVersion.cpp CommandObjectWatchpoint.cpp CommandObjectWatchpointCommand.cpp + CommandObjectLanguage.cpp ) Added: lldb/trunk/source/Commands/CommandObjectLanguage.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectLanguage.cpp?rev=236443&view=auto ============================================================================== --- lldb/trunk/source/Commands/CommandObjectLanguage.cpp (added) +++ lldb/trunk/source/Commands/CommandObjectLanguage.cpp Mon May 4 13:39:38 2015 @@ -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 () +{ +} Added: lldb/trunk/source/Commands/CommandObjectLanguage.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectLanguage.h?rev=236443&view=auto ============================================================================== --- lldb/trunk/source/Commands/CommandObjectLanguage.h (added) +++ lldb/trunk/source/Commands/CommandObjectLanguage.h Mon May 4 13:39:38 2015 @@ -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_ Modified: lldb/trunk/source/Core/PluginManager.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/PluginManager.cpp?rev=236443&r1=236442&r2=236443&view=diff ============================================================================== --- lldb/trunk/source/Core/PluginManager.cpp (original) +++ lldb/trunk/source/Core/PluginManager.cpp Mon May 4 13:39:38 2015 @@ -885,6 +885,7 @@ struct LanguageRuntimeInstance ConstString name; std::string description; LanguageRuntimeCreateInstance create_callback; + LanguageRuntimeGetCommandObject command_callback; }; typedef std::vector<LanguageRuntimeInstance> LanguageRuntimeInstances; @@ -908,7 +909,8 @@ PluginManager::RegisterPlugin ( const ConstString &name, const char *description, - LanguageRuntimeCreateInstance create_callback + LanguageRuntimeCreateInstance create_callback, + LanguageRuntimeGetCommandObject command_callback ) { if (create_callback) @@ -919,6 +921,7 @@ PluginManager::RegisterPlugin 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 @@ PluginManager::GetLanguageRuntimeCreateC 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) { Modified: lldb/trunk/source/Interpreter/CommandInterpreter.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/CommandInterpreter.cpp?rev=236443&r1=236442&r2=236443&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/CommandInterpreter.cpp (original) +++ lldb/trunk/source/Interpreter/CommandInterpreter.cpp Mon May 4 13:39:38 2015 @@ -40,6 +40,7 @@ #include "../Commands/CommandObjectType.h" #include "../Commands/CommandObjectVersion.h" #include "../Commands/CommandObjectWatchpoint.h" +#include "../Commands/CommandObjectLanguage.h" #include "lldb/Core/Debugger.h" @@ -443,6 +444,7 @@ CommandInterpreter::LoadCommandDictionar m_command_dict["type"] = CommandObjectSP (new CommandObjectType (*this)); m_command_dict["version"] = CommandObjectSP (new CommandObjectVersion (*this)); m_command_dict["watchpoint"]= CommandObjectSP (new CommandObjectMultiwordWatchpoint (*this)); + m_command_dict["language"] = CommandObjectSP (new CommandObjectLanguage(*this)); const char *break_regexes[][2] = {{"^(.*[^[:space:]])[[:space:]]*:[[:space:]]*([[:digit:]]+)[[:space:]]*$", "breakpoint set --file '%1' --line %2"}, {"^/([^/]+)/$", "breakpoint set --source-pattern-regexp '%1'"}, Modified: lldb/trunk/source/Target/LanguageRuntime.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/LanguageRuntime.cpp?rev=236443&r1=236442&r2=236443&view=diff ============================================================================== --- lldb/trunk/source/Target/LanguageRuntime.cpp (original) +++ lldb/trunk/source/Target/LanguageRuntime.cpp Mon May 4 13:39:38 2015 @@ -12,6 +12,7 @@ #include "lldb/Target/Target.h" #include "lldb/Core/PluginManager.h" #include "lldb/Core/SearchFilter.h" +#include "lldb/Interpreter/CommandInterpreter.h" using namespace lldb; using namespace lldb_private; @@ -418,6 +419,33 @@ LanguageRuntime::LanguageIsCPlusPlus (La } } +void +LanguageRuntime::InitializeCommands (CommandObject* parent) +{ + if (!parent) + return; + + if (!parent->IsMultiwordObject()) + return; + + LanguageRuntimeCreateInstance create_callback; + + for (uint32_t idx = 0; + (create_callback = PluginManager::GetLanguageRuntimeCreateCallbackAtIndex(idx)) != nullptr; + ++idx) + { + if (LanguageRuntimeGetCommandObject command_callback = + PluginManager::GetLanguageRuntimeGetCommandObjectAtIndex(idx)) + { + CommandObjectSP command = command_callback(parent->GetCommandInterpreter()); + if (command) + { + parent->LoadSubCommand(command->GetCommandName(), command); + } + } + } +} + lldb::SearchFilterSP LanguageRuntime::CreateExceptionSearchFilter () { _______________________________________________ lldb-commits mailing list lldb-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits