diff options
author | Johnny Chen <johnny.chen@apple.com> | 2012-05-26 00:32:39 +0000 |
---|---|---|
committer | Johnny Chen <johnny.chen@apple.com> | 2012-05-26 00:32:39 +0000 |
commit | ca7835c685ca98909666ae8094737163a6f8734b (patch) | |
tree | 318e3c0f06e664b3930c3bc4c56ac392480a08a4 | |
parent | de22182b339a8746221ab09f67f1b39b5912e109 (diff) | |
download | bcm5719-llvm-ca7835c685ca98909666ae8094737163a6f8734b.tar.gz bcm5719-llvm-ca7835c685ca98909666ae8094737163a6f8734b.zip |
rdar://problem/11535045
Make 'help arch' return the list of supported architectures.
Add a convenience method StringList::Join(const char *separator) which is called from the help function for 'arch'.
Also add a simple test case.
llvm-svn: 157507
-rw-r--r-- | lldb/include/lldb/Core/StringList.h | 3 | ||||
-rw-r--r-- | lldb/source/Core/StringList.cpp | 19 | ||||
-rw-r--r-- | lldb/source/Interpreter/CommandObject.cpp | 14 | ||||
-rw-r--r-- | lldb/test/help/TestHelp.py | 5 |
4 files changed, 40 insertions, 1 deletions
diff --git a/lldb/include/lldb/Core/StringList.h b/lldb/include/lldb/Core/StringList.h index c4edb82ba8c..ec482f696b6 100644 --- a/lldb/include/lldb/Core/StringList.h +++ b/lldb/include/lldb/Core/StringList.h @@ -51,6 +51,9 @@ public: const char * GetStringAtIndex (size_t idx) const; + const char * + Join (const char *seperator); + void Clear (); diff --git a/lldb/source/Core/StringList.cpp b/lldb/source/Core/StringList.cpp index 1df8b7b9a64..88dd2edb3f8 100644 --- a/lldb/source/Core/StringList.cpp +++ b/lldb/source/Core/StringList.cpp @@ -95,6 +95,25 @@ StringList::GetStringAtIndex (size_t idx) const return NULL; } +const char * +StringList::Join (const char *separator) +{ + uint32_t size = GetSize(); + if (size == 0) + return ""; + if (size == 1) + return GetStringAtIndex(0); + + std::string buf; + for (uint32_t i = 0; i < size; ++i) + { + if (i > 0) + buf.append(separator); + buf.append(GetStringAtIndex(i)); + } + return buf.c_str();; +} + void StringList::Clear () { diff --git a/lldb/source/Interpreter/CommandObject.cpp b/lldb/source/Interpreter/CommandObject.cpp index a087eca1eec..c86bb5e9f7e 100644 --- a/lldb/source/Interpreter/CommandObject.cpp +++ b/lldb/source/Interpreter/CommandObject.cpp @@ -17,6 +17,7 @@ #include <ctype.h> #include "lldb/Core/Address.h" +#include "lldb/Core/ArchSpec.h" #include "lldb/Interpreter/Options.h" // These are for the Sourcename completers. @@ -845,13 +846,24 @@ CommandObject::GetArgumentDescriptionAsCString (const lldb::CommandArgumentType return NULL; } +static +const char *arch_helper() +{ + StringList archs; + ArchSpec::AutoComplete(NULL, archs); + StreamString ss; + ss.Printf("These are the supported architecture names:\n"); + ss.Printf("%s\n", archs.Join("\n")); + return ss.GetData(); +} + CommandObject::ArgumentTableEntry CommandObject::g_arguments_data[] = { { eArgTypeAddress, "address", CommandCompletions::eNoCompletion, { NULL, false }, "A valid address in the target program's execution space." }, { eArgTypeAliasName, "alias-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of an abbreviation (alias) for a debugger command." }, { eArgTypeAliasOptions, "options-for-aliased-command", CommandCompletions::eNoCompletion, { NULL, false }, "Command options to be used as part of an alias (abbreviation) definition. (See 'help commands alias' for more information.)" }, - { eArgTypeArchitecture, "arch", CommandCompletions::eArchitectureCompletion, { NULL, false }, "The architecture name, e.g. i386 or x86_64." }, + { eArgTypeArchitecture, "arch", CommandCompletions::eArchitectureCompletion, { arch_helper, true }, "The architecture name, e.g. i386 or x86_64." }, { eArgTypeBoolean, "boolean", CommandCompletions::eNoCompletion, { NULL, false }, "A Boolean value: 'true' or 'false'" }, { eArgTypeBreakpointID, "breakpt-id", CommandCompletions::eNoCompletion, { BreakpointIDHelpTextCallback, false }, NULL }, { eArgTypeBreakpointIDRange, "breakpt-id-list", CommandCompletions::eNoCompletion, { BreakpointIDRangeHelpTextCallback, false }, NULL }, diff --git a/lldb/test/help/TestHelp.py b/lldb/test/help/TestHelp.py index 6ad976ceb81..736a92f1f82 100644 --- a/lldb/test/help/TestHelp.py +++ b/lldb/test/help/TestHelp.py @@ -65,6 +65,11 @@ class HelpCommandTestCase(TestBase): return None + def test_help_arch(self): + """Test 'help arch' which should list of supported architectures.""" + self.expect("help arch", + substrs = ['arm', 'x86_64', 'i386']) + def test_help_version(self): """Test 'help version' and 'version' commands.""" self.expect("help version", |