aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2018-08-02 17:33:54 +0000
committerDimitry Andric <dim@FreeBSD.org>2018-08-02 17:33:54 +0000
commit39be7ce23363d12ae3e49aeb1fdb2bfeb892e836 (patch)
tree37fd694b2fe544b0ccefb369794632592d138dde
parentf73363f1dd94996356cefbf24388f561891acf0b (diff)
Notes
Notes: svn path=/vendor/lldb/dist/; revision=337147 svn path=/vendor/lldb/lldb-release_70-r338892/; revision=337308; tag=vendor/lldb/lldb-release_70-r338892
-rw-r--r--include/lldb/Utility/CompletionRequest.h35
-rw-r--r--include/lldb/Utility/Stream.h2
-rw-r--r--packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py2
-rw-r--r--packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py2
-rw-r--r--packages/Python/lldbsuite/test/decorators.py2
-rw-r--r--packages/Python/lldbsuite/test/expression_command/call-function/TestCallStdStringFunction.py2
-rw-r--r--packages/Python/lldbsuite/test/expression_command/call-restarts/TestCallThatRestarts.py2
-rw-r--r--packages/Python/lldbsuite/test/expression_command/call-throws/TestCallThatThrows.py2
-rw-r--r--packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py2
-rw-r--r--packages/Python/lldbsuite/test/expression_command/fixits/TestFixIts.py2
-rw-r--r--packages/Python/lldbsuite/test/expression_command/issue_11588/Test11588.py4
-rw-r--r--packages/Python/lldbsuite/test/expression_command/pr35310/TestExprsBug35310.py2
-rw-r--r--packages/Python/lldbsuite/test/expression_command/save_jit_objects/TestSaveJITObjects.py4
-rw-r--r--packages/Python/lldbsuite/test/expression_command/unwind_expression/TestUnwindExpression.py2
-rw-r--r--packages/Python/lldbsuite/test/expression_command/xvalue/TestXValuePrinting.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestBadAddressBreakpoints.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/breakpoint/auto_continue/TestBreakpointAutoContinue.py8
-rw-r--r--packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py10
-rw-r--r--packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py30
-rw-r--r--packages/Python/lldbsuite/test/functionalities/breakpoint/hardware_breakpoints/hardware_breakpoint_on_multiple_threads/TestHWBreakMultiThread.py6
-rw-r--r--packages/Python/lldbsuite/test/functionalities/breakpoint/serialize/TestBreakpointSerialization.py16
-rw-r--r--packages/Python/lldbsuite/test/functionalities/breakpoint/step_over_breakpoint/TestStepOverBreakpoint.py12
-rw-r--r--packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py46
-rw-r--r--packages/Python/lldbsuite/test/functionalities/completion/main.cpp11
-rw-r--r--packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/bitset/TestDataFormatterLibcxxBitset.py4
-rw-r--r--packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py4
-rw-r--r--packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/exec/TestExec.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/frame-language/TestGuessLanguage.py6
-rw-r--r--packages/Python/lldbsuite/test/functionalities/frame_var/TestFrameVar.py10
-rw-r--r--packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestTargetXMLArch.py12
-rw-r--r--packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py4
-rw-r--r--packages/Python/lldbsuite/test/functionalities/load_unload/TestLoadUnload.py4
-rw-r--r--packages/Python/lldbsuite/test/functionalities/load_using_paths/TestLoadUsingPaths.py22
-rw-r--r--packages/Python/lldbsuite/test/functionalities/pre_run_dylibs/TestPreRunDylibs.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/register/intel_avx/TestZMMRegister.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/return-value/TestReturnValue.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/thread/create_during_step/TestCreateDuringStep.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/thread/num_threads/TestNumThreads.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/thread/step_until/TestStepUntil.py2
-rw-r--r--packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py4
-rw-r--r--packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_disable/TestWatchpointDisable.py6
-rw-r--r--packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py2
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py6
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/incomplete-types/TestCppIncompleteTypes.py2
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py2
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py2
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/trivial_abi/TestTrivialABI.py4
-rw-r--r--packages/Python/lldbsuite/test/lldbdwarf.py6
-rw-r--r--packages/Python/lldbsuite/test/lldbtest.py15
-rw-r--r--packages/Python/lldbsuite/test/lldbutil.py10
-rw-r--r--packages/Python/lldbsuite/test/macosx/find-app-in-bundle/TestFindAppInBundle.py6
-rw-r--r--packages/Python/lldbsuite/test/macosx/find-dsym/bundle-with-dot-in-filename/TestBundleWithDotInFilename.py2
-rw-r--r--packages/Python/lldbsuite/test/macosx/find-dsym/deep-bundle/TestDeepBundle.py4
-rw-r--r--packages/Python/lldbsuite/test/macosx/thread-names/TestInterruptThreadNames.py6
-rw-r--r--packages/Python/lldbsuite/test/python_api/name_lookup/TestNameLookup.py10
-rw-r--r--packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py2
-rw-r--r--packages/Python/lldbsuite/test/sample_test/TestSampleTest.py4
-rw-r--r--packages/Python/lldbsuite/test/settings/TestSettings.py2
-rw-r--r--packages/Python/lldbsuite/test/tools/lldb-mi/startup_options/TestMiStartupOptions.py2
-rw-r--r--packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemote_qThreadStopInfo.py2
-rw-r--r--packages/Python/lldbsuite/test/tools/lldb-server/TestLldbGdbServer.py2
-rw-r--r--source/Commands/CommandCompletions.cpp60
-rw-r--r--source/Commands/CommandObjectCommands.cpp4
-rw-r--r--source/Commands/CommandObjectFrame.cpp2
-rw-r--r--source/Commands/CommandObjectMultiword.cpp26
-rw-r--r--source/Commands/CommandObjectPlatform.cpp6
-rw-r--r--source/Commands/CommandObjectPlugin.cpp2
-rw-r--r--source/Commands/CommandObjectProcess.cpp6
-rw-r--r--source/Commands/CommandObjectSettings.cpp18
-rw-r--r--source/Commands/CommandObjectTarget.cpp10
-rw-r--r--source/Core/FormatEntity.cpp23
-rw-r--r--source/Core/IOHandler.cpp4
-rw-r--r--source/Interpreter/CommandInterpreter.cpp26
-rw-r--r--source/Interpreter/CommandObject.cpp3
-rw-r--r--source/Interpreter/CommandObjectRegexCommand.cpp3
-rw-r--r--source/Interpreter/OptionValue.cpp3
-rw-r--r--source/Interpreter/OptionValueArch.cpp3
-rw-r--r--source/Interpreter/OptionValueBoolean.cpp5
-rw-r--r--source/Interpreter/OptionValueEnumeration.cpp8
-rw-r--r--source/Interpreter/OptionValueFileSpec.cpp3
-rw-r--r--source/Interpreter/OptionValueUUID.cpp5
-rw-r--r--source/Interpreter/Options.cpp22
-rw-r--r--source/Plugins/Platform/Android/PlatformAndroid.cpp10
-rw-r--r--source/Plugins/Platform/Windows/PlatformWindows.cpp2
-rw-r--r--source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h2
-rw-r--r--source/Plugins/SymbolFile/DWARF/DWARFUnit.h2
-rw-r--r--source/Symbol/Variable.cpp13
-rw-r--r--source/Utility/ArchSpec.cpp8
-rw-r--r--source/Utility/CompletionRequest.cpp1
-rw-r--r--source/Utility/Stream.cpp45
-rw-r--r--unittests/Utility/CMakeLists.txt1
-rw-r--r--unittests/Utility/CompletionRequestTest.cpp67
-rw-r--r--unittests/Utility/StreamTest.cpp474
98 files changed, 915 insertions, 351 deletions
diff --git a/include/lldb/Utility/CompletionRequest.h b/include/lldb/Utility/CompletionRequest.h
index cfae16f00b37..ef75474813e0 100644
--- a/include/lldb/Utility/CompletionRequest.h
+++ b/include/lldb/Utility/CompletionRequest.h
@@ -13,6 +13,7 @@
#include "lldb/Utility/Args.h"
#include "lldb/Utility/StringList.h"
#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/StringSet.h"
namespace lldb_private {
@@ -77,8 +78,29 @@ public:
void SetWordComplete(bool v) { m_word_complete = v; }
- /// The array of matches returned.
- StringList &GetMatches() { return *m_matches; }
+ /// Adds a possible completion string. If the completion was already
+ /// suggested before, it will not be added to the list of results. A copy of
+ /// the suggested completion is stored, so the given string can be free'd
+ /// afterwards.
+ ///
+ /// @param match The suggested completion.
+ void AddCompletion(llvm::StringRef completion) {
+ // Add the completion if we haven't seen the same value before.
+ if (m_match_set.insert(completion).second)
+ m_matches->AppendString(completion);
+ }
+
+ /// Adds multiple possible completion strings.
+ ///
+ /// \param completions The list of completions.
+ ///
+ /// @see AddCompletion
+ void AddCompletions(const StringList &completions) {
+ for (std::size_t i = 0; i < completions.GetSize(); ++i)
+ AddCompletion(completions.GetStringAtIndex(i));
+ }
+
+ std::size_t GetNumberOfMatches() const { return m_matches->GetSize(); }
llvm::StringRef GetCursorArgument() const {
return GetParsedLine().GetArgumentAtIndex(GetCursorIndex());
@@ -111,8 +133,15 @@ private:
/// \btrue if this is a complete option value (a space will be inserted
/// after the completion.) \bfalse otherwise.
bool m_word_complete = false;
- // We don't own the list.
+
+ // Note: This list is kept private. This is by design to prevent that any
+ // completion depends on any already computed completion from another backend.
+ // Note: We don't own the list. It's owned by the creator of the
+ // CompletionRequest object.
StringList *m_matches;
+
+ /// List of added completions so far. Used to filter out duplicates.
+ llvm::StringSet<> m_match_set;
};
} // namespace lldb_private
diff --git a/include/lldb/Utility/Stream.h b/include/lldb/Utility/Stream.h
index bf837749fa37..4930521d9497 100644
--- a/include/lldb/Utility/Stream.h
+++ b/include/lldb/Utility/Stream.h
@@ -524,8 +524,6 @@ public:
//------------------------------------------------------------------
size_t PutULEB128(uint64_t uval);
- static void UnitTest(Stream *s);
-
protected:
//------------------------------------------------------------------
// Member variables
diff --git a/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py b/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py
index 27bd472caf99..f6bde75dcb79 100644
--- a/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py
+++ b/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py
@@ -18,7 +18,7 @@ class TestMultipleSimultaneousDebuggers(TestBase):
mydir = TestBase.compute_mydir(__file__)
- # This test case fails non-deterministically.
+ # This test case fails non-deterministically.
@skipIfNoSBHeaders
@expectedFailureAll(bugnumber="llvm.org/pr20282")
def test_multiple_debuggers(self):
diff --git a/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py b/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py
index 4e550c9c24db..dd03fcf31e87 100644
--- a/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py
+++ b/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py
@@ -16,7 +16,7 @@ import subprocess
class SBBreakpointCallbackCase(TestBase):
NO_DEBUG_INFO_TESTCASE = True
-
+
def setUp(self):
TestBase.setUp(self)
self.generateSource('driver.cpp')
diff --git a/packages/Python/lldbsuite/test/decorators.py b/packages/Python/lldbsuite/test/decorators.py
index 1fdfd2caac00..8b33cad3d1ba 100644
--- a/packages/Python/lldbsuite/test/decorators.py
+++ b/packages/Python/lldbsuite/test/decorators.py
@@ -791,7 +791,7 @@ def skipIfLLVMTargetMissing(target):
if targets.GetItemAtIndex(i).GetStringValue(99) == target:
found = True
break
-
+
return unittest2.skipIf(not found, "requires " + target)
# Call sysctl on darwin to see if a specified hardware feature is available on this machine.
diff --git a/packages/Python/lldbsuite/test/expression_command/call-function/TestCallStdStringFunction.py b/packages/Python/lldbsuite/test/expression_command/call-function/TestCallStdStringFunction.py
index 079ab6d60888..8f2ea371f2b1 100644
--- a/packages/Python/lldbsuite/test/expression_command/call-function/TestCallStdStringFunction.py
+++ b/packages/Python/lldbsuite/test/expression_command/call-function/TestCallStdStringFunction.py
@@ -46,7 +46,7 @@ class ExprCommandCallFunctionTestCase(TestBase):
# Calling this function now succeeds, but we follow the typedef return type through to
# const char *, and thus don't invoke the Summary formatter.
- # clang's libstdc++ on ios arm64 inlines std::string::c_str() always;
+ # clang's libstdc++ on ios arm64 inlines std::string::c_str() always;
# skip this part of the test.
triple = self.dbg.GetSelectedPlatform().GetTriple()
do_cstr_test = True
diff --git a/packages/Python/lldbsuite/test/expression_command/call-restarts/TestCallThatRestarts.py b/packages/Python/lldbsuite/test/expression_command/call-restarts/TestCallThatRestarts.py
index 5eb7b309c94a..1182b156e80c 100644
--- a/packages/Python/lldbsuite/test/expression_command/call-restarts/TestCallThatRestarts.py
+++ b/packages/Python/lldbsuite/test/expression_command/call-restarts/TestCallThatRestarts.py
@@ -48,7 +48,7 @@ class ExprCommandThatRestartsTestCase(TestBase):
"Restored the zeroth frame correctly")
def call_function(self):
- (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'Stop here in main.', self.main_source_spec)
# Make sure the SIGCHLD behavior is pass/no-stop/no-notify:
diff --git a/packages/Python/lldbsuite/test/expression_command/call-throws/TestCallThatThrows.py b/packages/Python/lldbsuite/test/expression_command/call-throws/TestCallThatThrows.py
index f2ec340ac845..c6b90ba5ba02 100644
--- a/packages/Python/lldbsuite/test/expression_command/call-throws/TestCallThatThrows.py
+++ b/packages/Python/lldbsuite/test/expression_command/call-throws/TestCallThatThrows.py
@@ -37,7 +37,7 @@ class ExprCommandWithThrowTestCase(TestBase):
def call_function(self):
"""Test calling function that throws."""
- (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'I am about to throw.', self.main_source_spec)
options = lldb.SBExpressionOptions()
diff --git a/packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py b/packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py
index 2f1406874765..b328ece6d39c 100644
--- a/packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py
+++ b/packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py
@@ -22,7 +22,7 @@ class ExprCharTestCase(TestBase):
"""These basic expression commands should work as expected."""
self.build(dictionary=dictionary)
- (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'// Break here', self.main_source_spec)
frame = thread.GetFrameAtIndex(0)
diff --git a/packages/Python/lldbsuite/test/expression_command/fixits/TestFixIts.py b/packages/Python/lldbsuite/test/expression_command/fixits/TestFixIts.py
index 4b096149e728..9aa28f77a3fd 100644
--- a/packages/Python/lldbsuite/test/expression_command/fixits/TestFixIts.py
+++ b/packages/Python/lldbsuite/test/expression_command/fixits/TestFixIts.py
@@ -37,7 +37,7 @@ class ExprCommandWithFixits(TestBase):
def try_expressions(self):
"""Test calling expressions with errors that can be fixed by the FixIts."""
- (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'Stop here to evaluate expressions', self.main_source_spec)
options = lldb.SBExpressionOptions()
diff --git a/packages/Python/lldbsuite/test/expression_command/issue_11588/Test11588.py b/packages/Python/lldbsuite/test/expression_command/issue_11588/Test11588.py
index a2d68cffe548..09b0eaaa2b15 100644
--- a/packages/Python/lldbsuite/test/expression_command/issue_11588/Test11588.py
+++ b/packages/Python/lldbsuite/test/expression_command/issue_11588/Test11588.py
@@ -32,8 +32,8 @@ class Issue11581TestCase(TestBase):
"""valobj.AddressOf() should return correct values."""
self.build()
- (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
- 'Set breakpoint here.',
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ 'Set breakpoint here.',
lldb.SBFileSpec("main.cpp", False))
self.runCmd("command script import --allow-reload s11588.py")
self.runCmd(
diff --git a/packages/Python/lldbsuite/test/expression_command/pr35310/TestExprsBug35310.py b/packages/Python/lldbsuite/test/expression_command/pr35310/TestExprsBug35310.py
index 9cc9df2b22be..dd3d06fd672f 100644
--- a/packages/Python/lldbsuite/test/expression_command/pr35310/TestExprsBug35310.py
+++ b/packages/Python/lldbsuite/test/expression_command/pr35310/TestExprsBug35310.py
@@ -25,7 +25,7 @@ class ExprBug35310(TestBase):
"""
self.build()
- (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'// Break here', self.main_source_spec)
frame = thread.GetFrameAtIndex(0)
diff --git a/packages/Python/lldbsuite/test/expression_command/save_jit_objects/TestSaveJITObjects.py b/packages/Python/lldbsuite/test/expression_command/save_jit_objects/TestSaveJITObjects.py
index c1a1b375e155..fe6816f6aba1 100644
--- a/packages/Python/lldbsuite/test/expression_command/save_jit_objects/TestSaveJITObjects.py
+++ b/packages/Python/lldbsuite/test/expression_command/save_jit_objects/TestSaveJITObjects.py
@@ -16,7 +16,7 @@ class SaveJITObjectsTestCase(TestBase):
def enumerateJITFiles(self):
return [f for f in os.listdir(self.getBuildDir()) if f.startswith("jit")]
-
+
def countJITFiles(self):
return len(self.enumerateJITFiles())
@@ -31,7 +31,7 @@ class SaveJITObjectsTestCase(TestBase):
os.chdir(self.getBuildDir())
src_file = "main.c"
src_file_spec = lldb.SBFileSpec(src_file)
-
+
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "break", src_file_spec)
diff --git a/packages/Python/lldbsuite/test/expression_command/unwind_expression/TestUnwindExpression.py b/packages/Python/lldbsuite/test/expression_command/unwind_expression/TestUnwindExpression.py
index 3b01d4470de6..c942427a8e66 100644
--- a/packages/Python/lldbsuite/test/expression_command/unwind_expression/TestUnwindExpression.py
+++ b/packages/Python/lldbsuite/test/expression_command/unwind_expression/TestUnwindExpression.py
@@ -23,7 +23,7 @@ class UnwindFromExpressionTest(TestBase):
def build_and_run_to_bkpt(self):
self.build()
- (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
"// Set a breakpoint here to get started", self.main_spec)
# Next set a breakpoint in this function, set up Expression options to stop on
diff --git a/packages/Python/lldbsuite/test/expression_command/xvalue/TestXValuePrinting.py b/packages/Python/lldbsuite/test/expression_command/xvalue/TestXValuePrinting.py
index 4ad4225a5fe4..3aac6488660c 100644
--- a/packages/Python/lldbsuite/test/expression_command/xvalue/TestXValuePrinting.py
+++ b/packages/Python/lldbsuite/test/expression_command/xvalue/TestXValuePrinting.py
@@ -22,7 +22,7 @@ class ExprXValuePrintingTestCase(TestBase):
"""Printing an xvalue should work."""
self.build(dictionary=dictionary)
- (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'// Break here', self.main_source_spec)
frame = thread.GetFrameAtIndex(0)
diff --git a/packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestBadAddressBreakpoints.py b/packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestBadAddressBreakpoints.py
index 5014c1cd4a24..460e07ceadf0 100644
--- a/packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestBadAddressBreakpoints.py
+++ b/packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestBadAddressBreakpoints.py
@@ -31,7 +31,7 @@ class BadAddressBreakpointTestCase(TestBase):
def address_breakpoints(self):
"""Test that breakpoints set on a bad address say they are bad."""
target, process, thread, bkpt = \
- lldbutil.run_to_source_breakpoint(self,
+ lldbutil.run_to_source_breakpoint(self,
"Set a breakpoint here",
lldb.SBFileSpec("main.c"))
diff --git a/packages/Python/lldbsuite/test/functionalities/breakpoint/auto_continue/TestBreakpointAutoContinue.py b/packages/Python/lldbsuite/test/functionalities/breakpoint/auto_continue/TestBreakpointAutoContinue.py
index 0123e732e35d..b5e38eec5793 100644
--- a/packages/Python/lldbsuite/test/functionalities/breakpoint/auto_continue/TestBreakpointAutoContinue.py
+++ b/packages/Python/lldbsuite/test/functionalities/breakpoint/auto_continue/TestBreakpointAutoContinue.py
@@ -34,17 +34,17 @@ class BreakpointAutoContinue(TestBase):
self.build()
self.auto_continue_location()
- def make_target_and_bkpt(self, additional_options=None, num_expected_loc=1,
+ def make_target_and_bkpt(self, additional_options=None, num_expected_loc=1,
pattern="Set a breakpoint here"):
exe = self.getBuildArtifact("a.out")
self.target = self.dbg.CreateTarget(exe)
self.assertTrue(self.target.IsValid(), "Target is not valid")
-
+
extra_options_txt = "--auto-continue 1 "
if additional_options:
extra_options_txt += additional_options
- bpno = lldbutil.run_break_set_by_source_regexp(self, pattern,
- extra_options = extra_options_txt,
+ bpno = lldbutil.run_break_set_by_source_regexp(self, pattern,
+ extra_options = extra_options_txt,
num_expected_locations = num_expected_loc)
return bpno
diff --git a/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py b/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py
index 7eb465f29599..f4835a9b9c44 100644
--- a/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py
+++ b/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py
@@ -46,12 +46,12 @@ class BreakpointLocationsTestCase(TestBase):
self.assertTrue(target, "Target %s is not valid"%(exe))
# This should create a breakpoint with 3 locations.
-
+
bkpt = target.BreakpointCreateByLocation("main.c", self.line)
# The breakpoint list should show 3 locations.
self.assertEqual(bkpt.GetNumLocations(), 3, "Wrong number of locations")
-
+
self.expect(
"breakpoint list -f",
"Breakpoint locations shown correctly",
@@ -62,7 +62,7 @@ class BreakpointLocationsTestCase(TestBase):
"where = a.out`func_inlined .+unresolved, hit count = 0",
"where = a.out`main .+\[inlined\].+unresolved, hit count = 0"])
- return bkpt
+ return bkpt
def shadowed_bkpt_cond_test(self):
"""Test that options set on the breakpoint and location behave correctly."""
@@ -106,7 +106,7 @@ class BreakpointLocationsTestCase(TestBase):
commands = ["AAAAAA", "BBBBBB", "CCCCCC"]
str_list = lldb.SBStringList()
str_list.AppendList(commands, len(commands))
-
+
bkpt.SetCommandLineCommands(str_list)
cmd_list = lldb.SBStringList()
bkpt.GetCommandLineCommands(cmd_list)
@@ -123,7 +123,7 @@ class BreakpointLocationsTestCase(TestBase):
bkpt.location[1].GetCommandLineCommands(loc_cmd_list)
loc_list_size = loc_list.GetSize()
-
+
# Check that the location has the right commands:
self.assertEqual(loc_cmd_list.GetSize() , loc_list_size, "Added the right number of commands to location")
for i in range(0,loc_list_size):
diff --git a/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py b/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py
index 8b5352866c21..b36e915e2204 100644
--- a/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py
+++ b/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py
@@ -64,7 +64,7 @@ class BreakpointNames(TestBase):
self.target = self.dbg.CreateTarget(exe)
self.assertTrue(self.target, VALID_TARGET)
self.main_file_spec = lldb.SBFileSpec(os.path.join(self.getSourceDir(), "main.c"))
-
+
def check_name_in_target(self, bkpt_name):
name_list = lldb.SBStringList()
self.target.GetBreakpointNames(name_list)
@@ -74,7 +74,7 @@ class BreakpointNames(TestBase):
found_it = True
break
self.assertTrue(found_it, "Didn't find the name %s in the target's name list:"%(bkpt_name))
-
+
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
@@ -107,14 +107,14 @@ class BreakpointNames(TestBase):
matches = bkpt.MatchesName(bkpt_name)
self.assertTrue(matches, "We didn't match the name we just set")
-
+
# Make sure we don't match irrelevant names:
matches = bkpt.MatchesName("NotABreakpoint")
self.assertTrue(not matches, "We matched a name we didn't set.")
# Make sure the name is also in the target:
self.check_name_in_target(bkpt_name)
-
+
# Add another name, make sure that works too:
bkpt.AddName(other_bkpt_name)
@@ -132,7 +132,7 @@ class BreakpointNames(TestBase):
bkpt.GetNames(name_list)
num_names = name_list.GetSize()
self.assertTrue(num_names == 1, "Name list has %d items, expected 1."%(num_names))
-
+
name = name_list.GetStringAtIndex(0)
self.assertTrue(name == other_bkpt_name, "Remaining name was: %s expected %s."%(name, other_bkpt_name))
@@ -156,7 +156,7 @@ class BreakpointNames(TestBase):
def do_check_using_names(self):
"""Use Python APIs to check names work in place of breakpoint ID's."""
-
+
bkpt = self.target.BreakpointCreateByLocation(self.main_file_spec, 10)
bkpt_name = "ABreakpoint"
other_bkpt_name= "_AnotherBreakpoint"
@@ -255,12 +255,12 @@ class BreakpointNames(TestBase):
bp_name.SetAutoContinue(new_auto_continue)
self.assertEqual(bp_name.GetAutoContinue(), new_auto_continue, "Couldn't change auto-continue on the name")
self.assertEqual(bkpt.GetAutoContinue(), new_auto_continue, "Option didn't propagate to the breakpoint.")
-
+
# Now make this same breakpoint name - but from the command line
- cmd_str = "breakpoint name configure %s -o %d -i %d -c '%s' -G %d -t %d -x %d -T '%s' -q '%s' -H '%s'"%(cl_bp_name_string,
- self.is_one_shot,
- self.ignore_count,
- self.condition,
+ cmd_str = "breakpoint name configure %s -o %d -i %d -c '%s' -G %d -t %d -x %d -T '%s' -q '%s' -H '%s'"%(cl_bp_name_string,
+ self.is_one_shot,
+ self.ignore_count,
+ self.condition,
self.auto_continue,
self.tid,
self.tidx,
@@ -269,7 +269,7 @@ class BreakpointNames(TestBase):
self.help_string)
for cmd in self.cmd_list:
cmd_str += " -C '%s'"%(cmd)
-
+
self.runCmd(cmd_str, check=True)
# Now look up this name again and check its options:
cl_name = lldb.SBBreakpointName(self.target, cl_bp_name_string)
@@ -280,14 +280,14 @@ class BreakpointNames(TestBase):
new_help = "I do something even more interesting"
cl_name.SetHelpString(new_help)
self.assertEqual(new_help, cl_name.GetHelpString(), "SetHelpString didn't")
-
+
# We should have three names now, make sure the target can list them:
name_list = lldb.SBStringList()
self.target.GetBreakpointNames(name_list)
for name_string in [self.bp_name_string, other_bp_name_string, cl_bp_name_string]:
self.assertTrue(name_string in name_list, "Didn't find %s in names"%(name_string))
- # Delete the name from the current target. Make sure that works and deletes the
+ # Delete the name from the current target. Make sure that works and deletes the
# name from the breakpoint as well:
self.target.DeleteBreakpointName(self.bp_name_string)
name_list.Clear()
@@ -305,7 +305,7 @@ class BreakpointNames(TestBase):
self.assertTrue(self.bp_name_string not in name_list, "Didn't delete %s from the dummy target"%(self.bp_name_string))
# Also make sure the name got removed from breakpoints holding it:
self.assertFalse(bkpt.MatchesName(self.bp_name_string), "Didn't remove the name from the breakpoint.")
-
+
def check_permission_results(self, bp_name):
self.assertEqual(bp_name.GetAllowDelete(), False, "Didn't set allow delete.")
protected_bkpt = self.target.BreakpointCreateByLocation(self.main_file_spec, 10)
diff --git a/packages/Python/lldbsuite/test/functionalities/breakpoint/hardware_breakpoints/hardware_breakpoint_on_multiple_threads/TestHWBreakMultiThread.py b/packages/Python/lldbsuite/test/functionalities/breakpoint/hardware_breakpoints/hardware_breakpoint_on_multiple_threads/TestHWBreakMultiThread.py
index 69dfac225258..99b54329a0e1 100644
--- a/packages/Python/lldbsuite/test/functionalities/breakpoint/hardware_breakpoints/hardware_breakpoint_on_multiple_threads/TestHWBreakMultiThread.py
+++ b/packages/Python/lldbsuite/test/functionalities/breakpoint/hardware_breakpoints/hardware_breakpoint_on_multiple_threads/TestHWBreakMultiThread.py
@@ -25,7 +25,7 @@ class HardwareBreakpointMultiThreadTestCase(TestBase):
@expectedFailureAndroid
def test_hw_break_set_delete_multi_thread(self):
self.build()
- self.setTearDownCleanup()
+ self.setTearDownCleanup()
self.break_multi_thread('delete')
# LLDB supports hardware breakpoints for arm and aarch64 architectures.
@@ -33,7 +33,7 @@ class HardwareBreakpointMultiThreadTestCase(TestBase):
@expectedFailureAndroid
def test_hw_break_set_disable_multi_thread(self):
self.build()
- self.setTearDownCleanup()
+ self.setTearDownCleanup()
self.break_multi_thread('disable')
def setUp(self):
@@ -74,7 +74,7 @@ class HardwareBreakpointMultiThreadTestCase(TestBase):
count = 0
while count < 2 :
-
+
self.runCmd("process continue")
# We should be stopped in hw_break_function
diff --git a/packages/Python/lldbsuite/test/functionalities/breakpoint/serialize/TestBreakpointSerialization.py b/packages/Python/lldbsuite/test/functionalities/breakpoint/serialize/TestBreakpointSerialization.py
index 5c3da17c254e..c615278e8d48 100644
--- a/packages/Python/lldbsuite/test/functionalities/breakpoint/serialize/TestBreakpointSerialization.py
+++ b/packages/Python/lldbsuite/test/functionalities/breakpoint/serialize/TestBreakpointSerialization.py
@@ -65,7 +65,7 @@ class BreakpointSerialization(TestBase):
# Create the targets we are making breakpoints in and copying them to:
self.orig_target = self.dbg.CreateTarget(exe)
self.assertTrue(self.orig_target, VALID_TARGET)
-
+
self.copy_target = self.dbg.CreateTarget(exe)
self.assertTrue(self.copy_target, VALID_TARGET)
@@ -91,7 +91,7 @@ class BreakpointSerialization(TestBase):
num_source_bps = source_bps.GetSize()
num_copy_bps = copy_bps.GetSize()
self.assertTrue(num_source_bps == num_copy_bps, "Didn't get same number of input and output breakpoints - orig: %d copy: %d"%(num_source_bps, num_copy_bps))
-
+
for i in range(0, num_source_bps):
source_bp = source_bps.GetBreakpointAtIndex(i)
source_desc = lldb.SBStream()
@@ -132,7 +132,7 @@ class BreakpointSerialization(TestBase):
source_bps.Append(self.orig_target.BreakpointCreateByName("blubby", lldb.eFunctionNameTypeAuto, empty_module_list, empty_cu_list))
source_bps.Append(self.orig_target.BreakpointCreateByName("blubby", lldb.eFunctionNameTypeFull, empty_module_list,empty_cu_list))
source_bps.Append(self.orig_target.BreakpointCreateBySourceRegex("dont really care", blubby_file_spec))
-
+
# And some number greater than one:
self.check_equivalence(source_bps)
@@ -185,7 +185,7 @@ class BreakpointSerialization(TestBase):
bkpt.SetOneShot(True)
bkpt.SetThreadID(10)
source_bps.Append(bkpt)
-
+
# Make sure we get one right:
self.check_equivalence(source_bps)
source_bps.Clear()
@@ -232,7 +232,7 @@ class BreakpointSerialization(TestBase):
bkpt.SetThreadID(10)
source_bps.Append(bkpt)
all_bps.Append(bkpt)
-
+
error = lldb.SBError()
error = self.orig_target.BreakpointsWriteToFile(self.bkpts_file_spec, source_bps)
self.assertTrue(error.Success(), "Failed writing breakpoints to file: %s."%(error.GetCString()))
@@ -265,7 +265,7 @@ class BreakpointSerialization(TestBase):
write_bps = lldb.SBBreakpointList(self.orig_target)
bkpt.AddName(good_bkpt_name)
write_bps.Append(bkpt)
-
+
error = lldb.SBError()
error = self.orig_target.BreakpointsWriteToFile(self.bkpts_file_spec, write_bps)
self.assertTrue(error.Success(), "Failed writing breakpoints to file: %s."%(error.GetCString()))
@@ -282,7 +282,3 @@ class BreakpointSerialization(TestBase):
error = self.copy_target.BreakpointsCreateFromFile(self.bkpts_file_spec, names_list, copy_bps)
self.assertTrue(error.Success(), "Failed reading breakpoints from file: %s"%(error.GetCString()))
self.assertTrue(copy_bps.GetSize() == 1, "Found the matching breakpoint.")
-
-
-
-
diff --git a/packages/Python/lldbsuite/test/functionalities/breakpoint/step_over_breakpoint/TestStepOverBreakpoint.py b/packages/Python/lldbsuite/test/functionalities/breakpoint/step_over_breakpoint/TestStepOverBreakpoint.py
index c2084295ef79..07fd04940d96 100644
--- a/packages/Python/lldbsuite/test/functionalities/breakpoint/step_over_breakpoint/TestStepOverBreakpoint.py
+++ b/packages/Python/lldbsuite/test/functionalities/breakpoint/step_over_breakpoint/TestStepOverBreakpoint.py
@@ -1,8 +1,8 @@
"""
Test that breakpoints do not affect stepping.
-Check for correct StopReason when stepping to the line with breakpoint
+Check for correct StopReason when stepping to the line with breakpoint
which chould be eStopReasonBreakpoint in general,
-and eStopReasonPlanComplete when breakpoint's condition fails.
+and eStopReasonPlanComplete when breakpoint's condition fails.
"""
from __future__ import print_function
@@ -19,7 +19,7 @@ class StepOverBreakpointsTestCase(TestBase):
def setUp(self):
TestBase.setUp(self)
-
+
self.build()
exe = self.getBuildArtifact("a.out")
src = lldb.SBFileSpec("main.cpp")
@@ -32,7 +32,7 @@ class StepOverBreakpointsTestCase(TestBase):
self.line1 = line_number('main.cpp', "breakpoint_1")
self.line4 = line_number('main.cpp', "breakpoint_4")
- self.breakpoint1 = self.target.BreakpointCreateByLocation(src, self.line1)
+ self.breakpoint1 = self.target.BreakpointCreateByLocation(src, self.line1)
self.assertTrue(
self.breakpoint1 and self.breakpoint1.GetNumLocations() == 1,
VALID_BREAKPOINT)
@@ -52,7 +52,7 @@ class StepOverBreakpointsTestCase(TestBase):
self.thread = lldbutil.get_one_thread_stopped_at_breakpoint(self.process, self.breakpoint1)
self.assertIsNotNone(self.thread, "Didn't stop at breakpoint 1.")
- def test_step_instruction(self):
+ def test_step_instruction(self):
# Count instructions between breakpoint_1 and breakpoint_4
contextList = self.target.FindFunctions('main', lldb.eFunctionNameTypeAuto)
self.assertEquals(contextList.GetSize(), 1)
@@ -89,7 +89,7 @@ class StepOverBreakpointsTestCase(TestBase):
@skipIf(bugnumber="llvm.org/pr31972", hostoslist=["windows"])
def test_step_over(self):
#lldb.DBG.EnableLog("lldb", ["step","breakpoint"])
-
+
self.thread.StepOver()
# We should be stopped at the breakpoint_2 line with stop plan complete reason
self.assertEquals(self.process.GetState(), lldb.eStateStopped)
diff --git a/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py b/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py
index a3b23834ee12..5d4fcf64511b 100644
--- a/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py
+++ b/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py
@@ -39,6 +39,46 @@ class CommandLineCompletionTestCase(TestBase):
self.complete_from_to('de', 'detach ')
@skipIfFreeBSD # timing out on the FreeBSD buildbot
+ def test_frame_variable(self):
+ self.build()
+ self.main_source = "main.cpp"
+ self.main_source_spec = lldb.SBFileSpec(self.main_source)
+ self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
+
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ '// Break here', self.main_source_spec)
+ self.assertEquals(process.GetState(), lldb.eStateStopped)
+ # FIXME: This pulls in the debug information to make the completions work,
+ # but the completions should also work without.
+ self.runCmd("frame variable fooo")
+
+ self.complete_from_to('frame variable fo',
+ 'frame variable fooo')
+ self.complete_from_to('frame variable fooo.',
+ 'frame variable fooo.')
+ self.complete_from_to('frame variable fooo.dd',
+ 'frame variable fooo.dd')
+
+ self.complete_from_to('frame variable ptr_fooo->',
+ 'frame variable ptr_fooo->')
+ self.complete_from_to('frame variable ptr_fooo->dd',
+ 'frame variable ptr_fooo->dd')
+
+ self.complete_from_to('frame variable cont',
+ 'frame variable container')
+ self.complete_from_to('frame variable container.',
+ 'frame variable container.MemberVar')
+ self.complete_from_to('frame variable container.Mem',
+ 'frame variable container.MemberVar')
+
+ self.complete_from_to('frame variable ptr_cont',
+ 'frame variable ptr_container')
+ self.complete_from_to('frame variable ptr_container->',
+ 'frame variable ptr_container->MemberVar')
+ self.complete_from_to('frame variable ptr_container->Mem',
+ 'frame variable ptr_container->MemberVar')
+
+ @skipIfFreeBSD # timing out on the FreeBSD buildbot
def test_process_attach_dash_dash_con(self):
"""Test that 'process attach --con' completes to 'process attach --continue '."""
self.complete_from_to(
@@ -261,7 +301,7 @@ class CommandLineCompletionTestCase(TestBase):
common_match = match_strings.GetStringAtIndex(0)
if num_matches == 0:
compare_string = str_input
- else:
+ else:
if common_match != None and len(common_match) > 0:
compare_string = str_input + common_match
else:
@@ -273,8 +313,8 @@ class CommandLineCompletionTestCase(TestBase):
if turn_off_re_match:
self.expect(
compare_string, msg=COMPLETION_MSG(
- str_input, p), exe=False, substrs=[p])
+ str_input, p, match_strings), exe=False, substrs=[p])
else:
self.expect(
compare_string, msg=COMPLETION_MSG(
- str_input, p), exe=False, patterns=[p])
+ str_input, p, match_strings), exe=False, patterns=[p])
diff --git a/packages/Python/lldbsuite/test/functionalities/completion/main.cpp b/packages/Python/lldbsuite/test/functionalities/completion/main.cpp
index b408720d2cdc..0814bb9cc0ac 100644
--- a/packages/Python/lldbsuite/test/functionalities/completion/main.cpp
+++ b/packages/Python/lldbsuite/test/functionalities/completion/main.cpp
@@ -7,8 +7,15 @@ public:
}
};
+struct Container { int MemberVar; };
+
int main()
{
- Foo f;
- f.Bar(1, 2);
+ Foo fooo;
+ Foo *ptr_fooo = &fooo;
+ fooo.Bar(1, 2);
+
+ Container container;
+ Container *ptr_container = &container;
+ return container.MemberVar = 3; // Break here
}
diff --git a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/bitset/TestDataFormatterLibcxxBitset.py b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/bitset/TestDataFormatterLibcxxBitset.py
index 4fa115e51655..a0da4e41afef 100644
--- a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/bitset/TestDataFormatterLibcxxBitset.py
+++ b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/bitset/TestDataFormatterLibcxxBitset.py
@@ -49,7 +49,7 @@ class TestDataFormatterLibcxxBitset(TestBase):
def test_ptr_and_ref(self):
"""Test that ref and ptr to std::bitset is displayed correctly"""
self.build()
- (_, process, _, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (_, process, _, bkpt) = lldbutil.run_to_source_breakpoint(self,
'Check ref and ptr',
lldb.SBFileSpec("main.cpp", False))
@@ -57,6 +57,6 @@ class TestDataFormatterLibcxxBitset(TestBase):
self.check("ptr", 13)
lldbutil.continue_to_breakpoint(process, bkpt)
-
+
self.check("ref", 200)
self.check("ptr", 200)
diff --git a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py
index 5f48b3541e5a..90a7e119fb84 100644
--- a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py
+++ b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/list/TestDataFormatterLibcxxList.py
@@ -90,7 +90,7 @@ class LibcxxListDataFormatterTestCase(TestBase):
self.runCmd("n") # This gets up past the printf
self.runCmd("n") # Now advance over the first push_back.
-
+
self.expect("frame variable numbers_list",
substrs=['list has 1 items',
'[0] = ',
diff --git a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py
index 72a886ff1285..0732c03de837 100644
--- a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py
+++ b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/multiset/TestDataFormatterLibcxxMultiSet.py
@@ -134,7 +134,7 @@ class LibcxxMultiSetDataFormatterTestCase(TestBase):
"""Test that the data formatters work on ref and ptr."""
self.build()
(self.target, process, _, bkpt) = lldbutil.run_to_source_breakpoint(
- self, "Stop here to check by ref and ptr.",
+ self, "Stop here to check by ref and ptr.",
lldb.SBFileSpec("main.cpp", False))
# The reference should print just like the value:
self.check_ii("ref")
diff --git a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py
index a6f1a3d2f430..8d83f2b081f8 100644
--- a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py
+++ b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/set/TestDataFormatterLibcxxSet.py
@@ -130,7 +130,7 @@ class LibcxxSetDataFormatterTestCase(TestBase):
"""Test that the data formatters work on ref and ptr."""
self.build()
(self.target, process, _, bkpt) = lldbutil.run_to_source_breakpoint(
- self, "Stop here to check by ref and ptr.",
+ self, "Stop here to check by ref and ptr.",
lldb.SBFileSpec("main.cpp", False))
# The reference should print just like the value:
self.check_ii("ref")
@@ -139,4 +139,4 @@ class LibcxxSetDataFormatterTestCase(TestBase):
substrs=["ptr =", "size=7"])
self.expect("expr ptr",
substrs=["size=7"])
-
+
diff --git a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py
index aeb10984b3b8..237e27fe1f31 100644
--- a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py
+++ b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py
@@ -192,7 +192,7 @@ class LibcxxVectorDataFormatterTestCase(TestBase):
self.check_numbers("ref")
# The pointer should just show the right number of elements:
-
+
self.expect("frame variable ptr", substrs=['ptr =', ' size=7'])
self.expect("p ptr", substrs=['$', 'size=7'])
diff --git a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py
index c2e02f546691..4f9047b84d0f 100644
--- a/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py
+++ b/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py
@@ -40,7 +40,7 @@ class StdTupleDataFormatterTestCase(TestBase):
self.assertEqual('"foobar"', frame.GetValueForVariablePath("ts[0]").GetSummary())
self.assertFalse(frame.GetValueForVariablePath("ts[1]").IsValid())
-
+
self.assertEqual(1, frame.GetValueForVariablePath("tt[0]").GetValueAsUnsigned())
self.assertEqual('"baz"', frame.GetValueForVariablePath("tt[1]").GetSummary())
self.assertEqual(2, frame.GetValueForVariablePath("tt[2]").GetValueAsUnsigned())
diff --git a/packages/Python/lldbsuite/test/functionalities/exec/TestExec.py b/packages/Python/lldbsuite/test/functionalities/exec/TestExec.py
index 611869932b61..8126a7ec750c 100644
--- a/packages/Python/lldbsuite/test/functionalities/exec/TestExec.py
+++ b/packages/Python/lldbsuite/test/functionalities/exec/TestExec.py
@@ -96,7 +96,7 @@ class ExecTestCase(TestBase):
if not skip_exec:
self.assertTrue(process.GetState() == lldb.eStateStopped,
"Process should be stopped at __dyld_start")
-
+
threads = lldbutil.get_stopped_threads(
process, lldb.eStopReasonExec)
self.assertTrue(
diff --git a/packages/Python/lldbsuite/test/functionalities/frame-language/TestGuessLanguage.py b/packages/Python/lldbsuite/test/functionalities/frame-language/TestGuessLanguage.py
index 59af2de836ff..959b621521e9 100644
--- a/packages/Python/lldbsuite/test/functionalities/frame-language/TestGuessLanguage.py
+++ b/packages/Python/lldbsuite/test/functionalities/frame-language/TestGuessLanguage.py
@@ -18,7 +18,7 @@ class TestFrameGuessLanguage(TestBase):
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
@@ -84,6 +84,6 @@ class TestFrameGuessLanguage(TestBase):
self.check_language(thread, 0, c_frame_language)
self.check_language(thread, 1, lldb.eLanguageTypeC_plus_plus)
self.check_language(thread, 2, lldb.eLanguageTypeC_plus_plus)
-
-
+
+
diff --git a/packages/Python/lldbsuite/test/functionalities/frame_var/TestFrameVar.py b/packages/Python/lldbsuite/test/functionalities/frame_var/TestFrameVar.py
index 960891b9eefc..b4e1b9c07634 100644
--- a/packages/Python/lldbsuite/test/functionalities/frame_var/TestFrameVar.py
+++ b/packages/Python/lldbsuite/test/functionalities/frame_var/TestFrameVar.py
@@ -17,7 +17,7 @@ class TestFrameVar(TestBase):
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
@@ -67,7 +67,7 @@ class TestFrameVar(TestBase):
frame = threads[0].GetFrameAtIndex(0)
command_result = lldb.SBCommandReturnObject()
interp = self.dbg.GetCommandInterpreter()
-
+
# Just get args:
result = interp.HandleCommand("frame var -l", command_result)
self.assertEqual(result, lldb.eReturnStatusSuccessFinishResult, "frame var -a didn't succeed")
@@ -85,7 +85,7 @@ class TestFrameVar(TestBase):
self.assertTrue("argv" not in output, "Locals found argv")
self.assertTrue("test_var" in output, "Locals didn't find test_var")
self.assertTrue("g_var" not in output, "Locals found a global")
-
+
# Get the file statics:
result = interp.HandleCommand("frame var -l -a -g", command_result)
self.assertEqual(result, lldb.eReturnStatusSuccessFinishResult, "frame var -a didn't succeed")
@@ -94,6 +94,6 @@ class TestFrameVar(TestBase):
self.assertTrue("argv" not in output, "Globals found argv")
self.assertTrue("test_var" not in output, "Globals found test_var")
self.assertTrue("g_var" in output, "Globals didn't find g_var")
-
-
+
+
diff --git a/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestTargetXMLArch.py b/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestTargetXMLArch.py
index ef9ce7700963..184867e480b4 100644
--- a/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestTargetXMLArch.py
+++ b/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestTargetXMLArch.py
@@ -98,12 +98,12 @@ class TestTargetXMLArch(GDBRemoteTestBase):
return "T05thread:00000001;06:9038d60f00700000;07:98b4062680ffffff;10:c0d7bf1b80ffffff;"
def readRegister(self, register):
- regs = {0x0: "00b0060000610000",
- 0xa: "68fe471c80ffffff",
- 0xc: "60574a1c80ffffff",
- 0xd: "18f3042680ffffff",
- 0xe: "be8a4d7142000000",
- 0xf: "50df471c80ffffff",
+ regs = {0x0: "00b0060000610000",
+ 0xa: "68fe471c80ffffff",
+ 0xc: "60574a1c80ffffff",
+ 0xd: "18f3042680ffffff",
+ 0xe: "be8a4d7142000000",
+ 0xf: "50df471c80ffffff",
0x10: "c0d7bf1b80ffffff" }
if register in regs:
return regs[register]
diff --git a/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py b/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py
index ebafd405e23e..d8d759a5dd58 100644
--- a/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py
+++ b/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py
@@ -467,7 +467,7 @@ class GDBRemoteTestBase(TestBase):
i = 0
j = 0
log = self.server.responder.packetLog
-
+
while i < len(packets) and j < len(log):
if log[j] == packets[i]:
i += 1
diff --git a/packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py b/packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py
index 90bd64901ee5..7956120bad32 100644
--- a/packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py
+++ b/packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py
@@ -17,7 +17,7 @@ class TestHistoryRecall(TestBase):
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
@@ -35,7 +35,7 @@ class TestHistoryRecall(TestBase):
result = lldb.SBCommandReturnObject()
interp.HandleCommand("command history", result, True)
interp.HandleCommand("platform list", result, True)
-
+
interp.HandleCommand("!0", result, False)
self.assertTrue(result.Succeeded(), "!0 command did not work: %s"%(result.GetError()))
self.assertTrue("command history" in result.GetOutput(), "!0 didn't rerun command history")
diff --git a/packages/Python/lldbsuite/test/functionalities/load_unload/TestLoadUnload.py b/packages/Python/lldbsuite/test/functionalities/load_unload/TestLoadUnload.py
index 6302112d2fe9..ab5791c614af 100644
--- a/packages/Python/lldbsuite/test/functionalities/load_unload/TestLoadUnload.py
+++ b/packages/Python/lldbsuite/test/functionalities/load_unload/TestLoadUnload.py
@@ -20,7 +20,7 @@ class LoadUnloadTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
-
+
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
@@ -210,7 +210,7 @@ class LoadUnloadTestCase(TestBase):
if not self.platformIsDarwin():
env_cmd_string += ":" + wd
self.runCmd(env_cmd_string)
-
+
# This time, the hidden library should be picked up.
self.expect("run", substrs=["return", "12345"])
diff --git a/packages/Python/lldbsuite/test/functionalities/load_using_paths/TestLoadUsingPaths.py b/packages/Python/lldbsuite/test/functionalities/load_using_paths/TestLoadUsingPaths.py
index 2050586adfa1..a4d0a0b958d5 100644
--- a/packages/Python/lldbsuite/test/functionalities/load_using_paths/TestLoadUsingPaths.py
+++ b/packages/Python/lldbsuite/test/functionalities/load_using_paths/TestLoadUsingPaths.py
@@ -20,7 +20,7 @@ class LoadUsingPathsTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
-
+
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
@@ -52,8 +52,8 @@ class LoadUsingPathsTestCase(TestBase):
# The directory with the dynamic library we did not link to.
path_dir = os.path.join(self.getBuildDir(), "hidden")
- (target, process, thread,
- _) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread,
+ _) = lldbutil.run_to_source_breakpoint(self,
"Break here to do the load using paths",
lldb.SBFileSpec("main.cpp"))
error = lldb.SBError()
@@ -63,18 +63,18 @@ class LoadUsingPathsTestCase(TestBase):
paths.AppendString(os.path.join(self.wd, "no_such_dir"))
out_spec = lldb.SBFileSpec()
-
+
# First try with no correct directories on the path, and make sure that doesn't blow up:
token = process.LoadImageUsingPaths(lib_spec, paths, out_spec, error)
self.assertEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Only looked on the provided path.")
-
+
# Now add the correct dir to the paths list and try again:
paths.AppendString(self.hidden_dir)
token = process.LoadImageUsingPaths(lib_spec, paths, out_spec, error)
self.assertNotEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Got a valid token")
self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library")
-
+
# Make sure this really is in the image list:
loaded_module = target.FindModule(out_spec)
@@ -89,11 +89,11 @@ class LoadUsingPathsTestCase(TestBase):
# Make sure the token works to unload it:
process.UnloadImage(token)
- # Make sure this really is no longer in the image list:
+ # Make sure this really is no longer in the image list:
loaded_module = target.FindModule(out_spec)
self.assertFalse(loaded_module.IsValid(), "The unloaded module is no longer in the image list.")
-
+
# Make sure a relative path also works:
paths.Clear()
paths.AppendString(os.path.join(self.wd, "no_such_dir"))
@@ -107,7 +107,7 @@ class LoadUsingPathsTestCase(TestBase):
self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library with relative path")
process.UnloadImage(token)
-
+
# Make sure the presence of an empty path doesn't mess anything up:
paths.Clear()
paths.AppendString("")
@@ -122,7 +122,7 @@ class LoadUsingPathsTestCase(TestBase):
self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library with included empty path")
process.UnloadImage(token)
-
+
# Finally, passing in an absolute path should work like the basename:
@@ -140,4 +140,4 @@ class LoadUsingPathsTestCase(TestBase):
self.assertNotEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Got a valid token")
self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library")
-
+
diff --git a/packages/Python/lldbsuite/test/functionalities/pre_run_dylibs/TestPreRunDylibs.py b/packages/Python/lldbsuite/test/functionalities/pre_run_dylibs/TestPreRunDylibs.py
index befb42186112..65084211cd6d 100644
--- a/packages/Python/lldbsuite/test/functionalities/pre_run_dylibs/TestPreRunDylibs.py
+++ b/packages/Python/lldbsuite/test/functionalities/pre_run_dylibs/TestPreRunDylibs.py
@@ -35,4 +35,4 @@ class TestPreRunLibraries(TestBase):
self.assertTrue(found_it, "Couldn't find unlikely_to_occur_name in loaded libraries.")
-
+
diff --git a/packages/Python/lldbsuite/test/functionalities/register/intel_avx/TestZMMRegister.py b/packages/Python/lldbsuite/test/functionalities/register/intel_avx/TestZMMRegister.py
index 823e40155ff5..92c67c88f020 100644
--- a/packages/Python/lldbsuite/test/functionalities/register/intel_avx/TestZMMRegister.py
+++ b/packages/Python/lldbsuite/test/functionalities/register/intel_avx/TestZMMRegister.py
@@ -81,7 +81,7 @@ class TestYMMRegister(TestBase):
self.expect(
"register read ymm" + str(i),
substrs=[pattern])
-
+
self.expect("continue", PROCESS_STOPPED, substrs=['stopped'])
# Check stop reason; Should be either signal SIGTRAP or EXC_BREAKPOINT
diff --git a/packages/Python/lldbsuite/test/functionalities/return-value/TestReturnValue.py b/packages/Python/lldbsuite/test/functionalities/return-value/TestReturnValue.py
index b7d0d8170b3b..929bd4a73511 100644
--- a/packages/Python/lldbsuite/test/functionalities/return-value/TestReturnValue.py
+++ b/packages/Python/lldbsuite/test/functionalities/return-value/TestReturnValue.py
@@ -68,7 +68,7 @@ class ReturnValueTestCase(TestBase):
# Run again and we will stop in inner_sint the second time outer_sint is called.
# Then test stepping out two frames at once:
-
+
thread_list = lldbutil.continue_to_breakpoint(self.process, inner_sint_bkpt)
self.assertTrue(len(thread_list) == 1)
thread = thread_list[0]
diff --git a/packages/Python/lldbsuite/test/functionalities/thread/create_during_step/TestCreateDuringStep.py b/packages/Python/lldbsuite/test/functionalities/thread/create_during_step/TestCreateDuringStep.py
index 3998db6d3256..9e30ba3e1345 100644
--- a/packages/Python/lldbsuite/test/functionalities/thread/create_during_step/TestCreateDuringStep.py
+++ b/packages/Python/lldbsuite/test/functionalities/thread/create_during_step/TestCreateDuringStep.py
@@ -90,7 +90,7 @@ class CreateDuringStepTestCase(TestBase):
target = self.dbg.GetSelectedTarget()
# This should create a breakpoint in the stepping thread.
- self.bkpt = target.BreakpointCreateByLocation("main.cpp", self.breakpoint)
+ self.bkpt = target.BreakpointCreateByLocation("main.cpp", self.breakpoint)
# Run the program.
self.runCmd("run", RUN_SUCCEEDED)
diff --git a/packages/Python/lldbsuite/test/functionalities/thread/num_threads/TestNumThreads.py b/packages/Python/lldbsuite/test/functionalities/thread/num_threads/TestNumThreads.py
index 4c4e645635c1..724b9d8be907 100644
--- a/packages/Python/lldbsuite/test/functionalities/thread/num_threads/TestNumThreads.py
+++ b/packages/Python/lldbsuite/test/functionalities/thread/num_threads/TestNumThreads.py
@@ -92,7 +92,7 @@ class NumberOfThreadsTestCase(TestBase):
self.assertTrue(
num_threads >= 10,
'Number of expected threads and actual threads do not match.')
-
+
# Attempt to walk each of the thread's executing the thread3 function to
# the same breakpoint.
def is_thread3(thread):
diff --git a/packages/Python/lldbsuite/test/functionalities/thread/step_until/TestStepUntil.py b/packages/Python/lldbsuite/test/functionalities/thread/step_until/TestStepUntil.py
index 3bace5780639..b0e7add37297 100644
--- a/packages/Python/lldbsuite/test/functionalities/thread/step_until/TestStepUntil.py
+++ b/packages/Python/lldbsuite/test/functionalities/thread/step_until/TestStepUntil.py
@@ -61,7 +61,7 @@ class StepUntilTestCase(TestBase):
cmd_line = "thread until"
for line_num in until_lines:
cmd_line += " %d"%(line_num)
-
+
cmd_interp.HandleCommand(cmd_line, ret_obj)
self.assertTrue(ret_obj.Succeeded(), "'%s' failed: %s."%(cmd_line, ret_obj.GetError()))
diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py
index b51cab38aa86..22dc19ed322f 100644
--- a/packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py
+++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py
@@ -85,7 +85,7 @@ class WatchpointSlotsTestCase(TestBase):
# Set a watchpoint at byteArray[3]
self.expect("watchpoint set variable byteArray[3]", WATCHPOINT_CREATED,
substrs=['Watchpoint created','size = 1'])
-
+
# Resume inferior.
self.runCmd("process continue")
@@ -98,6 +98,6 @@ class WatchpointSlotsTestCase(TestBase):
else:
self.expect("thread list -v", STOPPED_DUE_TO_WATCHPOINT,
substrs=['stopped', 'stop reason = watchpoint 3'])
-
+
# Resume inferior.
self.runCmd("process continue")
diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_disable/TestWatchpointDisable.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_disable/TestWatchpointDisable.py
index 587dcabb2ba3..ea4f06218a0d 100644
--- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_disable/TestWatchpointDisable.py
+++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_disable/TestWatchpointDisable.py
@@ -65,9 +65,9 @@ class TestWatchpointSetEnable(TestBase):
wp.SetEnabled(False)
self.assertTrue(not wp.IsEnabled(), "The watchpoint thinks it is still enabled")
-
+
process.Continue()
-
+
stop_reason = thread.GetStopReason()
self.assertEqual(stop_reason, lldb.eStopReasonBreakpoint, "We didn't stop at our breakpoint.")
@@ -78,4 +78,4 @@ class TestWatchpointSetEnable(TestBase):
process.Continue()
stop_reason = thread.GetStopReason()
self.assertEqual(stop_reason, lldb.eStopReasonWatchpoint, "We didn't stop at our watchpoint")
-
+
diff --git a/packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py b/packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py
index 75aef291cc49..6827fb4af0e6 100644
--- a/packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py
+++ b/packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py
@@ -17,7 +17,7 @@ class TestFindTypesOnStructType(TestBase):
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
diff --git a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py b/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py
index 358b3b2d93ae..c0afb3cf4919 100644
--- a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py
+++ b/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py
@@ -18,7 +18,7 @@ class DynamicValueSameBaseTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
@@ -35,7 +35,7 @@ class DynamicValueSameBaseTestCase(TestBase):
def sample_test(self):
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
- "Break here to get started", self.main_source_file)
+ "Break here to get started", self.main_source_file)
# Set breakpoints in the two class methods and run to them:
namesp_bkpt = target.BreakpointCreateBySourceRegex("namesp function did something.", self.main_source_file)
@@ -62,5 +62,5 @@ class DynamicValueSameBaseTestCase(TestBase):
virtual_type = virtual_this.GetType().GetUnqualifiedType()
self.assertEqual(virtual_type.GetName(), "Virtual *", "Didn't get the right dynamic type")
-
+
diff --git a/packages/Python/lldbsuite/test/lang/cpp/incomplete-types/TestCppIncompleteTypes.py b/packages/Python/lldbsuite/test/lang/cpp/incomplete-types/TestCppIncompleteTypes.py
index 92b58ce11d77..7ce2e343b88f 100644
--- a/packages/Python/lldbsuite/test/lang/cpp/incomplete-types/TestCppIncompleteTypes.py
+++ b/packages/Python/lldbsuite/test/lang/cpp/incomplete-types/TestCppIncompleteTypes.py
@@ -49,7 +49,7 @@ class TestCppIncompleteTypes(TestBase):
src_file = "main.cpp"
src_file_spec = lldb.SBFileSpec(src_file)
- (target, process, thread, main_breakpoint) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread, main_breakpoint) = lldbutil.run_to_source_breakpoint(self,
"break here", src_file_spec, exe_name = exe)
# Get frame for current thread
return thread.GetSelectedFrame()
diff --git a/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py b/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py
index 8e83a3ab1a4a..af362f5be5d7 100644
--- a/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py
+++ b/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py
@@ -4,4 +4,4 @@ from lldbsuite.test import decorators
lldbinline.MakeInlineTest(
__file__, globals(), [
decorators.expectedFailureAll(
- oslist=["windows"], bugnumber="llvm.org/pr24764")]) \ No newline at end of file
+ oslist=["windows"], bugnumber="llvm.org/pr24764")])
diff --git a/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py b/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py
index 5cd9e4ed1b4f..c7afeb2dbb6f 100644
--- a/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py
+++ b/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py
@@ -18,7 +18,7 @@ class TestCppScopes(TestBase):
@expectedFailureAll(oslist=["windows"])
def test_c(self):
self.do_test(True)
-
+
def do_test(self, test_c):
self.build()
diff --git a/packages/Python/lldbsuite/test/lang/cpp/trivial_abi/TestTrivialABI.py b/packages/Python/lldbsuite/test/lang/cpp/trivial_abi/TestTrivialABI.py
index 2aae7dc89d34..11263abeea3c 100644
--- a/packages/Python/lldbsuite/test/lang/cpp/trivial_abi/TestTrivialABI.py
+++ b/packages/Python/lldbsuite/test/lang/cpp/trivial_abi/TestTrivialABI.py
@@ -53,14 +53,14 @@ class TestTrivialABI(TestBase):
options = lldb.SBExpressionOptions()
inVal_expr = frame.EvaluateExpression("inVal", options)
self.check_value(inVal_expr, 10)
-
+
thread.StepOut()
outVal_ret = thread.GetStopReturnValue()
self.check_value(outVal_ret, 30)
def expr_test(self, trivial):
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
- "Set a breakpoint here", self.main_source_file)
+ "Set a breakpoint here", self.main_source_file)
# Stop in a function that takes a trivial value, and try both frame var & expr to get its value:
if trivial:
diff --git a/packages/Python/lldbsuite/test/lldbdwarf.py b/packages/Python/lldbsuite/test/lldbdwarf.py
index 1b50eb130ab9..217f8bc0e2b7 100644
--- a/packages/Python/lldbsuite/test/lldbdwarf.py
+++ b/packages/Python/lldbsuite/test/lldbdwarf.py
@@ -191,7 +191,7 @@ class DwarfOpcodeParser(object):
break
if val == DW_OP_regx:
- # Read register number
+ # Read register number
self.assertTrue(len(dwarf_opcode) > (index + 1))
reg_no = int(dwarf_opcode.pop(index + 1), 16)
@@ -201,7 +201,7 @@ class DwarfOpcodeParser(object):
["read packet: $p{0:x}#00".format(reg_no),
{"direction": "send", "regex": r"^\$([0-9a-fA-F]+)#",
"capture": {1: "p_response"}}],True)
-
+
Context = self.expect_gdbremote_sequence()
self.assertIsNotNone(Context)
p_response = Context.get("p_response")
@@ -219,7 +219,7 @@ class DwarfOpcodeParser(object):
elif val == DW_OP_lit1:
# Push literal 1
dwarf_data.append(1)
-
+
elif val == DW_OP_lit26:
# Push literal 26
dwarf_data.append(26)
diff --git a/packages/Python/lldbsuite/test/lldbtest.py b/packages/Python/lldbsuite/test/lldbtest.py
index d5dd90a86517..1b6302ae96a6 100644
--- a/packages/Python/lldbsuite/test/lldbtest.py
+++ b/packages/Python/lldbsuite/test/lldbtest.py
@@ -184,9 +184,10 @@ def CMD_MSG(str):
return "Command '%s' returns successfully" % str
-def COMPLETION_MSG(str_before, str_after):
+def COMPLETION_MSG(str_before, str_after, completions):
'''A generic message generator for the completion mechanism.'''
- return "'%s' successfully completes to '%s'" % (str_before, str_after)
+ return ("'%s' successfully completes to '%s', but completions were:\n%s"
+ % (str_before, str_after, "\n".join(completions)))
def EXP_MSG(str, actual, exe):
@@ -702,8 +703,8 @@ class Base(unittest2.TestCase):
"""Return the full path to the current test."""
return os.path.join(os.environ["LLDB_BUILD"], self.mydir,
self.getBuildDirBasename())
-
-
+
+
def makeBuildDir(self):
"""Create the test-specific working directory, deleting any previous
contents."""
@@ -712,11 +713,11 @@ class Base(unittest2.TestCase):
if os.path.isdir(bdir):
shutil.rmtree(bdir)
lldbutil.mkdir_p(bdir)
-
+
def getBuildArtifact(self, name="a.out"):
"""Return absolute path to an artifact in the test's build directory."""
return os.path.join(self.getBuildDir(), name)
-
+
def getSourcePath(self, name):
"""Return absolute path to a file in the test's source directory."""
return os.path.join(self.getSourceDir(), name)
@@ -1844,7 +1845,7 @@ class TestBase(Base):
temp = os.path.join(self.getSourceDir(), template)
with open(temp, 'r') as f:
content = f.read()
-
+
public_api_dir = os.path.join(
os.environ["LLDB_SRC"], "include", "lldb", "API")
diff --git a/packages/Python/lldbsuite/test/lldbutil.py b/packages/Python/lldbsuite/test/lldbutil.py
index 90ac799f4897..dc84383333ee 100644
--- a/packages/Python/lldbsuite/test/lldbutil.py
+++ b/packages/Python/lldbsuite/test/lldbutil.py
@@ -740,7 +740,7 @@ def get_crashed_threads(test, process):
def run_to_breakpoint_make_target(test, exe_name, in_cwd):
if in_cwd:
exe = test.getBuildArtifact(exe_name)
-
+
# Create the target
target = test.dbg.CreateTarget(exe)
test.assertTrue(target, "Target: %s is not valid."%(exe_name))
@@ -756,8 +756,8 @@ def run_to_breakpoint_do_run(test, target, bkpt, launch_info):
error = lldb.SBError()
process = target.Launch(launch_info, error)
- test.assertTrue(process,
- "Could not create a valid process for %s: %s"%(target.GetExecutable().GetFilename(),
+ test.assertTrue(process,
+ "Could not create a valid process for %s: %s"%(target.GetExecutable().GetFilename(),
error.GetCString()))
# Frame #0 should be at our breakpoint.
@@ -768,7 +768,7 @@ def run_to_breakpoint_do_run(test, target, bkpt, launch_info):
thread = threads[0]
return (target, process, thread, bkpt)
-def run_to_name_breakpoint (test, bkpt_name, launch_info = None,
+def run_to_name_breakpoint (test, bkpt_name, launch_info = None,
exe_name = "a.out",
bkpt_module = None,
in_cwd = True):
@@ -818,7 +818,7 @@ def run_to_source_breakpoint(test, bkpt_pattern, source_spec,
# Set the breakpoints
breakpoint = target.BreakpointCreateBySourceRegex(
bkpt_pattern, source_spec, bkpt_module)
- test.assertTrue(breakpoint.GetNumLocations() > 0,
+ test.assertTrue(breakpoint.GetNumLocations() > 0,
'No locations found for source breakpoint: "%s", file: "%s", dir: "%s"'%(bkpt_pattern, source_spec.GetFilename(), source_spec.GetDirectory()))
return run_to_breakpoint_do_run(test, target, breakpoint, launch_info)
diff --git a/packages/Python/lldbsuite/test/macosx/find-app-in-bundle/TestFindAppInBundle.py b/packages/Python/lldbsuite/test/macosx/find-app-in-bundle/TestFindAppInBundle.py
index af6beeefd391..c380d5379962 100644
--- a/packages/Python/lldbsuite/test/macosx/find-app-in-bundle/TestFindAppInBundle.py
+++ b/packages/Python/lldbsuite/test/macosx/find-app-in-bundle/TestFindAppInBundle.py
@@ -55,12 +55,12 @@ class FindAppInMacOSAppBundle(TestBase):
error = lldb.SBError()
process = target.Launch(launch_info, error)
-
+
self.assertTrue(process.IsValid(), "Could not create a valid process for TestApp: %s"%(error.GetCString()))
-
+
# Frame #0 should be at our breakpoint.
threads = lldbutil.get_threads_stopped_at_breakpoint(process, bkpt)
-
+
self.assertTrue(len(threads) == 1, "Expected 1 thread to stop at breakpoint, %d did."%(len(threads)))
diff --git a/packages/Python/lldbsuite/test/macosx/find-dsym/bundle-with-dot-in-filename/TestBundleWithDotInFilename.py b/packages/Python/lldbsuite/test/macosx/find-dsym/bundle-with-dot-in-filename/TestBundleWithDotInFilename.py
index 9a046cf0b294..ad90d85ab3f7 100644
--- a/packages/Python/lldbsuite/test/macosx/find-dsym/bundle-with-dot-in-filename/TestBundleWithDotInFilename.py
+++ b/packages/Python/lldbsuite/test/macosx/find-dsym/bundle-with-dot-in-filename/TestBundleWithDotInFilename.py
@@ -47,7 +47,7 @@ class BundleWithDotInFilenameTestCase(TestBase):
sleep(5)
# Since the library that was dlopen()'ed is now removed, lldb will need to find the
- # binary & dSYM via target.exec-search-paths
+ # binary & dSYM via target.exec-search-paths
settings_str = "settings set target.exec-search-paths " + self.get_process_working_directory() + "/hide.app"
self.runCmd(settings_str)
diff --git a/packages/Python/lldbsuite/test/macosx/find-dsym/deep-bundle/TestDeepBundle.py b/packages/Python/lldbsuite/test/macosx/find-dsym/deep-bundle/TestDeepBundle.py
index d6123e39c3fe..2ed7fdfd3fe4 100644
--- a/packages/Python/lldbsuite/test/macosx/find-dsym/deep-bundle/TestDeepBundle.py
+++ b/packages/Python/lldbsuite/test/macosx/find-dsym/deep-bundle/TestDeepBundle.py
@@ -46,7 +46,7 @@ class DeepBundleTestCase(TestBase):
sleep(5)
# Since the library that was dlopen()'ed is now removed, lldb will need to find the
- # binary & dSYM via target.exec-search-paths
+ # binary & dSYM via target.exec-search-paths
settings_str = "settings set target.exec-search-paths " + self.get_process_working_directory() + "/hide.app"
self.runCmd(settings_str)
self.runCmd("process attach -p " + str(popen.pid))
@@ -67,7 +67,7 @@ class DeepBundleTestCase(TestBase):
dsym_name = mod.GetSymbolFileSpec().GetFilename()
self.assertTrue (dsym_name == 'MyFramework', "Check that we found the dSYM for the bundle that was loaded")
i=i+1
-
+
self.assertTrue(found_module, "Check that we found the framework loaded in lldb's image list")
if __name__ == '__main__':
diff --git a/packages/Python/lldbsuite/test/macosx/thread-names/TestInterruptThreadNames.py b/packages/Python/lldbsuite/test/macosx/thread-names/TestInterruptThreadNames.py
index 925dc92951ce..515ab3f2bbd9 100644
--- a/packages/Python/lldbsuite/test/macosx/thread-names/TestInterruptThreadNames.py
+++ b/packages/Python/lldbsuite/test/macosx/thread-names/TestInterruptThreadNames.py
@@ -1,4 +1,4 @@
-"""Test that we get thread names when interrupting a process."""
+"""Test that we get thread names when interrupting a process."""
from __future__ import print_function
@@ -63,7 +63,7 @@ class TestInterruptThreadNames(TestBase):
process.Kill()
- # The process will set a global variable 'threads_up_and_running' to 1 when
+ # The process will set a global variable 'threads_up_and_running' to 1 when
# it has has completed its setup. Sleep for one second, pause the program,
# check to see if the global has that value, and continue if it does not.
def wait_until_program_setup_complete(self, process, listener):
@@ -107,7 +107,7 @@ class TestInterruptThreadNames(TestBase):
return False
# Listen to the process events until we get an event saying the process is
- # stopped. Retry up to five times in case we get other events that we are
+ # stopped. Retry up to five times in case we get other events that we are
# not looking for.
def wait_for_stop(self, process, listener):
retry_count = 5
diff --git a/packages/Python/lldbsuite/test/python_api/name_lookup/TestNameLookup.py b/packages/Python/lldbsuite/test/python_api/name_lookup/TestNameLookup.py
index 6511ff865bd9..ba68ca926d83 100644
--- a/packages/Python/lldbsuite/test/python_api/name_lookup/TestNameLookup.py
+++ b/packages/Python/lldbsuite/test/python_api/name_lookup/TestNameLookup.py
@@ -23,7 +23,7 @@ class TestNameLookup(TestBase):
@expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
def test_target(self):
"""Exercise SBTarget.FindFunctions() with various name masks.
-
+
A previous regression caused mangled names to not be able to be looked up.
This test verifies that using a mangled name with eFunctionNameTypeFull works
and that using a function basename with eFunctionNameTypeFull works for all
@@ -36,7 +36,7 @@ class TestNameLookup(TestBase):
self.assertTrue(target, VALID_TARGET)
exe_module = target.FindModule(target.GetExecutable())
-
+
c_name_to_symbol = {}
cpp_name_to_symbol = {}
mangled_to_symbol = {}
@@ -54,7 +54,7 @@ class TestNameLookup(TestBase):
c_name_to_symbol[name] = symbol
# Make sure each mangled name turns up exactly one match when looking up
- # functions by full name and using the mangled name as the name in the
+ # functions by full name and using the mangled name as the name in the
# lookup
self.assertGreaterEqual(len(mangled_to_symbol), 6)
for mangled in mangled_to_symbol.keys():
@@ -63,5 +63,5 @@ class TestNameLookup(TestBase):
for symbol_context in symbol_contexts:
self.assertTrue(symbol_context.GetFunction().IsValid())
self.assertTrue(symbol_context.GetSymbol().IsValid())
-
-
+
+
diff --git a/packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py b/packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py
index a1a400a076b5..6bdf9a2036ef 100644
--- a/packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py
+++ b/packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py
@@ -23,7 +23,7 @@ class SBDataAPICase(TestBase):
@add_test_categories(['pyapi'])
def test_byte_order_and_address_byte_size(self):
- """Test the SBData::SetData() to ensure the byte order and address
+ """Test the SBData::SetData() to ensure the byte order and address
byte size are obeyed"""
addr_data = b'\x11\x22\x33\x44\x55\x66\x77\x88'
error = lldb.SBError()
diff --git a/packages/Python/lldbsuite/test/sample_test/TestSampleTest.py b/packages/Python/lldbsuite/test/sample_test/TestSampleTest.py
index 9a1748bbabb5..97674f5336a9 100644
--- a/packages/Python/lldbsuite/test/sample_test/TestSampleTest.py
+++ b/packages/Python/lldbsuite/test/sample_test/TestSampleTest.py
@@ -17,7 +17,7 @@ class RenameThisSampleTestTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
@@ -40,7 +40,7 @@ class RenameThisSampleTestTestCase(TestBase):
# It optionally takes an SBLaunchOption argument if you want to pass
# arguments or environment variables.
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
- "Set a breakpoint here", self.main_source_file)
+ "Set a breakpoint here", self.main_source_file)
frame = thread.GetFrameAtIndex(0)
test_var = frame.FindVariable("test_var")
diff --git a/packages/Python/lldbsuite/test/settings/TestSettings.py b/packages/Python/lldbsuite/test/settings/TestSettings.py
index 6b8ac7c3d5d5..d6fa5a93b72c 100644
--- a/packages/Python/lldbsuite/test/settings/TestSettings.py
+++ b/packages/Python/lldbsuite/test/settings/TestSettings.py
@@ -528,7 +528,7 @@ class SettingsCommandTestCase(TestBase):
# settings under an ".experimental" domain should have two properties:
# 1. If the name does not exist with "experimental" in the name path,
# the name lookup should try to find it without "experimental". So
- # a previously-experimental setting that has been promoted to a
+ # a previously-experimental setting that has been promoted to a
# "real" setting will still be set by the original name.
# 2. Changing a setting with .experimental., name, where the setting
# does not exist either with ".experimental." or without, should
diff --git a/packages/Python/lldbsuite/test/tools/lldb-mi/startup_options/TestMiStartupOptions.py b/packages/Python/lldbsuite/test/tools/lldb-mi/startup_options/TestMiStartupOptions.py
index 7c225ab87a3c..467952db7eba 100644
--- a/packages/Python/lldbsuite/test/tools/lldb-mi/startup_options/TestMiStartupOptions.py
+++ b/packages/Python/lldbsuite/test/tools/lldb-mi/startup_options/TestMiStartupOptions.py
@@ -139,7 +139,7 @@ class MiStartupOptionsTestCase(lldbmi_testcase.MiTestCaseBase):
with open(destFile, 'w+') as dest:
dest.write(src.read().replace("a.out", self.myexe))
return destFile
-
+
@skipIfRemote # We do not currently support remote debugging via the MI.
@skipIfWindows # llvm.org/pr24452: Get lldb-mi tests working on Windows
@skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races
diff --git a/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemote_qThreadStopInfo.py b/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemote_qThreadStopInfo.py
index 647e57832b05..a25484e73baf 100644
--- a/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemote_qThreadStopInfo.py
+++ b/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemote_qThreadStopInfo.py
@@ -16,7 +16,7 @@ class TestGdbRemote_qThreadStopInfo(gdbremote_testcase.GdbRemoteTestCaseBase):
THREAD_COUNT = 5
@skipIfDarwinEmbedded # <rdar://problem/34539270> lldb-server tests not updated to work on ios etc yet
- @skipIfDarwinEmbedded # <rdar://problem/27005337>
+ @skipIfDarwinEmbedded # <rdar://problem/27005337>
def gather_stop_replies_via_qThreadStopInfo(self, thread_count):
# Set up the inferior args.
inferior_args = []
diff --git a/packages/Python/lldbsuite/test/tools/lldb-server/TestLldbGdbServer.py b/packages/Python/lldbsuite/test/tools/lldb-server/TestLldbGdbServer.py
index 82e76ca125bb..f5169e7e2029 100644
--- a/packages/Python/lldbsuite/test/tools/lldb-server/TestLldbGdbServer.py
+++ b/packages/Python/lldbsuite/test/tools/lldb-server/TestLldbGdbServer.py
@@ -1162,7 +1162,7 @@ class LldbGdbServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase, DwarfOpcod
BREAKPOINT_KIND = 1
# Set default packet type to Z0 (software breakpoint)
- z_packet_type = 0
+ z_packet_type = 0
# If hardware breakpoint is requested set packet type to Z1
if want_hardware == True:
diff --git a/source/Commands/CommandCompletions.cpp b/source/Commands/CommandCompletions.cpp
index bdfdbb83219b..7b351c50dc69 100644
--- a/source/Commands/CommandCompletions.cpp
+++ b/source/Commands/CommandCompletions.cpp
@@ -90,7 +90,7 @@ int CommandCompletions::SourceFiles(CommandInterpreter &interpreter,
} else {
completer.DoCompletion(searcher);
}
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
static int DiskFilesOrDirectories(const llvm::Twine &partial_name,
@@ -103,7 +103,7 @@ static int DiskFilesOrDirectories(const llvm::Twine &partial_name,
partial_name.toVector(CompletionBuffer);
if (CompletionBuffer.size() >= PATH_MAX)
- return 0;
+ return matches.GetSize();
namespace fs = llvm::sys::fs;
namespace path = llvm::sys::path;
@@ -145,7 +145,7 @@ static int DiskFilesOrDirectories(const llvm::Twine &partial_name,
// Make sure it ends with a separator.
path::append(CompletionBuffer, path::get_separator());
matches.AppendString(CompletionBuffer);
- return 1;
+ return matches.GetSize();
}
// We want to keep the form the user typed, so we special case this to
@@ -224,13 +224,21 @@ static int DiskFilesOrDirectories(const llvm::Twine &partial_name,
return matches.GetSize();
}
+static int DiskFilesOrDirectories(CompletionRequest &request,
+ bool only_directories) {
+ request.SetWordComplete(false);
+ StandardTildeExpressionResolver resolver;
+ StringList matches;
+ DiskFilesOrDirectories(request.GetCursorArgumentPrefix(), only_directories,
+ matches, resolver);
+ request.AddCompletions(matches);
+ return request.GetNumberOfMatches();
+}
+
int CommandCompletions::DiskFiles(CommandInterpreter &interpreter,
CompletionRequest &request,
SearchFilter *searcher) {
- request.SetWordComplete(false);
- StandardTildeExpressionResolver Resolver;
- return DiskFiles(request.GetCursorArgumentPrefix(), request.GetMatches(),
- Resolver);
+ return DiskFilesOrDirectories(request, /*only_dirs*/ false);
}
int CommandCompletions::DiskFiles(const llvm::Twine &partial_file_name,
@@ -242,10 +250,7 @@ int CommandCompletions::DiskFiles(const llvm::Twine &partial_file_name,
int CommandCompletions::DiskDirectories(CommandInterpreter &interpreter,
CompletionRequest &request,
SearchFilter *searcher) {
- request.SetWordComplete(false);
- StandardTildeExpressionResolver Resolver;
- return DiskDirectories(request.GetCursorArgumentPrefix(),
- request.GetMatches(), Resolver);
+ return DiskFilesOrDirectories(request, /*only_dirs*/ true);
}
int CommandCompletions::DiskDirectories(const llvm::Twine &partial_file_name,
@@ -267,7 +272,7 @@ int CommandCompletions::Modules(CommandInterpreter &interpreter,
} else {
completer.DoCompletion(searcher);
}
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
int CommandCompletions::Symbols(CommandInterpreter &interpreter,
@@ -283,7 +288,7 @@ int CommandCompletions::Symbols(CommandInterpreter &interpreter,
} else {
completer.DoCompletion(searcher);
}
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
int CommandCompletions::SettingsNames(CommandInterpreter &interpreter,
@@ -304,20 +309,23 @@ int CommandCompletions::SettingsNames(CommandInterpreter &interpreter,
}
size_t exact_matches_idx = SIZE_MAX;
- const size_t num_matches =
- g_property_names.AutoComplete(request.GetCursorArgumentPrefix(),
- request.GetMatches(), exact_matches_idx);
+ StringList matches;
+ g_property_names.AutoComplete(request.GetCursorArgumentPrefix(), matches,
+ exact_matches_idx);
request.SetWordComplete(exact_matches_idx != SIZE_MAX);
- return num_matches;
+ request.AddCompletions(matches);
+ return request.GetNumberOfMatches();
}
int CommandCompletions::PlatformPluginNames(CommandInterpreter &interpreter,
CompletionRequest &request,
SearchFilter *searcher) {
- const uint32_t num_matches = PluginManager::AutoCompletePlatformName(
- request.GetCursorArgumentPrefix(), request.GetMatches());
+ StringList new_matches;
+ std::size_t num_matches = PluginManager::AutoCompletePlatformName(
+ request.GetCursorArgumentPrefix(), new_matches);
request.SetWordComplete(num_matches == 1);
- return num_matches;
+ request.AddCompletions(new_matches);
+ return request.GetNumberOfMatches();
}
int CommandCompletions::ArchitectureNames(CommandInterpreter &interpreter,
@@ -409,10 +417,10 @@ CommandCompletions::SourceFileCompleter::DoCompletion(SearchFilter *filter) {
filter->Search(*this);
// Now convert the filelist to completions:
for (size_t i = 0; i < m_matching_files.GetSize(); i++) {
- m_request.GetMatches().AppendString(
+ m_request.AddCompletion(
m_matching_files.GetFileSpecAtIndex(i).GetFilename().GetCString());
}
- return m_request.GetMatches().GetSize();
+ return m_request.GetNumberOfMatches();
}
//----------------------------------------------------------------------
@@ -478,9 +486,9 @@ size_t CommandCompletions::SymbolCompleter::DoCompletion(SearchFilter *filter) {
filter->Search(*this);
collection::iterator pos = m_match_set.begin(), end = m_match_set.end();
for (pos = m_match_set.begin(); pos != end; pos++)
- m_request.GetMatches().AppendString((*pos).GetCString());
+ m_request.AddCompletion((*pos).GetCString());
- return m_request.GetMatches().GetSize();
+ return m_request.GetNumberOfMatches();
}
//----------------------------------------------------------------------
@@ -517,7 +525,7 @@ Searcher::CallbackReturn CommandCompletions::ModuleCompleter::SearchCallback(
match = false;
if (match) {
- m_request.GetMatches().AppendString(cur_file_name);
+ m_request.AddCompletion(cur_file_name);
}
}
return Searcher::eCallbackReturnContinue;
@@ -525,5 +533,5 @@ Searcher::CallbackReturn CommandCompletions::ModuleCompleter::SearchCallback(
size_t CommandCompletions::ModuleCompleter::DoCompletion(SearchFilter *filter) {
filter->Search(*this);
- return m_request.GetMatches().GetSize();
+ return m_request.GetNumberOfMatches();
}
diff --git a/source/Commands/CommandObjectCommands.cpp b/source/Commands/CommandObjectCommands.cpp
index 3012ee4a188d..333f72056cbc 100644
--- a/source/Commands/CommandObjectCommands.cpp
+++ b/source/Commands/CommandObjectCommands.cpp
@@ -241,7 +241,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
Options *GetOptions() override { return &m_options; }
@@ -1429,7 +1429,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
Options *GetOptions() override { return &m_options; }
diff --git a/source/Commands/CommandObjectFrame.cpp b/source/Commands/CommandObjectFrame.cpp
index 0183c43f85b5..64de14f2edbf 100644
--- a/source/Commands/CommandObjectFrame.cpp
+++ b/source/Commands/CommandObjectFrame.cpp
@@ -470,7 +470,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eVariablePathCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
diff --git a/source/Commands/CommandObjectMultiword.cpp b/source/Commands/CommandObjectMultiword.cpp
index ade1a2d01f38..19fcf60e557c 100644
--- a/source/Commands/CommandObjectMultiword.cpp
+++ b/source/Commands/CommandObjectMultiword.cpp
@@ -143,7 +143,7 @@ bool CommandObjectMultiword::Execute(const char *args_string,
if (num_subcmd_matches > 0) {
error_msg.append(" Possible completions:");
- for (size_t i = 0; i < num_subcmd_matches; i++) {
+ for (size_t i = 0; i < matches.GetSize(); i++) {
error_msg.append("\n\t");
error_msg.append(matches.GetStringAtIndex(i));
}
@@ -190,21 +190,22 @@ int CommandObjectMultiword::HandleCompletion(CompletionRequest &request) {
// Any of the command matches will provide a complete word, otherwise the
// individual completers will override this.
request.SetWordComplete(true);
- auto &matches = request.GetMatches();
auto arg0 = request.GetParsedLine()[0].ref;
if (request.GetCursorIndex() == 0) {
- AddNamesMatchingPartialString(m_subcommand_dict, arg0, matches);
+ StringList new_matches;
+ AddNamesMatchingPartialString(m_subcommand_dict, arg0, new_matches);
+ request.AddCompletions(new_matches);
- if (matches.GetSize() == 1 && matches.GetStringAtIndex(0) != nullptr &&
- (arg0 == matches.GetStringAtIndex(0))) {
+ if (new_matches.GetSize() == 1 &&
+ new_matches.GetStringAtIndex(0) != nullptr &&
+ (arg0 == new_matches.GetStringAtIndex(0))) {
StringList temp_matches;
CommandObject *cmd_obj = GetSubcommandObject(arg0, &temp_matches);
if (cmd_obj != nullptr) {
if (request.GetParsedLine().GetArgumentCount() == 1) {
request.SetWordComplete(true);
} else {
- matches.DeleteStringAtIndex(0);
request.GetParsedLine().Shift();
request.SetCursorCharPosition(0);
request.GetParsedLine().AppendArgument(llvm::StringRef());
@@ -212,14 +213,17 @@ int CommandObjectMultiword::HandleCompletion(CompletionRequest &request) {
}
}
}
- return matches.GetSize();
+ return new_matches.GetSize();
} else {
- CommandObject *sub_command_object = GetSubcommandObject(arg0, &matches);
+ StringList new_matches;
+ CommandObject *sub_command_object = GetSubcommandObject(arg0, &new_matches);
if (sub_command_object == nullptr) {
- return matches.GetSize();
+ request.AddCompletions(new_matches);
+ return request.GetNumberOfMatches();
} else {
// Remove the one match that we got from calling GetSubcommandObject.
- matches.DeleteStringAtIndex(0);
+ new_matches.DeleteStringAtIndex(0);
+ request.AddCompletions(new_matches);
request.GetParsedLine().Shift();
request.SetCursorIndex(request.GetCursorIndex() - 1);
return sub_command_object->HandleCompletion(request);
@@ -366,7 +370,6 @@ int CommandObjectProxy::HandleCompletion(CompletionRequest &request) {
CommandObject *proxy_command = GetProxyCommandObject();
if (proxy_command)
return proxy_command->HandleCompletion(request);
- request.GetMatches().Clear();
return 0;
}
@@ -375,7 +378,6 @@ int CommandObjectProxy::HandleArgumentCompletion(
CommandObject *proxy_command = GetProxyCommandObject();
if (proxy_command)
return proxy_command->HandleArgumentCompletion(request, opt_element_vector);
- request.GetMatches().Clear();
return 0;
}
diff --git a/source/Commands/CommandObjectPlatform.cpp b/source/Commands/CommandObjectPlatform.cpp
index f822a8b54cb0..22a9a169c7c8 100644
--- a/source/Commands/CommandObjectPlatform.cpp
+++ b/source/Commands/CommandObjectPlatform.cpp
@@ -181,7 +181,7 @@ public:
int HandleCompletion(CompletionRequest &request) override {
CommandCompletions::PlatformPluginNames(GetCommandInterpreter(), request,
nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
Options *GetOptions() override { return &m_option_group; }
@@ -1583,9 +1583,9 @@ public:
const uint32_t num_matches = process_infos.GetSize();
if (num_matches > 0) {
for (uint32_t i = 0; i < num_matches; ++i) {
- request.GetMatches().AppendString(
+ request.AddCompletion(llvm::StringRef(
process_infos.GetProcessNameAtIndex(i),
- process_infos.GetProcessNameLengthAtIndex(i));
+ process_infos.GetProcessNameLengthAtIndex(i)));
}
}
}
diff --git a/source/Commands/CommandObjectPlugin.cpp b/source/Commands/CommandObjectPlugin.cpp
index 1f379a2660ed..13ef6b227c5b 100644
--- a/source/Commands/CommandObjectPlugin.cpp
+++ b/source/Commands/CommandObjectPlugin.cpp
@@ -48,7 +48,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
diff --git a/source/Commands/CommandObjectProcess.cpp b/source/Commands/CommandObjectProcess.cpp
index 3ac27918df4c..eb5a19aa4d39 100644
--- a/source/Commands/CommandObjectProcess.cpp
+++ b/source/Commands/CommandObjectProcess.cpp
@@ -141,7 +141,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
Options *GetOptions() override { return &m_options; }
@@ -410,9 +410,9 @@ public:
const size_t num_matches = process_infos.GetSize();
if (num_matches > 0) {
for (size_t i = 0; i < num_matches; ++i) {
- request.GetMatches().AppendString(
+ request.AddCompletion(llvm::StringRef(
process_infos.GetProcessNameAtIndex(i),
- process_infos.GetProcessNameLengthAtIndex(i));
+ process_infos.GetProcessNameLengthAtIndex(i)));
}
}
}
diff --git a/source/Commands/CommandObjectSettings.cpp b/source/Commands/CommandObjectSettings.cpp
index f259f2fe200d..3db1e35cd702 100644
--- a/source/Commands/CommandObjectSettings.cpp
+++ b/source/Commands/CommandObjectSettings.cpp
@@ -172,7 +172,7 @@ insert-before or insert-after.");
}
}
}
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -272,7 +272,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -338,7 +338,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -427,7 +427,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -544,7 +544,7 @@ public:
GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -644,7 +644,7 @@ public:
GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -749,7 +749,7 @@ public:
GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -843,7 +843,7 @@ public:
GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -924,7 +924,7 @@ public:
GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
diff --git a/source/Commands/CommandObjectTarget.cpp b/source/Commands/CommandObjectTarget.cpp
index a9062c14b367..8be43cbf9bb0 100644
--- a/source/Commands/CommandObjectTarget.cpp
+++ b/source/Commands/CommandObjectTarget.cpp
@@ -201,7 +201,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -1810,7 +1810,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eModuleCompletion, request,
nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
};
@@ -1851,7 +1851,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eSourceFileCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
};
@@ -2393,7 +2393,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
protected:
@@ -3987,7 +3987,7 @@ public:
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion,
request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
Options *GetOptions() override { return &m_option_group; }
diff --git a/source/Core/FormatEntity.cpp b/source/Core/FormatEntity.cpp
index 2257b7e273e8..743c7c404994 100644
--- a/source/Core/FormatEntity.cpp
+++ b/source/Core/FormatEntity.cpp
@@ -2350,7 +2350,6 @@ size_t FormatEntity::AutoComplete(CompletionRequest &request) {
request.SetWordComplete(false);
str = str.drop_front(request.GetMatchStartPoint());
- request.GetMatches().Clear();
const size_t dollar_pos = str.rfind('$');
if (dollar_pos == llvm::StringRef::npos)
@@ -2360,7 +2359,7 @@ size_t FormatEntity::AutoComplete(CompletionRequest &request) {
if (dollar_pos == str.size() - 1) {
std::string match = str.str();
match.append("{");
- request.GetMatches().AppendString(match);
+ request.AddCompletion(match);
return 1;
}
@@ -2378,8 +2377,10 @@ size_t FormatEntity::AutoComplete(CompletionRequest &request) {
llvm::StringRef partial_variable(str.substr(dollar_pos + 2));
if (partial_variable.empty()) {
// Suggest all top level entites as we are just past "${"
- AddMatches(&g_root, str, llvm::StringRef(), request.GetMatches());
- return request.GetMatches().GetSize();
+ StringList new_matches;
+ AddMatches(&g_root, str, llvm::StringRef(), new_matches);
+ request.AddCompletions(new_matches);
+ return request.GetNumberOfMatches();
}
// We have a partially specified variable, find it
@@ -2395,19 +2396,23 @@ size_t FormatEntity::AutoComplete(CompletionRequest &request) {
// Exact match
if (n > 0) {
// "${thread.info" <TAB>
- request.GetMatches().AppendString(MakeMatch(str, "."));
+ request.AddCompletion(MakeMatch(str, "."));
} else {
// "${thread.id" <TAB>
- request.GetMatches().AppendString(MakeMatch(str, "}"));
+ request.AddCompletion(MakeMatch(str, "}"));
request.SetWordComplete(true);
}
} else if (remainder.equals(".")) {
// "${thread." <TAB>
- AddMatches(entry_def, str, llvm::StringRef(), request.GetMatches());
+ StringList new_matches;
+ AddMatches(entry_def, str, llvm::StringRef(), new_matches);
+ request.AddCompletions(new_matches);
} else {
// We have a partial match
// "${thre" <TAB>
- AddMatches(entry_def, str, remainder, request.GetMatches());
+ StringList new_matches;
+ AddMatches(entry_def, str, remainder, new_matches);
+ request.AddCompletions(new_matches);
}
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
diff --git a/source/Core/IOHandler.cpp b/source/Core/IOHandler.cpp
index 8474e4b8c564..e7ebeea1b88d 100644
--- a/source/Core/IOHandler.cpp
+++ b/source/Core/IOHandler.cpp
@@ -245,10 +245,10 @@ int IOHandlerDelegate::IOHandlerComplete(IOHandler &io_handler,
io_handler.GetDebugger().GetCommandInterpreter(),
CommandCompletions::eVariablePathCompletion, request, nullptr);
- size_t num_matches = request.GetMatches().GetSize();
+ size_t num_matches = request.GetNumberOfMatches();
if (num_matches > 0) {
std::string common_prefix;
- request.GetMatches().LongestCommonPrefix(common_prefix);
+ matches.LongestCommonPrefix(common_prefix);
const size_t partial_name_len = request.GetCursorArgumentPrefix().size();
// If we matched a unique single command, add a space... Only do this if
diff --git a/source/Interpreter/CommandInterpreter.cpp b/source/Interpreter/CommandInterpreter.cpp
index 4c8b65441366..64d2c3222fb6 100644
--- a/source/Interpreter/CommandInterpreter.cpp
+++ b/source/Interpreter/CommandInterpreter.cpp
@@ -478,7 +478,7 @@ void CommandInterpreter::LoadCommandDictionary() {
std::unique_ptr<CommandObjectRegexCommand> break_regex_cmd_ap(
new CommandObjectRegexCommand(
*this, "_regexp-break",
- "Set a breakpoint using one of several shorthand formats.\n",
+ "Set a breakpoint using one of several shorthand formats.",
"\n"
"_regexp-break <filename>:<linenum>\n"
" main.c:12 // Break at line 12 of "
@@ -527,7 +527,7 @@ void CommandInterpreter::LoadCommandDictionary() {
std::unique_ptr<CommandObjectRegexCommand> tbreak_regex_cmd_ap(
new CommandObjectRegexCommand(
*this, "_regexp-tbreak",
- "Set a one-shot breakpoint using one of several shorthand formats.\n",
+ "Set a one-shot breakpoint using one of several shorthand formats.",
"\n"
"_regexp-break <filename>:<linenum>\n"
" main.c:12 // Break at line 12 of "
@@ -1703,7 +1703,6 @@ bool CommandInterpreter::HandleCommand(const char *command_line,
}
int CommandInterpreter::HandleCompletionMatches(CompletionRequest &request) {
- auto &matches = request.GetMatches();
int num_command_matches = 0;
bool look_for_subcommand = false;
@@ -1713,30 +1712,34 @@ int CommandInterpreter::HandleCompletionMatches(CompletionRequest &request) {
if (request.GetCursorIndex() == -1) {
// We got nothing on the command line, so return the list of commands
bool include_aliases = true;
+ StringList new_matches;
num_command_matches =
- GetCommandNamesMatchingPartialString("", include_aliases, matches);
+ GetCommandNamesMatchingPartialString("", include_aliases, new_matches);
+ request.AddCompletions(new_matches);
} else if (request.GetCursorIndex() == 0) {
// The cursor is in the first argument, so just do a lookup in the
// dictionary.
+ StringList new_matches;
CommandObject *cmd_obj = GetCommandObject(
- request.GetParsedLine().GetArgumentAtIndex(0), &matches);
- num_command_matches = matches.GetSize();
+ request.GetParsedLine().GetArgumentAtIndex(0), &new_matches);
if (num_command_matches == 1 && cmd_obj && cmd_obj->IsMultiwordObject() &&
- matches.GetStringAtIndex(0) != nullptr &&
+ new_matches.GetStringAtIndex(0) != nullptr &&
strcmp(request.GetParsedLine().GetArgumentAtIndex(0),
- matches.GetStringAtIndex(0)) == 0) {
+ new_matches.GetStringAtIndex(0)) == 0) {
if (request.GetParsedLine().GetArgumentCount() == 1) {
request.SetWordComplete(true);
} else {
look_for_subcommand = true;
num_command_matches = 0;
- matches.DeleteStringAtIndex(0);
+ new_matches.DeleteStringAtIndex(0);
request.GetParsedLine().AppendArgument(llvm::StringRef());
request.SetCursorIndex(request.GetCursorIndex() + 1);
request.SetCursorCharPosition(0);
}
}
+ request.AddCompletions(new_matches);
+ num_command_matches = request.GetNumberOfMatches();
}
if (request.GetCursorIndex() > 0 || look_for_subcommand) {
@@ -1773,8 +1776,7 @@ int CommandInterpreter::HandleCompletion(
return 0;
else if (first_arg[0] == CommandHistory::g_repeat_char) {
if (auto hist_str = m_command_history.FindString(first_arg)) {
- request.GetMatches().Clear();
- request.GetMatches().InsertStringAtIndex(0, *hist_str);
+ matches.InsertStringAtIndex(0, *hist_str);
return -2;
} else
return 0;
@@ -1812,7 +1814,7 @@ int CommandInterpreter::HandleCompletion(
common_prefix.push_back(quote_char);
common_prefix.push_back(' ');
}
- request.GetMatches().InsertStringAtIndex(0, common_prefix.c_str());
+ matches.InsertStringAtIndex(0, common_prefix.c_str());
}
return num_command_matches;
}
diff --git a/source/Interpreter/CommandObject.cpp b/source/Interpreter/CommandObject.cpp
index 07be9139f219..324b0b511220 100644
--- a/source/Interpreter/CommandObject.cpp
+++ b/source/Interpreter/CommandObject.cpp
@@ -267,7 +267,6 @@ int CommandObject::HandleCompletion(CompletionRequest &request) {
if (WantsRawCommandString() && !WantsCompletion()) {
// FIXME: Abstract telling the completion to insert the completion
// character.
- request.GetMatches().Clear();
return -1;
} else {
// Can we do anything generic with the options?
@@ -282,7 +281,7 @@ int CommandObject::HandleCompletion(CompletionRequest &request) {
bool handled_by_options = cur_options->HandleOptionCompletion(
request, opt_element_vector, GetCommandInterpreter());
if (handled_by_options)
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
// If we got here, the last word is not an option or an option argument.
diff --git a/source/Interpreter/CommandObjectRegexCommand.cpp b/source/Interpreter/CommandObjectRegexCommand.cpp
index f975c0eea2ee..ec89ad8fb162 100644
--- a/source/Interpreter/CommandObjectRegexCommand.cpp
+++ b/source/Interpreter/CommandObjectRegexCommand.cpp
@@ -97,9 +97,8 @@ int CommandObjectRegexCommand::HandleCompletion(CompletionRequest &request) {
if (m_completion_type_mask) {
CommandCompletions::InvokeCommonCompletionCallbacks(
GetCommandInterpreter(), m_completion_type_mask, request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
} else {
- request.GetMatches().Clear();
request.SetWordComplete(false);
}
return 0;
diff --git a/source/Interpreter/OptionValue.cpp b/source/Interpreter/OptionValue.cpp
index 2d7c69eaa432..c3f363b05988 100644
--- a/source/Interpreter/OptionValue.cpp
+++ b/source/Interpreter/OptionValue.cpp
@@ -575,8 +575,7 @@ bool OptionValue::DumpQualifiedName(Stream &strm) const {
size_t OptionValue::AutoComplete(CommandInterpreter &interpreter,
CompletionRequest &request) {
request.SetWordComplete(false);
- request.GetMatches().Clear();
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
Status OptionValue::SetValueFromString(llvm::StringRef value,
diff --git a/source/Interpreter/OptionValueArch.cpp b/source/Interpreter/OptionValueArch.cpp
index 3d08780ae6f6..d4f1fcb8a70a 100644
--- a/source/Interpreter/OptionValueArch.cpp
+++ b/source/Interpreter/OptionValueArch.cpp
@@ -76,9 +76,8 @@ lldb::OptionValueSP OptionValueArch::DeepCopy() const {
size_t OptionValueArch::AutoComplete(CommandInterpreter &interpreter,
CompletionRequest &request) {
request.SetWordComplete(false);
- request.GetMatches().Clear();
CommandCompletions::InvokeCommonCompletionCallbacks(
interpreter, CommandCompletions::eArchitectureCompletion, request,
nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
diff --git a/source/Interpreter/OptionValueBoolean.cpp b/source/Interpreter/OptionValueBoolean.cpp
index 8a340792d78f..94c774d69111 100644
--- a/source/Interpreter/OptionValueBoolean.cpp
+++ b/source/Interpreter/OptionValueBoolean.cpp
@@ -79,7 +79,6 @@ lldb::OptionValueSP OptionValueBoolean::DeepCopy() const {
size_t OptionValueBoolean::AutoComplete(CommandInterpreter &interpreter,
CompletionRequest &request) {
request.SetWordComplete(false);
- request.GetMatches().Clear();
static const llvm::StringRef g_autocomplete_entries[] = {
"true", "false", "on", "off", "yes", "no", "1", "0"};
@@ -91,7 +90,7 @@ size_t OptionValueBoolean::AutoComplete(CommandInterpreter &interpreter,
for (auto entry : entries) {
if (entry.startswith_lower(request.GetCursorArgumentPrefix()))
- request.GetMatches().AppendString(entry);
+ request.AddCompletion(entry);
}
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
diff --git a/source/Interpreter/OptionValueEnumeration.cpp b/source/Interpreter/OptionValueEnumeration.cpp
index e78618ee3c6b..c7cbcab7fcc8 100644
--- a/source/Interpreter/OptionValueEnumeration.cpp
+++ b/source/Interpreter/OptionValueEnumeration.cpp
@@ -112,20 +112,18 @@ lldb::OptionValueSP OptionValueEnumeration::DeepCopy() const {
size_t OptionValueEnumeration::AutoComplete(CommandInterpreter &interpreter,
CompletionRequest &request) {
request.SetWordComplete(false);
- request.GetMatches().Clear();
const uint32_t num_enumerators = m_enumerations.GetSize();
if (!request.GetCursorArgumentPrefix().empty()) {
for (size_t i = 0; i < num_enumerators; ++i) {
llvm::StringRef name = m_enumerations.GetCStringAtIndex(i).GetStringRef();
if (name.startswith(request.GetCursorArgumentPrefix()))
- request.GetMatches().AppendString(name);
+ request.AddCompletion(name);
}
} else {
// only suggest "true" or "false" by default
for (size_t i = 0; i < num_enumerators; ++i)
- request.GetMatches().AppendString(
- m_enumerations.GetCStringAtIndex(i).GetStringRef());
+ request.AddCompletion(m_enumerations.GetCStringAtIndex(i).GetStringRef());
}
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
diff --git a/source/Interpreter/OptionValueFileSpec.cpp b/source/Interpreter/OptionValueFileSpec.cpp
index 18bfcd693949..2b93628679ce 100644
--- a/source/Interpreter/OptionValueFileSpec.cpp
+++ b/source/Interpreter/OptionValueFileSpec.cpp
@@ -102,10 +102,9 @@ lldb::OptionValueSP OptionValueFileSpec::DeepCopy() const {
size_t OptionValueFileSpec::AutoComplete(CommandInterpreter &interpreter,
CompletionRequest &request) {
request.SetWordComplete(false);
- request.GetMatches().Clear();
CommandCompletions::InvokeCommonCompletionCallbacks(
interpreter, m_completion_mask, request, nullptr);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
const lldb::DataBufferSP &OptionValueFileSpec::GetFileContents() {
diff --git a/source/Interpreter/OptionValueUUID.cpp b/source/Interpreter/OptionValueUUID.cpp
index 7fa155277cec..355e07bb2b5f 100644
--- a/source/Interpreter/OptionValueUUID.cpp
+++ b/source/Interpreter/OptionValueUUID.cpp
@@ -70,7 +70,6 @@ lldb::OptionValueSP OptionValueUUID::DeepCopy() const {
size_t OptionValueUUID::AutoComplete(CommandInterpreter &interpreter,
CompletionRequest &request) {
request.SetWordComplete(false);
- request.GetMatches().Clear();
ExecutionContext exe_ctx(interpreter.GetExecutionContext());
Target *target = exe_ctx.GetTargetPtr();
if (target) {
@@ -86,12 +85,12 @@ size_t OptionValueUUID::AutoComplete(CommandInterpreter &interpreter,
llvm::ArrayRef<uint8_t> module_bytes = module_uuid.GetBytes();
if (module_bytes.size() >= uuid_bytes.size() &&
module_bytes.take_front(uuid_bytes.size()).equals(uuid_bytes)) {
- request.GetMatches().AppendString(module_uuid.GetAsString());
+ request.AddCompletion(module_uuid.GetAsString());
}
}
}
}
}
}
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
diff --git a/source/Interpreter/Options.cpp b/source/Interpreter/Options.cpp
index f4758978e2a6..c9567e91f6b8 100644
--- a/source/Interpreter/Options.cpp
+++ b/source/Interpreter/Options.cpp
@@ -680,7 +680,7 @@ bool Options::HandleOptionCompletion(CompletionRequest &request,
if (!def.short_option)
continue;
opt_str[1] = def.short_option;
- request.GetMatches().AppendString(opt_str);
+ request.AddCompletion(opt_str);
}
return true;
@@ -692,7 +692,7 @@ bool Options::HandleOptionCompletion(CompletionRequest &request,
full_name.erase(full_name.begin() + 2, full_name.end());
full_name.append(def.long_option);
- request.GetMatches().AppendString(full_name.c_str());
+ request.AddCompletion(full_name.c_str());
}
return true;
} else if (opt_defs_index != OptionArgElement::eUnrecognizedArg) {
@@ -705,10 +705,10 @@ bool Options::HandleOptionCompletion(CompletionRequest &request,
strcmp(opt_defs[opt_defs_index].long_option, cur_opt_str) != 0) {
std::string full_name("--");
full_name.append(opt_defs[opt_defs_index].long_option);
- request.GetMatches().AppendString(full_name.c_str());
+ request.AddCompletion(full_name.c_str());
return true;
} else {
- request.GetMatches().AppendString(request.GetCursorArgument());
+ request.AddCompletion(request.GetCursorArgument());
return true;
}
} else {
@@ -728,17 +728,7 @@ bool Options::HandleOptionCompletion(CompletionRequest &request,
if (strstr(def.long_option, cur_opt_str + 2) == def.long_option) {
std::string full_name("--");
full_name.append(def.long_option);
- // The options definitions table has duplicates because of the
- // way the grouping information is stored, so only add once.
- bool duplicate = false;
- for (size_t k = 0; k < request.GetMatches().GetSize(); k++) {
- if (request.GetMatches().GetStringAtIndex(k) == full_name) {
- duplicate = true;
- break;
- }
- }
- if (!duplicate)
- request.GetMatches().AppendString(full_name.c_str());
+ request.AddCompletion(full_name.c_str());
}
}
}
@@ -790,7 +780,7 @@ bool Options::HandleOptionArgumentCompletion(
for (int i = 0; enum_values[i].string_value != nullptr; i++) {
if (strstr(enum_values[i].string_value, match_string.c_str()) ==
enum_values[i].string_value) {
- request.GetMatches().AppendString(enum_values[i].string_value);
+ request.AddCompletion(enum_values[i].string_value);
return_value = true;
}
}
diff --git a/source/Plugins/Platform/Android/PlatformAndroid.cpp b/source/Plugins/Platform/Android/PlatformAndroid.cpp
index 1cedcde97a92..4477fe371d34 100644
--- a/source/Plugins/Platform/Android/PlatformAndroid.cpp
+++ b/source/Plugins/Platform/Android/PlatformAndroid.cpp
@@ -83,9 +83,9 @@ PlatformSP PlatformAndroid::CreateInstance(bool force, const ArchSpec *arch) {
break;
#if defined(__ANDROID__)
- // Only accept "unknown" for the vendor if the host is android and it
+ // Only accept "unknown" for the vendor if the host is android and if
// "unknown" wasn't specified (it was just returned because it was NOT
- // specified_
+ // specified).
case llvm::Triple::VendorType::UnknownVendor:
create = !arch->TripleVendorWasSpecified();
break;
@@ -95,7 +95,7 @@ PlatformSP PlatformAndroid::CreateInstance(bool force, const ArchSpec *arch) {
}
if (create) {
- switch (triple.getOS()) {
+ switch (triple.getEnvironment()) {
case llvm::Triple::Android:
break;
@@ -103,8 +103,8 @@ PlatformSP PlatformAndroid::CreateInstance(bool force, const ArchSpec *arch) {
// Only accept "unknown" for the OS if the host is android and it
// "unknown" wasn't specified (it was just returned because it was NOT
// specified)
- case llvm::Triple::OSType::UnknownOS:
- create = !arch->TripleOSWasSpecified();
+ case llvm::Triple::EnvironmentType::UnknownEnvironment:
+ create = !arch->TripleEnvironmentWasSpecified();
break;
#endif
default:
diff --git a/source/Plugins/Platform/Windows/PlatformWindows.cpp b/source/Plugins/Platform/Windows/PlatformWindows.cpp
index ed2bcf0cbee4..45e906f88e00 100644
--- a/source/Plugins/Platform/Windows/PlatformWindows.cpp
+++ b/source/Plugins/Platform/Windows/PlatformWindows.cpp
@@ -78,7 +78,7 @@ PlatformSP PlatformWindows::CreateInstance(bool force,
create = true;
break;
- case llvm::Triple::UnknownArch:
+ case llvm::Triple::UnknownVendor:
create = !arch->TripleVendorWasSpecified();
break;
diff --git a/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h b/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
index 9c1fc82f58b7..d20f31505ed4 100644
--- a/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
+++ b/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
@@ -13,8 +13,6 @@
#include "DWARFUnit.h"
class DWARFCompileUnit : public DWARFUnit {
- friend class DWARFUnit;
-
public:
static DWARFUnitSP Extract(SymbolFileDWARF *dwarf2Data,
const lldb_private::DWARFDataExtractor &debug_info,
diff --git a/source/Plugins/SymbolFile/DWARF/DWARFUnit.h b/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
index c9e48c538bc1..3cc24d4202b8 100644
--- a/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
+++ b/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
@@ -33,8 +33,6 @@ enum DWARFProducer {
};
class DWARFUnit {
- friend class DWARFCompileUnit;
-
using die_iterator_range =
llvm::iterator_range<DWARFDebugInfoEntry::collection::iterator>;
diff --git a/source/Symbol/Variable.cpp b/source/Symbol/Variable.cpp
index 7eafef1e8955..af84872a97a0 100644
--- a/source/Symbol/Variable.cpp
+++ b/source/Symbol/Variable.cpp
@@ -644,11 +644,12 @@ static void PrivateAutoComplete(
break;
case '-':
- if (partial_path[1] == '>' && !prefix_path.str().empty()) {
+ if (partial_path.size() > 1 && partial_path[1] == '>' &&
+ !prefix_path.str().empty()) {
switch (type_class) {
case lldb::eTypeClassPointer: {
CompilerType pointee_type(compiler_type.GetPointeeType());
- if (partial_path[2]) {
+ if (partial_path.size() > 2 && partial_path[2]) {
// If there is more after the "->", then search deeper
PrivateAutoComplete(
frame, partial_path.substr(2), prefix_path + "->",
@@ -672,7 +673,7 @@ static void PrivateAutoComplete(
case lldb::eTypeClassUnion:
case lldb::eTypeClassStruct:
case lldb::eTypeClassClass:
- if (partial_path[1]) {
+ if (partial_path.size() > 1 && partial_path[1]) {
// If there is more after the ".", then search deeper
PrivateAutoComplete(frame, partial_path.substr(1),
prefix_path + ".", compiler_type, matches,
@@ -760,9 +761,11 @@ size_t Variable::AutoComplete(const ExecutionContext &exe_ctx,
CompilerType compiler_type;
bool word_complete = false;
+ StringList matches;
PrivateAutoComplete(exe_ctx.GetFramePtr(), request.GetCursorArgumentPrefix(),
- "", compiler_type, request.GetMatches(), word_complete);
+ "", compiler_type, matches, word_complete);
request.SetWordComplete(word_complete);
+ request.AddCompletions(matches);
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
diff --git a/source/Utility/ArchSpec.cpp b/source/Utility/ArchSpec.cpp
index 320f2d9d1144..1c50c313e0d1 100644
--- a/source/Utility/ArchSpec.cpp
+++ b/source/Utility/ArchSpec.cpp
@@ -255,12 +255,14 @@ size_t ArchSpec::AutoComplete(CompletionRequest &request) {
for (uint32_t i = 0; i < llvm::array_lengthof(g_core_definitions); ++i) {
if (NameMatches(g_core_definitions[i].name, NameMatch::StartsWith,
request.GetCursorArgumentPrefix()))
- request.GetMatches().AppendString(g_core_definitions[i].name);
+ request.AddCompletion(g_core_definitions[i].name);
}
} else {
- ListSupportedArchNames(request.GetMatches());
+ StringList matches;
+ ListSupportedArchNames(matches);
+ request.AddCompletions(matches);
}
- return request.GetMatches().GetSize();
+ return request.GetNumberOfMatches();
}
#define CPU_ANY (UINT32_MAX)
diff --git a/source/Utility/CompletionRequest.cpp b/source/Utility/CompletionRequest.cpp
index 1b7697a35860..c88747e2abe3 100644
--- a/source/Utility/CompletionRequest.cpp
+++ b/source/Utility/CompletionRequest.cpp
@@ -20,6 +20,7 @@ CompletionRequest::CompletionRequest(llvm::StringRef command_line,
: m_command(command_line), m_raw_cursor_pos(raw_cursor_pos),
m_match_start_point(match_start_point),
m_max_return_elements(max_return_elements), m_matches(&matches) {
+ matches.Clear();
// We parse the argument up to the cursor, so the last argument in
// parsed_line is the one containing the cursor, and the cursor is after the
diff --git a/source/Utility/Stream.cpp b/source/Utility/Stream.cpp
index 647a0c0beb5c..7df7f7008084 100644
--- a/source/Utility/Stream.cpp
+++ b/source/Utility/Stream.cpp
@@ -526,48 +526,3 @@ size_t Stream::PutCStringAsRawHex8(const char *s) {
m_flags.Set(eBinary);
return bytes_written;
}
-
-void Stream::UnitTest(Stream *s) {
- s->PutHex8(0x12);
-
- s->PutChar(' ');
- s->PutHex16(0x3456, endian::InlHostByteOrder());
- s->PutChar(' ');
- s->PutHex16(0x3456, eByteOrderBig);
- s->PutChar(' ');
- s->PutHex16(0x3456, eByteOrderLittle);
-
- s->PutChar(' ');
- s->PutHex32(0x789abcde, endian::InlHostByteOrder());
- s->PutChar(' ');
- s->PutHex32(0x789abcde, eByteOrderBig);
- s->PutChar(' ');
- s->PutHex32(0x789abcde, eByteOrderLittle);
-
- s->PutChar(' ');
- s->PutHex64(0x1122334455667788ull, endian::InlHostByteOrder());
- s->PutChar(' ');
- s->PutHex64(0x1122334455667788ull, eByteOrderBig);
- s->PutChar(' ');
- s->PutHex64(0x1122334455667788ull, eByteOrderLittle);
-
- const char *hola = "Hello World!!!";
- s->PutChar(' ');
- s->PutCString(hola);
-
- s->PutChar(' ');
- s->Write(hola, 5);
-
- s->PutChar(' ');
- s->PutCStringAsRawHex8(hola);
-
- s->PutChar(' ');
- s->PutCStringAsRawHex8("01234");
-
- s->PutChar(' ');
- s->Printf("pid=%i", 12733);
-
- s->PutChar(' ');
- s->PrintfAsRawHex8("pid=%i", 12733);
- s->PutChar('\n');
-}
diff --git a/unittests/Utility/CMakeLists.txt b/unittests/Utility/CMakeLists.txt
index 6d9d7a4d0069..4812d41ea753 100644
--- a/unittests/Utility/CMakeLists.txt
+++ b/unittests/Utility/CMakeLists.txt
@@ -14,6 +14,7 @@ add_lldb_unittest(UtilityTests
NameMatchesTest.cpp
StatusTest.cpp
StreamTeeTest.cpp
+ StreamTest.cpp
StringExtractorTest.cpp
StructuredDataTest.cpp
TildeExpressionResolverTest.cpp
diff --git a/unittests/Utility/CompletionRequestTest.cpp b/unittests/Utility/CompletionRequestTest.cpp
index 134bf517f854..58dfab0da508 100644
--- a/unittests/Utility/CompletionRequestTest.cpp
+++ b/unittests/Utility/CompletionRequestTest.cpp
@@ -34,7 +34,70 @@ TEST(CompletionRequest, Constructor) {
EXPECT_EQ(request.GetPartialParsedLine().GetArgumentCount(), 2u);
EXPECT_STREQ(request.GetPartialParsedLine().GetArgumentAtIndex(1), "b");
+}
+
+TEST(CompletionRequest, DuplicateFiltering) {
+ std::string command = "a bad c";
+ const unsigned cursor_pos = 3;
+ StringList matches;
+
+ CompletionRequest request(command, cursor_pos, 0, 0, matches);
+
+ EXPECT_EQ(0U, request.GetNumberOfMatches());
+
+ // Add foo twice
+ request.AddCompletion("foo");
+ EXPECT_EQ(1U, request.GetNumberOfMatches());
+ EXPECT_EQ(1U, matches.GetSize());
+ EXPECT_STREQ("foo", matches.GetStringAtIndex(0));
+
+ request.AddCompletion("foo");
+ EXPECT_EQ(1U, request.GetNumberOfMatches());
+ EXPECT_EQ(1U, matches.GetSize());
+ EXPECT_STREQ("foo", matches.GetStringAtIndex(0));
+
+ // Add bar twice
+ request.AddCompletion("bar");
+ EXPECT_EQ(2U, request.GetNumberOfMatches());
+ EXPECT_EQ(2U, matches.GetSize());
+ EXPECT_STREQ("foo", matches.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", matches.GetStringAtIndex(1));
+
+ request.AddCompletion("bar");
+ EXPECT_EQ(2U, request.GetNumberOfMatches());
+ EXPECT_EQ(2U, matches.GetSize());
+ EXPECT_STREQ("foo", matches.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", matches.GetStringAtIndex(1));
+
+ // Add foo again.
+ request.AddCompletion("foo");
+ EXPECT_EQ(2U, request.GetNumberOfMatches());
+ EXPECT_EQ(2U, matches.GetSize());
+ EXPECT_STREQ("foo", matches.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", matches.GetStringAtIndex(1));
+
+ // Add something with an existing prefix
+ request.AddCompletion("foobar");
+ EXPECT_EQ(3U, request.GetNumberOfMatches());
+ EXPECT_EQ(3U, matches.GetSize());
+ EXPECT_STREQ("foo", matches.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", matches.GetStringAtIndex(1));
+ EXPECT_STREQ("foobar", matches.GetStringAtIndex(2));
+}
+
+TEST(CompletionRequest, TestCompletionOwnership) {
+ std::string command = "a bad c";
+ const unsigned cursor_pos = 3;
+ StringList matches;
+
+ CompletionRequest request(command, cursor_pos, 0, 0, matches);
+
+ std::string Temporary = "bar";
+ request.AddCompletion(Temporary);
+ // Manipulate our completion. The request should have taken a copy, so that
+ // shouldn't influence anything.
+ Temporary[0] = 'f';
- // This is the generated matches should be equal to our passed string list.
- EXPECT_EQ(&request.GetMatches(), &matches);
+ EXPECT_EQ(1U, request.GetNumberOfMatches());
+ EXPECT_STREQ("bar", matches.GetStringAtIndex(0));
}
diff --git a/unittests/Utility/StreamTest.cpp b/unittests/Utility/StreamTest.cpp
new file mode 100644
index 000000000000..2e30357bb292
--- /dev/null
+++ b/unittests/Utility/StreamTest.cpp
@@ -0,0 +1,474 @@
+//===-- StreamTest.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/Utility/StreamString.h"
+#include "gtest/gtest.h"
+
+using namespace lldb_private;
+
+namespace {
+struct StreamTest : ::testing::Test {
+ // Note: Stream is an abstract class, so we use StreamString to test it. To
+ // make it easier to change this later, only methods in this class explicitly
+ // refer to the StringStream class.
+ StreamString s;
+ // We return here a std::string because that way gtest can print better
+ // assertion messages.
+ std::string TakeValue() {
+ std::string result = s.GetString().str();
+ s.Clear();
+ return result;
+ }
+};
+}
+
+namespace {
+// A StreamTest where we expect the Stream output to be binary.
+struct BinaryStreamTest : StreamTest {
+ void SetUp() override {
+ s.GetFlags().Set(Stream::eBinary);
+ }
+};
+}
+
+TEST_F(StreamTest, ChangingByteOrder) {
+ s.SetByteOrder(lldb::eByteOrderPDP);
+ EXPECT_EQ(lldb::eByteOrderPDP, s.GetByteOrder());
+}
+
+TEST_F(StreamTest, PutChar) {
+ s.PutChar('a');
+ EXPECT_EQ("a", TakeValue());
+
+ s.PutChar('1');
+ EXPECT_EQ("1", TakeValue());
+}
+
+TEST_F(StreamTest, PutCharWhitespace) {
+ s.PutChar(' ');
+ EXPECT_EQ(" ", TakeValue());
+
+ s.PutChar('\n');
+ EXPECT_EQ("\n", TakeValue());
+
+ s.PutChar('\r');
+ EXPECT_EQ("\r", TakeValue());
+
+ s.PutChar('\t');
+ EXPECT_EQ("\t", TakeValue());
+}
+
+TEST_F(StreamTest, PutCString) {
+ s.PutCString("");
+ EXPECT_EQ("", TakeValue());
+
+ s.PutCString("foobar");
+ EXPECT_EQ("foobar", TakeValue());
+
+ s.PutCString(" ");
+ EXPECT_EQ(" ", TakeValue());
+}
+
+TEST_F(StreamTest, PutCStringWithStringRef) {
+ s.PutCString(llvm::StringRef(""));
+ EXPECT_EQ("", TakeValue());
+
+ s.PutCString(llvm::StringRef("foobar"));
+ EXPECT_EQ("foobar", TakeValue());
+
+ s.PutCString(llvm::StringRef(" "));
+ EXPECT_EQ(" ", TakeValue());
+}
+
+TEST_F(StreamTest, QuotedCString) {
+ s.QuotedCString("foo");
+ EXPECT_EQ(R"("foo")", TakeValue());
+
+ s.QuotedCString("ba r");
+ EXPECT_EQ(R"("ba r")", TakeValue());
+
+ s.QuotedCString(" ");
+ EXPECT_EQ(R"(" ")", TakeValue());
+}
+
+TEST_F(StreamTest, PutCharNull) {
+ s.PutChar('\0');
+ EXPECT_EQ(std::string("\0", 1), TakeValue());
+
+ s.PutChar('a');
+ EXPECT_EQ(std::string("a", 1), TakeValue());
+}
+
+TEST_F(StreamTest, PutCStringAsRawHex8) {
+ s.PutCStringAsRawHex8("foobar");
+ EXPECT_EQ("666f6f626172", TakeValue());
+
+ s.PutCStringAsRawHex8(" ");
+ EXPECT_EQ("20", TakeValue());
+}
+
+TEST_F(StreamTest, PutHex8) {
+ s.PutHex8((uint8_t)55);
+ EXPECT_EQ("37", TakeValue());
+ s.PutHex8(std::numeric_limits<uint8_t>::max());
+ EXPECT_EQ("ff", TakeValue());
+ s.PutHex8((uint8_t)0);
+ EXPECT_EQ("00", TakeValue());
+}
+
+TEST_F(StreamTest, PutNHex8) {
+ s.PutNHex8(0, (uint8_t)55);
+ EXPECT_EQ("", TakeValue());
+ s.PutNHex8(1, (uint8_t)55);
+ EXPECT_EQ("37", TakeValue());
+ s.PutNHex8(2, (uint8_t)55);
+ EXPECT_EQ("3737", TakeValue());
+ s.PutNHex8(1, (uint8_t)56);
+ EXPECT_EQ("38", TakeValue());
+}
+
+TEST_F(StreamTest, PutHex16ByteOrderLittle) {
+ s.PutHex16(0x1234U, lldb::eByteOrderLittle);
+ EXPECT_EQ("3412", TakeValue());
+ s.PutHex16(std::numeric_limits<uint16_t>::max(), lldb::eByteOrderLittle);
+ EXPECT_EQ("ffff", TakeValue());
+ s.PutHex16(0U, lldb::eByteOrderLittle);
+ EXPECT_EQ("0000", TakeValue());
+}
+
+TEST_F(StreamTest, PutHex16ByteOrderBig) {
+ s.PutHex16(0x1234U, lldb::eByteOrderBig);
+ EXPECT_EQ("1234", TakeValue());
+ s.PutHex16(std::numeric_limits<uint16_t>::max(), lldb::eByteOrderBig);
+ EXPECT_EQ("ffff", TakeValue());
+ s.PutHex16(0U, lldb::eByteOrderBig);
+ EXPECT_EQ("0000", TakeValue());
+}
+
+TEST_F(StreamTest, PutHex32ByteOrderLittle) {
+ s.PutHex32(0x12345678U, lldb::eByteOrderLittle);
+ EXPECT_EQ("78563412", TakeValue());
+ s.PutHex32(std::numeric_limits<uint32_t>::max(), lldb::eByteOrderLittle);
+ EXPECT_EQ("ffffffff", TakeValue());
+ s.PutHex32(0U, lldb::eByteOrderLittle);
+ EXPECT_EQ("00000000", TakeValue());
+}
+
+TEST_F(StreamTest, PutHex32ByteOrderBig) {
+ s.PutHex32(0x12345678U, lldb::eByteOrderBig);
+ EXPECT_EQ("12345678", TakeValue());
+ s.PutHex32(std::numeric_limits<uint32_t>::max(), lldb::eByteOrderBig);
+ EXPECT_EQ("ffffffff", TakeValue());
+ s.PutHex32(0U, lldb::eByteOrderBig);
+ EXPECT_EQ("00000000", TakeValue());
+}
+
+TEST_F(StreamTest, PutHex64ByteOrderLittle) {
+ s.PutHex64(0x1234567890ABCDEFU, lldb::eByteOrderLittle);
+ EXPECT_EQ("efcdab9078563412", TakeValue());
+ s.PutHex64(std::numeric_limits<uint64_t>::max(), lldb::eByteOrderLittle);
+ EXPECT_EQ("ffffffffffffffff", TakeValue());
+ s.PutHex64(0U, lldb::eByteOrderLittle);
+ EXPECT_EQ("0000000000000000", TakeValue());
+}
+
+TEST_F(StreamTest, PutHex64ByteOrderBig) {
+ s.PutHex64(0x1234567890ABCDEFU, lldb::eByteOrderBig);
+ EXPECT_EQ("1234567890abcdef", TakeValue());
+ s.PutHex64(std::numeric_limits<uint64_t>::max(), lldb::eByteOrderBig);
+ EXPECT_EQ("ffffffffffffffff", TakeValue());
+ s.PutHex64(0U, lldb::eByteOrderBig);
+ EXPECT_EQ("0000000000000000", TakeValue());
+}
+
+//------------------------------------------------------------------------------
+// Shift operator tests.
+//------------------------------------------------------------------------------
+
+TEST_F(StreamTest, ShiftOperatorChars) {
+ s << 'a' << 'b';
+ EXPECT_EQ("ab", TakeValue());
+}
+
+TEST_F(StreamTest, ShiftOperatorStrings) {
+ s << "cstring\n";
+ s << llvm::StringRef("llvm::StringRef\n");
+ EXPECT_EQ("cstring\nllvm::StringRef\n", TakeValue());
+}
+
+TEST_F(StreamTest, ShiftOperatorInts) {
+ s << std::numeric_limits<int8_t>::max() << " ";
+ s << std::numeric_limits<int16_t>::max() << " ";
+ s << std::numeric_limits<int32_t>::max() << " ";
+ s << std::numeric_limits<int64_t>::max();
+ EXPECT_EQ("127 32767 2147483647 9223372036854775807", TakeValue());
+}
+
+TEST_F(StreamTest, ShiftOperatorUInts) {
+ s << std::numeric_limits<uint8_t>::max() << " ";
+ s << std::numeric_limits<uint16_t>::max() << " ";
+ s << std::numeric_limits<uint32_t>::max() << " ";
+ s << std::numeric_limits<uint64_t>::max();
+ EXPECT_EQ("ff ffff ffffffff ffffffffffffffff", TakeValue());
+}
+
+TEST_F(StreamTest, ShiftOperatorPtr) {
+ // This test is a bit tricky because pretty much everything related to
+ // pointer printing seems to lead to UB or IB. So let's make the most basic
+ // test that just checks that we print *something*. This way we at least know
+ // that pointer printing doesn't do really bad things (e.g. crashing, reading
+ // OOB/uninitialized memory which the sanitizers would spot).
+
+ // Shift our own pointer to the output.
+ int i = 3;
+ int *ptr = &i;
+ s << ptr;
+
+ EXPECT_TRUE(!TakeValue().empty());
+}
+
+TEST_F(StreamTest, PutPtr) {
+ // See the ShiftOperatorPtr test for the rationale.
+ int i = 3;
+ int *ptr = &i;
+ s.PutPointer(ptr);
+
+ EXPECT_TRUE(!TakeValue().empty());
+}
+
+// Alias to make it more clear that 'invalid' means for the Stream interface
+// that it should use the host byte order.
+const static auto hostByteOrder = lldb::eByteOrderInvalid;
+
+//------------------------------------------------------------------------------
+// PutRawBytes/PutBytesAsRawHex tests.
+//------------------------------------------------------------------------------
+
+TEST_F(StreamTest, PutBytesAsRawHex8ToBigEndian) {
+ uint32_t value = 0x12345678;
+ s.PutBytesAsRawHex8(static_cast<void*>(&value), sizeof(value),
+ hostByteOrder, lldb::eByteOrderBig);
+ EXPECT_EQ("78563412", TakeValue());
+}
+
+TEST_F(StreamTest, PutRawBytesToBigEndian) {
+ uint32_t value = 0x12345678;
+ s.PutRawBytes(static_cast<void*>(&value), sizeof(value),
+ hostByteOrder, lldb::eByteOrderBig);
+ EXPECT_EQ("\x78\x56\x34\x12", TakeValue());
+}
+
+TEST_F(StreamTest, PutBytesAsRawHex8ToLittleEndian) {
+ uint32_t value = 0x12345678;
+ s.PutBytesAsRawHex8(static_cast<void*>(&value), sizeof(value),
+ hostByteOrder, lldb::eByteOrderLittle);
+ EXPECT_EQ("12345678", TakeValue());
+}
+
+TEST_F(StreamTest, PutRawBytesToLittleEndian) {
+ uint32_t value = 0x12345678;
+ s.PutRawBytes(static_cast<void*>(&value), sizeof(value),
+ hostByteOrder, lldb::eByteOrderLittle);
+ EXPECT_EQ("\x12\x34\x56\x78", TakeValue());
+}
+
+TEST_F(StreamTest, PutBytesAsRawHex8ToMixedEndian) {
+ uint32_t value = 0x12345678;
+ s.PutBytesAsRawHex8(static_cast<void*>(&value), sizeof(value),
+ hostByteOrder, lldb::eByteOrderPDP);
+
+ // FIXME: PDP byte order is not actually implemented but Stream just silently
+ // prints the value in some random byte order...
+#if 0
+ EXPECT_EQ("34127856", TakeValue());
+#endif
+}
+
+TEST_F(StreamTest, PutRawBytesToMixedEndian) {
+ uint32_t value = 0x12345678;
+ s.PutRawBytes(static_cast<void*>(&value), sizeof(value),
+ lldb::eByteOrderInvalid, lldb::eByteOrderPDP);
+
+ // FIXME: PDP byte order is not actually implemented but Stream just silently
+ // prints the value in some random byte order...
+#if 0
+ EXPECT_EQ("\x34\x12\x78\x56", TakeValue());
+#endif
+}
+
+//------------------------------------------------------------------------------
+// ULEB128 support for binary streams.
+//------------------------------------------------------------------------------
+
+TEST_F(BinaryStreamTest, PutULEB128OneByte) {
+ auto bytes = s.PutULEB128(0x74ULL);
+ EXPECT_EQ("\x74", TakeValue());
+ EXPECT_EQ(1U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128TwoBytes) {
+ auto bytes = s.PutULEB128(0x1985ULL);
+ EXPECT_EQ("\x85\x33", TakeValue());
+ EXPECT_EQ(2U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128ThreeBytes) {
+ auto bytes = s.PutULEB128(0x5023ULL);
+ EXPECT_EQ("\xA3\xA0\x1", TakeValue());
+ EXPECT_EQ(3U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128FourBytes) {
+ auto bytes = s.PutULEB128(0xA48032ULL);
+ EXPECT_EQ("\xB2\x80\x92\x5", TakeValue());
+ EXPECT_EQ(4U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128FiveBytes) {
+ auto bytes = s.PutULEB128(0x12345678ULL);
+ EXPECT_EQ("\xF8\xAC\xD1\x91\x1", TakeValue());
+ EXPECT_EQ(5U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128SixBytes) {
+ auto bytes = s.PutULEB128(0xABFE3FAFDFULL);
+ EXPECT_EQ("\xDF\xDF\xFE\xF1\xBF\x15", TakeValue());
+ EXPECT_EQ(6U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128SevenBytes) {
+ auto bytes = s.PutULEB128(0xDABFE3FAFDFULL);
+ EXPECT_EQ("\xDF\xDF\xFE\xF1\xBF\xB5\x3", TakeValue());
+ EXPECT_EQ(7U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128EightBytes) {
+ auto bytes = s.PutULEB128(0x7CDABFE3FAFDFULL);
+ EXPECT_EQ("\xDF\xDF\xFE\xF1\xBF\xB5\xF3\x3", TakeValue());
+ EXPECT_EQ(8U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128NineBytes) {
+ auto bytes = s.PutULEB128(0x327CDABFE3FAFDFULL);
+ EXPECT_EQ("\xDF\xDF\xFE\xF1\xBF\xB5\xF3\x93\x3", TakeValue());
+ EXPECT_EQ(9U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128MaxValue) {
+ auto bytes = s.PutULEB128(std::numeric_limits<uint64_t>::max());
+ EXPECT_EQ("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x1", TakeValue());
+ EXPECT_EQ(10U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128Zero) {
+ auto bytes = s.PutULEB128(0x0U);
+ EXPECT_EQ(std::string("\0", 1), TakeValue());
+ EXPECT_EQ(1U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutULEB128One) {
+ auto bytes = s.PutULEB128(0x1U);
+ EXPECT_EQ("\x1", TakeValue());
+ EXPECT_EQ(1U, bytes);
+}
+
+//------------------------------------------------------------------------------
+// SLEB128 support for binary streams.
+//------------------------------------------------------------------------------
+
+TEST_F(BinaryStreamTest, PutSLEB128OneByte) {
+ auto bytes = s.PutSLEB128(0x74LL);
+ EXPECT_EQ(std::string("\xF4\0", 2), TakeValue());
+ EXPECT_EQ(2U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128TwoBytes) {
+ auto bytes = s.PutSLEB128(0x1985LL);
+ EXPECT_EQ("\x85\x33", TakeValue());
+ EXPECT_EQ(2U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128ThreeBytes) {
+ auto bytes = s.PutSLEB128(0x5023LL);
+ EXPECT_EQ("\xA3\xA0\x1", TakeValue());
+ EXPECT_EQ(3U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128FourBytes) {
+ auto bytes = s.PutSLEB128(0xA48032LL);
+ EXPECT_EQ("\xB2\x80\x92\x5", TakeValue());
+ EXPECT_EQ(4U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128FiveBytes) {
+ auto bytes = s.PutSLEB128(0x12345678LL);
+ EXPECT_EQ("\xF8\xAC\xD1\x91\x1", TakeValue());
+ EXPECT_EQ(5U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128SixBytes) {
+ auto bytes = s.PutSLEB128(0xABFE3FAFDFLL);
+ EXPECT_EQ("\xDF\xDF\xFE\xF1\xBF\x15", TakeValue());
+ EXPECT_EQ(6U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128SevenBytes) {
+ auto bytes = s.PutSLEB128(0xDABFE3FAFDFLL);
+ EXPECT_EQ("\xDF\xDF\xFE\xF1\xBF\xB5\x3", TakeValue());
+ EXPECT_EQ(7U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128EightBytes) {
+ auto bytes = s.PutSLEB128(0x7CDABFE3FAFDFLL);
+ EXPECT_EQ("\xDF\xDF\xFE\xF1\xBF\xB5\xF3\x3", TakeValue());
+ EXPECT_EQ(8U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128NineBytes) {
+ auto bytes = s.PutSLEB128(0x327CDABFE3FAFDFLL);
+ EXPECT_EQ("\xDF\xDF\xFE\xF1\xBF\xB5\xF3\x93\x3", TakeValue());
+ EXPECT_EQ(9U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128MaxValue) {
+ auto bytes = s.PutSLEB128(std::numeric_limits<int64_t>::max());
+ EXPECT_EQ(std::string("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0", 10), TakeValue());
+ EXPECT_EQ(10U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128Zero) {
+ auto bytes = s.PutSLEB128(0x0);
+ EXPECT_EQ(std::string("\0", 1), TakeValue());
+ EXPECT_EQ(1U, bytes);
+}
+
+TEST_F(BinaryStreamTest, PutSLEB128One) {
+ auto bytes = s.PutSLEB128(0x1);
+ EXPECT_EQ(std::string("\x1", 1), TakeValue());
+ EXPECT_EQ(1U, bytes);
+}
+
+//------------------------------------------------------------------------------
+// SLEB128/ULEB128 support for non-binary streams.
+//------------------------------------------------------------------------------
+
+// The logic for this is very simple, so it should be enough to test some basic
+// use cases.
+
+TEST_F(StreamTest, PutULEB128) {
+ auto bytes = s.PutULEB128(0x74ULL);
+ EXPECT_EQ("0x74", TakeValue());
+ EXPECT_EQ(4U, bytes);
+}
+
+TEST_F(StreamTest, PutSLEB128) {
+ auto bytes = s.PutSLEB128(0x1985LL);
+ EXPECT_EQ("0x6533", TakeValue());
+ EXPECT_EQ(6U, bytes);
+}