Fix a bunch of thinko's in the command "thread continue".

rdar://problem/11562050


git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@157767 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Commands/CommandObjectThread.cpp b/source/Commands/CommandObjectThread.cpp
index b2e4c97..4843513 100644
--- a/source/Commands/CommandObjectThread.cpp
+++ b/source/Commands/CommandObjectThread.cpp
@@ -660,11 +660,26 @@
                 std::vector<uint32_t> resume_thread_indexes;
                 for (uint32_t i=0; i<argc; ++i)
                 {
-                    idx = Args::StringToUInt32 (command.GetArgumentAtIndex(0), LLDB_INVALID_INDEX32);
-                    if (idx < num_threads)
-                        resume_thread_indexes.push_back(idx);
+                    bool success;
+                    const int base = 0;
+                    idx = Args::StringToUInt32 (command.GetArgumentAtIndex(i), LLDB_INVALID_INDEX32, base, &success);
+                    if (!success)
+                    {
+                        result.AppendErrorWithFormat ("invalid value for thread index: %s.", command.GetArgumentAtIndex(i));
+                        result.SetStatus (eReturnStatusFailed);
+                        return false;
+                    }
+                    else if (process->GetThreadList().FindThreadByIndexID(idx))
+                    {
+                        if (find(resume_thread_indexes.begin(), resume_thread_indexes.end(), idx) == resume_thread_indexes.end())
+                            resume_thread_indexes.push_back(idx);
+                    }
                     else
-                        result.AppendWarningWithFormat("Thread index %u out of range.\n", idx);
+                    {
+                        result.AppendErrorWithFormat("thread index %u out of range.\n", idx);
+                        result.SetStatus (eReturnStatusFailed);
+                        return false;
+                    }
                 }
 
                 if (resume_thread_indexes.empty())
@@ -675,13 +690,24 @@
                 }
                 else
                 {
-                    result.AppendMessage ("Resuming thread ");
+                    if (resume_thread_indexes.size() == 1)
+                        result.AppendMessageWithFormat ("Resuming thread: ");
+                    else
+                        result.AppendMessageWithFormat ("Resuming threads: ");
+
                     for (idx=0; idx<num_threads; ++idx)
                     {
                         Thread *thread = process->GetThreadList().FindThreadByIndexID(idx).get();
-                        if (find(resume_thread_indexes.begin(), resume_thread_indexes.end(), idx) != resume_thread_indexes.end())
+                        std::vector<uint32_t>::iterator this_thread_pos = find(resume_thread_indexes.begin(), resume_thread_indexes.end(), thread->GetIndexID());
+                        
+                        if (this_thread_pos != resume_thread_indexes.end())
                         {
-                            result.AppendMessageWithFormat ("%u ", idx);
+                            resume_thread_indexes.erase(this_thread_pos);
+                            if (resume_thread_indexes.size() > 0)
+                                result.AppendMessageWithFormat ("%u, ", thread->GetIndexID());
+                            else
+                                result.AppendMessageWithFormat ("%u ", thread->GetIndexID());
+                            
                             thread->SetResumeState (eStateRunning);
                         }
                         else