[Lldb-commits] [lldb] 56f9cfe - [lldb] Remove uses of six module (NFC)

Dave Lee via lldb-commits lldb-commits at lists.llvm.org
Thu Aug 11 19:06:25 PDT 2022


Author: Dave Lee
Date: 2022-08-11T19:06:15-07:00
New Revision: 56f9cfe30c4488aade888905bb6280ecb952a613

URL: https://github.com/llvm/llvm-project/commit/56f9cfe30c4488aade888905bb6280ecb952a613
DIFF: https://github.com/llvm/llvm-project/commit/56f9cfe30c4488aade888905bb6280ecb952a613.diff

LOG: [lldb] Remove uses of six module (NFC)

With lldb (& llvm) requiring Python 3.6+, use of the `six` module can be removed.

Differential Revision: https://reviews.llvm.org/D131304

Added: 
    

Modified: 
    lldb/bindings/interface/SBData.i
    lldb/bindings/python/python.swig
    lldb/examples/python/scripted_process/scripted_process.py
    lldb/examples/summaries/synth.py
    lldb/packages/Python/lldbsuite/support/encoded_file.py
    lldb/packages/Python/lldbsuite/support/seven.py
    lldb/packages/Python/lldbsuite/test/decorators.py
    lldb/packages/Python/lldbsuite/test/dotest.py
    lldb/packages/Python/lldbsuite/test/lldbpexpect.py
    lldb/packages/Python/lldbsuite/test/lldbplatform.py
    lldb/packages/Python/lldbsuite/test/lldbplatformutil.py
    lldb/packages/Python/lldbsuite/test/lldbtest.py
    lldb/packages/Python/lldbsuite/test/lldbutil.py
    lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py
    lldb/packages/Python/lldbsuite/test/tools/lldb-server/lldbgdbserverutils.py
    lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
    lldb/test/API/api/listeners/TestListener.py
    lldb/test/API/commands/command/script/import/thepackage/TPunitA.py
    lldb/test/API/commands/command/script/import/thepackage/TPunitB.py
    lldb/test/API/commands/process/launch/TestProcessLaunch.py
    lldb/test/API/functionalities/gdb_remote_client/TestGdbClientModuleLoad.py
    lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
    lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py
    lldb/test/API/functionalities/postmortem/minidump/TestMiniDump.py
    lldb/test/API/functionalities/postmortem/wow64_minidump/TestWow64MiniDump.py
    lldb/test/API/python_api/frame/TestFrames.py
    lldb/test/API/terminal/TestSTTYBeforeAndAfter.py
    lldb/test/API/test_utils/base/TestBaseTest.py
    lldb/third_party/Python/module/progress/progress.py
    lldb/third_party/Python/module/unittest2/unittest2/case.py
    lldb/third_party/Python/module/unittest2/unittest2/main.py
    lldb/third_party/Python/module/unittest2/unittest2/result.py
    lldb/third_party/Python/module/unittest2/unittest2/suite.py
    lldb/third_party/Python/module/unittest2/unittest2/test/test_case.py
    lldb/third_party/Python/module/unittest2/unittest2/test/test_functiontestcase.py

Removed: 
    


################################################################################
diff  --git a/lldb/bindings/interface/SBData.i b/lldb/bindings/interface/SBData.i
index 1f2f9fbf05e2d..8e1d2fcf9d3ec 100644
--- a/lldb/bindings/interface/SBData.i
+++ b/lldb/bindings/interface/SBData.i
@@ -157,7 +157,7 @@ public:
                     for x in range(*key.indices(self.__len__())):
                         list.append(self.__getitem__(x))
                     return list
-                if not (isinstance(key,six.integer_types)):
+                if not (isinstance(key, int)):
                     raise TypeError('must be int')
                 key = key * self.item_size # SBData uses byte-based indexes, but we want to use itemsize-based indexes here
                 error = SBError()

diff  --git a/lldb/bindings/python/python.swig b/lldb/bindings/python/python.swig
index cb80e1be61a82..b1f6c4b9301da 100644
--- a/lldb/bindings/python/python.swig
+++ b/lldb/bindings/python/python.swig
@@ -84,8 +84,6 @@ void name ## _set(type *t, int index, type val) {
 import uuid
 import re
 import os
-
-import six
 %}
 
 // Include the version of swig that was used to generate this interface.

diff  --git a/lldb/examples/python/scripted_process/scripted_process.py b/lldb/examples/python/scripted_process/scripted_process.py
index b9388ae25e466..48966f8385cb0 100644
--- a/lldb/examples/python/scripted_process/scripted_process.py
+++ b/lldb/examples/python/scripted_process/scripted_process.py
@@ -1,10 +1,8 @@
 from abc import ABCMeta, abstractmethod
-import six
 
 import lldb
 
- at six.add_metaclass(ABCMeta)
-class ScriptedProcess:
+class ScriptedProcess(metaclass=ABCMeta):
 
     """
     The base class for a scripted process.
@@ -193,8 +191,7 @@ def get_scripted_thread_plugin(self):
         """
         return None
 
- at six.add_metaclass(ABCMeta)
-class ScriptedThread:
+class ScriptedThread(metaclass=ABCMeta):
 
     """
     The base class for a scripted thread.

diff  --git a/lldb/examples/summaries/synth.py b/lldb/examples/summaries/synth.py
index 02dcc4f701467..97e84ea9b09d3 100644
--- a/lldb/examples/summaries/synth.py
+++ b/lldb/examples/summaries/synth.py
@@ -33,8 +33,7 @@ def has_children(self):
     def gen_child(self, name, value):
         data = None
         type = None
-        import six
-        if isinstance(value, six.integer_types):
+        if isinstance(value, int):
             data = lldb.SBData.CreateDataFromUInt64Array(
                 self.bo, self.ps, [value])
             type = self.value.target.GetBasicType(lldb.eBasicTypeLong)

diff  --git a/lldb/packages/Python/lldbsuite/support/encoded_file.py b/lldb/packages/Python/lldbsuite/support/encoded_file.py
index c233e046ba757..9de63fdc3a8ea 100644
--- a/lldb/packages/Python/lldbsuite/support/encoded_file.py
+++ b/lldb/packages/Python/lldbsuite/support/encoded_file.py
@@ -10,26 +10,12 @@
 # Python modules:
 import io
 
-# Third party modules
-import six
-
-
-def _encoded_read(old_read, encoding):
-    def impl(size):
-        result = old_read(size)
-        # If this is Python 2 then we need to convert the resulting `unicode` back
-        # into a `str` before returning
-        if six.PY2:
-            result = result.encode(encoding)
-        return result
-    return impl
-
 
 def _encoded_write(old_write, encoding):
     def impl(s):
-        # If we were asked to write a `str` (in Py2) or a `bytes` (in Py3) decode it
-        # as unicode before attempting to write.
-        if isinstance(s, six.binary_type):
+        # If we were asked to write a `bytes` decode it as unicode before
+        # attempting to write.
+        if isinstance(s, bytes):
             s = s.decode(encoding, "replace")
         # Filter unreadable characters, Python 3 is stricter than python 2 about them.
         import re
@@ -38,9 +24,8 @@ def impl(s):
     return impl
 
 '''
-Create a Text I/O file object that can be written to with either unicode strings or byte strings
-under Python 2 and Python 3, and automatically encodes and decodes as necessary to return the
-native string type for the current Python version
+Create a Text I/O file object that can be written to with either unicode strings
+or byte strings.
 '''
 
 
@@ -60,8 +45,6 @@ def open(
         errors=errors,
         newline=newline,
         closefd=closefd)
-    new_read = _encoded_read(getattr(wrapped_file, 'read'), encoding)
     new_write = _encoded_write(getattr(wrapped_file, 'write'), encoding)
-    setattr(wrapped_file, 'read', new_read)
     setattr(wrapped_file, 'write', new_write)
     return wrapped_file

diff  --git a/lldb/packages/Python/lldbsuite/support/seven.py b/lldb/packages/Python/lldbsuite/support/seven.py
index 969b61d005c58..e9ebf172894c0 100644
--- a/lldb/packages/Python/lldbsuite/support/seven.py
+++ b/lldb/packages/Python/lldbsuite/support/seven.py
@@ -1,47 +1,31 @@
 import binascii
-import six
 import shlex
-
-if six.PY2:
-    import commands
-    get_command_output = commands.getoutput
-    get_command_status_output = commands.getstatusoutput
-
-    cmp_ = cmp
-else:
-    def get_command_status_output(command):
-        try:
-            import subprocess
-            return (
-                0,
-                subprocess.check_output(
-                    command,
-                    shell=True,
-                    universal_newlines=True).rstrip())
-        except subprocess.CalledProcessError as e:
-            return (e.returncode, e.output)
-
-    def get_command_output(command):
-        return get_command_status_output(command)[1]
-
-    cmp_ = lambda x, y: (x > y) - (x < y)
-
-def bitcast_to_string(b):
+import subprocess
+
+def get_command_output(command):
+    try:
+        return subprocess.check_output(
+            command,
+            shell=True,
+            universal_newlines=True).rstrip()
+    except subprocess.CalledProcessError as e:
+        return e.output
+
+def bitcast_to_string(b: bytes) -> str:
     """
-    Take a string(PY2) or a bytes(PY3) object and return a string. The returned
-    string contains the exact same bytes as the input object (latin1 <-> unicode
-    transformation is an identity operation for the first 256 code points).
+    Take a bytes object and return a string. The returned string contains the
+    exact same bytes as the input object. (latin1 <-> unicode transformation is
+    an identity operation for the first 256 code points).
     """
-    return b if six.PY2 else b.decode("latin1")
+    return b.decode("latin1")
 
-def bitcast_to_bytes(s):
+def bitcast_to_bytes(s: str) -> bytes:
     """
-    Take a string and return a string(PY2) or a bytes(PY3) object. The returned
-    object contains the exact same bytes as the input string. (latin1 <->
-    unicode transformation is an identity operation for the first 256 code
-    points).
+    Take a string and return a bytes object. The returned object contains the
+    exact same bytes as the input string. (latin1 <-> unicode transformation isi
+    an identity operation for the first 256 code points).
     """
-    return s if six.PY2 else s.encode("latin1")
+    return s.encode("latin1")
 
 def unhexlify(hexstr):
     """Hex-decode a string. The result is always a string."""

diff  --git a/lldb/packages/Python/lldbsuite/test/decorators.py b/lldb/packages/Python/lldbsuite/test/decorators.py
index 477f4a7209820..3e3db099cd4a6 100644
--- a/lldb/packages/Python/lldbsuite/test/decorators.py
+++ b/lldb/packages/Python/lldbsuite/test/decorators.py
@@ -13,7 +13,6 @@
 import subprocess
 
 # Third-party modules
-import six
 import unittest2
 
 # LLDB modules
@@ -71,7 +70,6 @@ def fn_neq(x, y): return x != y
         LooseVersion(expected_str))
 
 
-_re_pattern_type = type(re.compile(''))
 def _match_decorator_property(expected, actual):
     if expected is None:
         return True
@@ -82,7 +80,7 @@ def _match_decorator_property(expected, actual):
     if isinstance(expected, no_match):
         return not _match_decorator_property(expected.item, actual)
 
-    if isinstance(expected, (_re_pattern_type,) + six.string_types):
+    if isinstance(expected, (re.Pattern, str)):
         return re.search(expected, actual) is not None
 
     if hasattr(expected, "__iter__"):
@@ -131,7 +129,7 @@ def wrapper(*args, **kwargs):
     # the first way, the first argument will be the actual function because decorators are
     # weird like that.  So this is basically a check that says "which syntax was the original
     # function decorated with?"
-    if six.callable(bugnumber):
+    if callable(bugnumber):
         return expectedFailure_impl(bugnumber)
     else:
         return expectedFailure_impl
@@ -162,7 +160,7 @@ def wrapper(*args, **kwargs):
     # the first way, the first argument will be the actual function because decorators are
     # weird like that.  So this is basically a check that says "how was the
     # decorator used"
-    if six.callable(bugnumber):
+    if callable(bugnumber):
         return skipTestIfFn_impl(bugnumber)
     else:
         return skipTestIfFn_impl
@@ -249,7 +247,7 @@ def fn(self):
                     mode_str, reason_str)
             else:
                 reason_str = "{} unconditionally".format(mode_str)
-            if bugnumber is not None and not six.callable(bugnumber):
+            if bugnumber is not None and not callable(bugnumber):
                 reason_str = reason_str + " [" + str(bugnumber) + "]"
         return reason_str
 
@@ -463,7 +461,7 @@ def wrapper(*args, **kwargs):
     # the first way, the first argument will be the actual function because decorators are
     # weird like that.  So this is basically a check that says "which syntax was the original
     # function decorated with?"
-    if six.callable(bugnumber):
+    if callable(bugnumber):
         return expectedFailure_impl(bugnumber)
     else:
         return expectedFailure_impl

diff  --git a/lldb/packages/Python/lldbsuite/test/dotest.py b/lldb/packages/Python/lldbsuite/test/dotest.py
index ee59500a4fc7f..fd212631d3e27 100644
--- a/lldb/packages/Python/lldbsuite/test/dotest.py
+++ b/lldb/packages/Python/lldbsuite/test/dotest.py
@@ -36,7 +36,6 @@
 import tempfile
 
 # Third-party modules
-import six
 import unittest2
 
 # LLDB Modules

diff  --git a/lldb/packages/Python/lldbsuite/test/lldbpexpect.py b/lldb/packages/Python/lldbsuite/test/lldbpexpect.py
index 22a30c5d22c45..f298cc501029a 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbpexpect.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbpexpect.py
@@ -4,9 +4,6 @@
 import os
 import sys
 
-# Third-party modules
-import six
-
 # LLDB Modules
 import lldb
 from .lldbtest import *
@@ -72,7 +69,7 @@ def expect(self, cmd, substrs=None):
         self.assertNotIn('\n', cmd)
         # If 'substrs' is a string then this code would just check that every
         # character of the string is in the output.
-        assert not isinstance(substrs, six.string_types), \
+        assert not isinstance(substrs, str), \
             "substrs must be a collection of strings"
 
         self.child.sendline(cmd)

diff  --git a/lldb/packages/Python/lldbsuite/test/lldbplatform.py b/lldb/packages/Python/lldbsuite/test/lldbplatform.py
index 18a4fe5754dec..441894289933a 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbplatform.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbplatform.py
@@ -5,9 +5,6 @@
 # System modules
 import itertools
 
-# Third-party modules
-import six
-
 # LLDB modules
 import lldb
 
@@ -39,10 +36,10 @@
 
 def translate(values):
 
-    if isinstance(values, six.integer_types):
+    if isinstance(values, int):
         # This is a value from the platform enumeration, translate it.
         return __name_lookup[values]
-    elif isinstance(values, six.string_types):
+    elif isinstance(values, str):
         # This is a raw string, return it.
         return [values]
     elif hasattr(values, "__iter__"):

diff  --git a/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py b/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py
index 719131c9248e8..3f95e8054f789 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py
@@ -9,10 +9,7 @@
 import subprocess
 import sys
 import os
-
-# Third-party modules
-import six
-from six.moves.urllib import parse as urlparse
+from urllib.parse import urlparse
 
 # LLDB modules
 from . import configuration
@@ -62,7 +59,7 @@ def android_device_api():
     if not hasattr(android_device_api, 'result'):
         assert configuration.lldb_platform_url is not None
         device_id = None
-        parsed_url = urlparse.urlparse(configuration.lldb_platform_url)
+        parsed_url = urlparse(configuration.lldb_platform_url)
         host_name = parsed_url.netloc.split(":")[0]
         if host_name != 'localhost':
             device_id = host_name

diff  --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py
index d28e0d294ad3d..69bb5ac5629e4 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -48,9 +48,6 @@
 
 # Third-party modules
 import unittest2
-from six import add_metaclass
-from six import StringIO as SixStringIO
-import six
 
 # LLDB modules
 import lldb
@@ -320,7 +317,7 @@ def check_value_children(self, test_base, val, error_msg=None):
             child_error = "Checking child with index " + str(i) + ":\n" + error_msg
             expected_child.check_value(test_base, actual_child, child_error)
 
-class recording(SixStringIO):
+class recording(io.StringIO):
     """
     A nice little context manager for recording the debugger interactions into
     our session object.  If trace flag is ON, it also emits the interactions
@@ -328,8 +325,8 @@ class recording(SixStringIO):
     """
 
     def __init__(self, test, trace):
-        """Create a SixStringIO instance; record the session obj and trace flag."""
-        SixStringIO.__init__(self)
+        """Create a io.StringIO instance; record the session obj and trace flag."""
+        io.StringIO.__init__(self)
         # The test might not have undergone the 'setUp(self)' phase yet, so that
         # the attribute 'session' might not even exist yet.
         self.session = getattr(test, "session", None) if test else None
@@ -338,7 +335,7 @@ def __init__(self, test, trace):
     def __enter__(self):
         """
         Context management protocol on entry to the body of the with statement.
-        Just return the SixStringIO object.
+        Just return the io.StringIO object.
         """
         return self
 
@@ -346,7 +343,7 @@ def __exit__(self, type, value, tb):
         """
         Context management protocol on exit from the body of the with statement.
         If trace is ON, it emits the recordings into stderr.  Always add the
-        recordings to our session object.  And close the SixStringIO object, too.
+        recordings to our session object.  And close the io.StringIO object, too.
         """
         if self.trace:
             print(self.getvalue(), file=sys.stderr)
@@ -355,8 +352,7 @@ def __exit__(self, type, value, tb):
         self.close()
 
 
- at add_metaclass(abc.ABCMeta)
-class _BaseProcess(object):
+class _BaseProcess(object, metaclass=abc.ABCMeta):
 
     @abc.abstractproperty
     def pid(self):
@@ -945,7 +941,7 @@ def addTearDownHook(self, hook):
 
         Hooks are executed in a first come first serve manner.
         """
-        if six.callable(hook):
+        if callable(hook):
             with recording(self, traceAlways) as sbuf:
                 print(
                     "Adding tearDown hook:",
@@ -1691,8 +1687,7 @@ def test_method(self, attrvalue=attrvalue):
 # methods when a new class is loaded
 
 
- at add_metaclass(LLDBTestCaseFactory)
-class TestBase(Base):
+class TestBase(Base, metaclass=LLDBTestCaseFactory):
     """
     This abstract base class is meant to be subclassed.  It provides default
     implementations for setUpClass(), tearDownClass(), setUp(), and tearDown(),
@@ -2230,7 +2225,7 @@ def filecheck(
 
     def expect(
             self,
-            str,
+            string,
             msg=None,
             patterns=None,
             startstr=None,
@@ -2264,9 +2259,9 @@ def expect(
         client is expecting the output of the command not to match the golden
         input.
 
-        Finally, the required argument 'str' represents the lldb command to be
+        Finally, the required argument 'string' represents the lldb command to be
         sent to the command interpreter.  In case the keyword argument 'exe' is
-        set to False, the 'str' is treated as a string to be matched/not-matched
+        set to False, the 'string' is treated as a string to be matched/not-matched
         against the golden input.
         """
         # Catch cases where `expect` has been miscalled. Specifically, prevent
@@ -2280,9 +2275,9 @@ def expect(
             assert False, "expect() missing a matcher argument"
 
         # Check `patterns` and `substrs` are not accidentally given as strings.
-        assert not isinstance(patterns, six.string_types), \
+        assert not isinstance(patterns, str), \
             "patterns must be a collection of strings"
-        assert not isinstance(substrs, six.string_types), \
+        assert not isinstance(substrs, str), \
             "substrs must be a collection of strings"
 
         trace = (True if traceAlways else trace)
@@ -2292,7 +2287,7 @@ def expect(
             # Pass the assert message along since it provides more semantic
             # info.
             self.runCmd(
-                str,
+                string,
                 msg=msg,
                 trace=(
                     True if trace else False),
@@ -2305,13 +2300,13 @@ def expect(
             # If error is True, the API client expects the command to fail!
             if error:
                 self.assertFalse(self.res.Succeeded(),
-                                 "Command '" + str + "' is expected to fail!")
+                                 "Command '" + string + "' is expected to fail!")
         else:
-            # No execution required, just compare str against the golden input.
-            if isinstance(str, lldb.SBCommandReturnObject):
-                output = str.GetOutput()
+            # No execution required, just compare string against the golden input.
+            if isinstance(string, lldb.SBCommandReturnObject):
+                output = string.GetOutput()
             else:
-                output = str
+                output = string
             with recording(self, trace) as sbuf:
                 print("looking at:", output, file=sbuf)
 
@@ -2322,7 +2317,7 @@ def found_str(matched):
         # To be used as assert fail message and/or trace content
         log_lines = [
                 "{}:".format("Ran command" if exe else "Checking string"),
-                "\"{}\"".format(str),
+                "\"{}\"".format(string),
                 # Space out command and output
                 "",
         ]

diff  --git a/lldb/packages/Python/lldbsuite/test/lldbutil.py b/lldb/packages/Python/lldbsuite/test/lldbutil.py
index eba05a46b4959..8bd49c742cb04 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbutil.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbutil.py
@@ -9,16 +9,13 @@
 
 # System modules
 import errno
+import io
 import os
 import re
 import sys
 import subprocess
 from typing import Dict
 
-# Third-party modules
-from six import StringIO as SixStringIO
-import six
-
 # LLDB modules
 import lldb
 from . import lldbtest_config
@@ -111,7 +108,7 @@ def disassemble(target, function_or_symbol):
 
     It returns the disassembly content in a string object.
     """
-    buf = SixStringIO()
+    buf = io.StringIO()
     insts = function_or_symbol.GetInstructions(target)
     for i in insts:
         print(i, file=buf)
@@ -1080,7 +1077,7 @@ def GetStackFrame(i):
 def print_stacktrace(thread, string_buffer=False):
     """Prints a simple stack trace of this thread."""
 
-    output = SixStringIO() if string_buffer else sys.stdout
+    output = io.StringIO() if string_buffer else sys.stdout
     target = thread.GetProcess().GetTarget()
 
     depth = thread.GetNumFrames()
@@ -1142,7 +1139,7 @@ def print_stacktrace(thread, string_buffer=False):
 def print_stacktraces(process, string_buffer=False):
     """Prints the stack traces of all the threads."""
 
-    output = SixStringIO() if string_buffer else sys.stdout
+    output = io.StringIO() if string_buffer else sys.stdout
 
     print("Stack traces for " + str(process), file=output)
 
@@ -1258,7 +1255,7 @@ def get_args_as_string(frame, showFuncName=True):
 def print_registers(frame, string_buffer=False):
     """Prints all the register sets of the frame."""
 
-    output = SixStringIO() if string_buffer else sys.stdout
+    output = io.StringIO() if string_buffer else sys.stdout
 
     print("Register sets for " + str(frame), file=output)
 
@@ -1344,7 +1341,7 @@ class BasicFormatter(object):
 
     def format(self, value, buffer=None, indent=0):
         if not buffer:
-            output = SixStringIO()
+            output = io.StringIO()
         else:
             output = buffer
         # If there is a summary, it suffices.
@@ -1374,7 +1371,7 @@ def __init__(self, indent_child=2):
 
     def format(self, value, buffer=None):
         if not buffer:
-            output = SixStringIO()
+            output = io.StringIO()
         else:
             output = buffer
 
@@ -1401,7 +1398,7 @@ def __init__(self, indent_level=0, indent_child=2):
 
     def format(self, value, buffer=None):
         if not buffer:
-            output = SixStringIO()
+            output = io.StringIO()
         else:
             output = buffer
 
@@ -1511,7 +1508,7 @@ def __repr__(self):
 
 
 def skip_if_callable(test, mycallable, reason):
-    if six.callable(mycallable):
+    if callable(mycallable):
         if mycallable(test):
             test.skipTest(reason)
             return True

diff  --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py
index df1fd2cb71b6f..16539106e6638 100644
--- a/lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py
+++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py
@@ -59,8 +59,7 @@ def test_method(self, attrvalue=attrvalue):
         return super(GdbRemoteTestCaseFactory, cls).__new__(
                 cls, name, bases, newattrs)
 
- at add_metaclass(GdbRemoteTestCaseFactory)
-class GdbRemoteTestCaseBase(Base):
+class GdbRemoteTestCaseBase(Base, metaclass=GdbRemoteTestCaseFactory):
 
     # Default time out in seconds. The timeout is increased tenfold under Asan.
     DEFAULT_TIMEOUT =  20 * (10 if ('ASAN_OPTIONS' in os.environ) else 1)

diff  --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-server/lldbgdbserverutils.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-server/lldbgdbserverutils.py
index 82e1685666bc0..8e615ec8160a7 100644
--- a/lldb/packages/Python/lldbsuite/test/tools/lldb-server/lldbgdbserverutils.py
+++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-server/lldbgdbserverutils.py
@@ -8,7 +8,6 @@
 import os.path
 import platform
 import re
-import six
 import socket
 import subprocess
 from lldbsuite.support import seven
@@ -803,7 +802,7 @@ def process_is_running(pid, unknown_value=True):
         If we don't know how to check running process ids on the given OS:
         return the value provided by the unknown_value arg.
     """
-    if not isinstance(pid, six.integer_types):
+    if not isinstance(pid, int):
         raise Exception(
             "pid must be an integral type (actual type: %s)" % str(
                 type(pid)))
@@ -878,7 +877,7 @@ def send_packet(self, packet):
     @staticmethod
     def _checksum(packet):
         checksum = 0
-        for c in six.iterbytes(packet):
+        for c in iter(packet):
             checksum += c
         return checksum % 256
 

diff  --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
index 4bfec20b55e5c..2178db8e9b7c5 100644
--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
@@ -429,7 +429,7 @@ ScriptInterpreterPythonImpl::ScriptInterpreterPythonImpl(Debugger &debugger)
   // Reloading modules requires a 
diff erent syntax in Python 2 and Python 3.
   // This provides a consistent syntax no matter what version of Python.
   run_string.Clear();
-  run_string.Printf("run_one_line (%s, 'from six.moves import reload_module')",
+  run_string.Printf("run_one_line (%s, 'from importlib import reload as reload_module')",
                     m_dictionary_name.c_str());
   PyRun_SimpleString(run_string.GetData());
 

diff  --git a/lldb/test/API/api/listeners/TestListener.py b/lldb/test/API/api/listeners/TestListener.py
index a8c36574d02e7..de0491b6dbc15 100644
--- a/lldb/test/API/api/listeners/TestListener.py
+++ b/lldb/test/API/api/listeners/TestListener.py
@@ -7,8 +7,6 @@
 from lldbsuite.test.lldbtest import *
 from lldbsuite.test import lldbutil
 
-import six
-
 class ListenToModuleLoadedEvents (TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 

diff  --git a/lldb/test/API/commands/command/script/import/thepackage/TPunitA.py b/lldb/test/API/commands/command/script/import/thepackage/TPunitA.py
index 9694b084295fc..ec2ae93e471f7 100644
--- a/lldb/test/API/commands/command/script/import/thepackage/TPunitA.py
+++ b/lldb/test/API/commands/command/script/import/thepackage/TPunitA.py
@@ -1,7 +1,3 @@
-
-import six
-
-
 def command(debugger, command, result, internal_dict):
-    result.PutCString(six.u("hello world A"))
+    result.PutCString("hello world A")
     return None

diff  --git a/lldb/test/API/commands/command/script/import/thepackage/TPunitB.py b/lldb/test/API/commands/command/script/import/thepackage/TPunitB.py
index 94a333bc696bb..82095e538cf1f 100644
--- a/lldb/test/API/commands/command/script/import/thepackage/TPunitB.py
+++ b/lldb/test/API/commands/command/script/import/thepackage/TPunitB.py
@@ -1,7 +1,3 @@
-
-import six
-
-
 def command(debugger, command, result, internal_dict):
-    result.PutCString(six.u("hello world B"))
+    result.PutCString("hello world B")
     return None

diff  --git a/lldb/test/API/commands/process/launch/TestProcessLaunch.py b/lldb/test/API/commands/process/launch/TestProcessLaunch.py
index a7ce5bf8fd41b..e9e7348413289 100644
--- a/lldb/test/API/commands/process/launch/TestProcessLaunch.py
+++ b/lldb/test/API/commands/process/launch/TestProcessLaunch.py
@@ -11,8 +11,6 @@
 from lldbsuite.test.lldbtest import *
 from lldbsuite.test import lldbutil
 
-import six
-
 
 class ProcessLaunchTestCase(TestBase):
     NO_DEBUG_INFO_TESTCASE = True

diff  --git a/lldb/test/API/functionalities/gdb_remote_client/TestGdbClientModuleLoad.py b/lldb/test/API/functionalities/gdb_remote_client/TestGdbClientModuleLoad.py
index 8fb2d7f7f0425..3d25229e50699 100644
--- a/lldb/test/API/functionalities/gdb_remote_client/TestGdbClientModuleLoad.py
+++ b/lldb/test/API/functionalities/gdb_remote_client/TestGdbClientModuleLoad.py
@@ -3,7 +3,6 @@
 from lldbsuite.test.decorators import *
 from lldbsuite.test.gdbclientutils import *
 from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
-from lldbsuite.support import seven
 
 class MyResponder(MockGDBServerResponder):
     """

diff  --git a/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py b/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
index 7c36675c533f0..04f95d277c41f 100644
--- a/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
+++ b/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
@@ -2,8 +2,6 @@
 Test basics of Minidump debugging.
 """
 
-from six import iteritems
-
 import shutil
 
 import lldb
@@ -327,7 +325,7 @@ def do_test_deeper_stack(self, binary, core, pid):
 
         expected_stack = {1: 'bar', 2: 'foo', 3: '_start'}
         self.assertGreaterEqual(thread.GetNumFrames(), len(expected_stack))
-        for index, name in iteritems(expected_stack):
+        for index, name in expected_stack.items():
             frame = thread.GetFrameAtIndex(index)
             self.assertTrue(frame.IsValid())
             function_name = frame.GetFunctionName()

diff  --git a/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py b/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py
index 98a4464cc2319..54a249e213238 100644
--- a/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py
+++ b/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py
@@ -2,9 +2,6 @@
 Test basics of Minidump debugging.
 """
 
-from six import iteritems
-
-
 import lldb
 import os
 from lldbsuite.test.decorators import *

diff  --git a/lldb/test/API/functionalities/postmortem/minidump/TestMiniDump.py b/lldb/test/API/functionalities/postmortem/minidump/TestMiniDump.py
index e0c5600cf1bdd..e36f1af89e9ca 100644
--- a/lldb/test/API/functionalities/postmortem/minidump/TestMiniDump.py
+++ b/lldb/test/API/functionalities/postmortem/minidump/TestMiniDump.py
@@ -2,9 +2,6 @@
 Test basics of mini dump debugging.
 """
 
-from six import iteritems
-
-
 import lldb
 from lldbsuite.test.decorators import *
 from lldbsuite.test.lldbtest import *
@@ -130,7 +127,7 @@ def test_deeper_stack_in_mini_dump(self):
 
             expected_stack = {0: 'bar', 1: 'foo', 2: 'main'}
             self.assertGreaterEqual(thread.GetNumFrames(), len(expected_stack))
-            for index, name in iteritems(expected_stack):
+            for index, name in expected_stack.items():
                 frame = thread.GetFrameAtIndex(index)
                 self.assertTrue(frame.IsValid())
                 function_name = frame.GetFunctionName()

diff  --git a/lldb/test/API/functionalities/postmortem/wow64_minidump/TestWow64MiniDump.py b/lldb/test/API/functionalities/postmortem/wow64_minidump/TestWow64MiniDump.py
index ef4cf6e30984b..b4c19ee8fc7b1 100644
--- a/lldb/test/API/functionalities/postmortem/wow64_minidump/TestWow64MiniDump.py
+++ b/lldb/test/API/functionalities/postmortem/wow64_minidump/TestWow64MiniDump.py
@@ -7,9 +7,6 @@
 get the 32-bit register contexts.
 """
 
-from six import iteritems
-
-
 import lldb
 from lldbsuite.test.decorators import *
 from lldbsuite.test.lldbtest import *

diff  --git a/lldb/test/API/python_api/frame/TestFrames.py b/lldb/test/API/python_api/frame/TestFrames.py
index d8721f23838b1..06bb1d346e86b 100644
--- a/lldb/test/API/python_api/frame/TestFrames.py
+++ b/lldb/test/API/python_api/frame/TestFrames.py
@@ -5,6 +5,7 @@
 
 from __future__ import print_function
 
+import io
 
 import lldb
 from lldbsuite.test.decorators import *
@@ -42,8 +43,7 @@ def test_get_arg_vals_for_call_stack(self):
         # depth of 3 of the 'c' leaf function.
         callsOfA = 0
 
-        from six import StringIO as SixStringIO
-        session = SixStringIO()
+        session = io.StringIO()
         while process.GetState() == lldb.eStateStopped:
             thread = lldbutil.get_stopped_thread(
                 process, lldb.eStopReasonBreakpoint)

diff  --git a/lldb/test/API/terminal/TestSTTYBeforeAndAfter.py b/lldb/test/API/terminal/TestSTTYBeforeAndAfter.py
index 51147101ab568..7e5dd7afcaf0e 100644
--- a/lldb/test/API/terminal/TestSTTYBeforeAndAfter.py
+++ b/lldb/test/API/terminal/TestSTTYBeforeAndAfter.py
@@ -6,7 +6,7 @@
 
 
 import lldb
-import six
+import io
 import sys
 from lldbsuite.test.decorators import *
 from lldbsuite.test.lldbtest import *
@@ -57,8 +57,8 @@ def test_stty_dash_a_before_and_afetr_invoking_lldb_command(self):
         child.expect(expect_prompt)
 
         # Turn on loggings for input/output to/from the child.
-        child.logfile_send = child_send1 = six.StringIO()
-        child.logfile_read = child_read1 = six.StringIO()
+        child.logfile_send = child_send1 = io.StringIO()
+        child.logfile_read = child_read1 = io.StringIO()
         child.sendline('stty -a')
         child.expect(expect_prompt)
 
@@ -75,8 +75,8 @@ def test_stty_dash_a_before_and_afetr_invoking_lldb_command(self):
         child.sendline('quit')
         child.expect(expect_prompt)
 
-        child.logfile_send = child_send2 = six.StringIO()
-        child.logfile_read = child_read2 = six.StringIO()
+        child.logfile_send = child_send2 = io.StringIO()
+        child.logfile_read = child_read2 = io.StringIO()
         child.sendline('stty -a')
         child.expect(expect_prompt)
 

diff  --git a/lldb/test/API/test_utils/base/TestBaseTest.py b/lldb/test/API/test_utils/base/TestBaseTest.py
index 7f0ce1cc02823..254dfb1983d11 100644
--- a/lldb/test/API/test_utils/base/TestBaseTest.py
+++ b/lldb/test/API/test_utils/base/TestBaseTest.py
@@ -2,9 +2,10 @@
 Test TestBase test functions.
 """
 
+import io
+
 from lldbsuite.test.lldbtest import *
 from lldbsuite.test_event import build_exception
-import six
 
 class TestBuildMethod(Base):
 
@@ -15,9 +16,9 @@ def setUp(self):
 
     # override the parent trace method
     def trace(self, *args, **kwargs):
-        io = six.StringIO()
-        print(*args, file=io, **kwargs)
-        self._traces.append(io.getvalue())
+        buf = io.StringIO()
+        print(*args, file=buf, **kwargs)
+        self._traces.append(buf.getvalue())
 
     def test_build_fails_helpfully(self):
         try:

diff  --git a/lldb/third_party/Python/module/progress/progress.py b/lldb/third_party/Python/module/progress/progress.py
index e4bd9d5fd5b4c..833d1a3fc3f28 100644
--- a/lldb/third_party/Python/module/progress/progress.py
+++ b/lldb/third_party/Python/module/progress/progress.py
@@ -3,7 +3,6 @@
 from __future__ import print_function
 
 import use_lldb_suite
-import six
 
 import sys
 import time
@@ -21,17 +20,17 @@ class ProgressBar(object):
         format  Format
         incremental
     """
-    light_block = six.unichr(0x2591).encode("utf-8")
-    solid_block = six.unichr(0x2588).encode("utf-8")
-    solid_right_arrow = six.unichr(0x25BA).encode("utf-8")
+    light_block = chr(0x2591).encode("utf-8")
+    solid_block = chr(0x2588).encode("utf-8")
+    solid_right_arrow = chr(0x25BA).encode("utf-8")
 
     def __init__(self,
                  start=0,
                  end=10,
                  width=12,
-                 fill=six.unichr(0x25C9).encode("utf-8"),
-                 blank=six.unichr(0x25CC).encode("utf-8"),
-                 marker=six.unichr(0x25CE).encode("utf-8"),
+                 fill=chr(0x25C9).encode("utf-8"),
+                 blank=chr(0x25CC).encode("utf-8"),
+                 marker=chr(0x25CE).encode("utf-8"),
                  format='[%(fill)s%(marker)s%(blank)s] %(progress)s%%',
                  incremental=True):
         super(ProgressBar, self).__init__()
@@ -91,9 +90,9 @@ def __init__(self,
                  start=0,
                  end=10,
                  width=12,
-                 fill=six.unichr(0x25C9).encode("utf-8"),
-                 blank=six.unichr(0x25CC).encode("utf-8"),
-                 marker=six.unichr(0x25CE).encode("utf-8"),
+                 fill=chr(0x25C9).encode("utf-8"),
+                 blank=chr(0x25CC).encode("utf-8"),
+                 marker=chr(0x25CE).encode("utf-8"),
                  format='[%(fill)s%(marker)s%(blank)s] %(progress)s%%',
                  incremental=True,
                  stdout=sys.stdout):
@@ -129,9 +128,9 @@ def __init__(self,
                  start=0,
                  end=10,
                  width=12,
-                 fill=six.unichr(0x25C9).encode("utf-8"),
-                 blank=six.unichr(0x25CC).encode("utf-8"),
-                 marker=six.unichr(0x25CE).encode("utf-8"),
+                 fill=chr(0x25C9).encode("utf-8"),
+                 blank=chr(0x25CC).encode("utf-8"),
+                 marker=chr(0x25CE).encode("utf-8"),
                  format='[%(fill)s%(marker)s%(blank)s] %(progress)s%%',
                  incremental=True,
                  stdout=sys.stdout):

diff  --git a/lldb/third_party/Python/module/unittest2/unittest2/case.py b/lldb/third_party/Python/module/unittest2/unittest2/case.py
index c567037ea8a41..a24b9af98f40b 100644
--- a/lldb/third_party/Python/module/unittest2/unittest2/case.py
+++ b/lldb/third_party/Python/module/unittest2/unittest2/case.py
@@ -7,8 +7,6 @@
 import unittest
 import warnings
 
-import six
-
 from unittest2 import result
 from unittest2.util import (
     safe_repr, safe_str, strclass,
@@ -153,7 +151,7 @@ def __exit__(self, exc_type, exc_value, tb):
             return True
 
         expected_regexp = self.expected_regexp
-        if isinstance(expected_regexp, six.string_types):
+        if isinstance(expected_regexp, str):
             expected_regexp = re.compile(expected_regexp)
         if not expected_regexp.search(str(exc_value)):
             raise self.failureException(
@@ -173,7 +171,7 @@ def __setitem__(self, key, value):
 
     def __getitem__(self, key):
         value = self._store[key]
-        if isinstance(value, six.string_types):
+        if isinstance(value, str):
             return getattr(self.testcase, value)
         return value
 
@@ -251,10 +249,7 @@ def __init__(self, methodName='runTest'):
         self.addTypeEqualityFunc(tuple, 'assertTupleEqual')
         self.addTypeEqualityFunc(set, 'assertSetEqual')
         self.addTypeEqualityFunc(frozenset, 'assertSetEqual')
-        if six.PY2:
-            self.addTypeEqualityFunc(unicode, 'assertMultiLineEqual')
-        else:
-            self.addTypeEqualityFunc(str, 'assertMultiLineEqual')
+        self.addTypeEqualityFunc(str, 'assertMultiLineEqual')
 
     def addTypeEqualityFunc(self, typeobj, function):
         """Add a type specific assertEqual style function to compare a type.
@@ -993,9 +988,9 @@ def assertItemsEqual(self, expected_seq, actual_seq, msg=None):
 
     def assertMultiLineEqual(self, first, second, msg=None):
         """Assert that two multi-line strings are equal."""
-        self.assert_(isinstance(first, six.string_types), (
+        self.assert_(isinstance(first, str), (
             'First argument is not a string'))
-        self.assert_(isinstance(second, six.string_types), (
+        self.assert_(isinstance(second, str), (
             'Second argument is not a string'))
 
         if first != second:
@@ -1076,7 +1071,7 @@ def assertRaisesRegexp(self, expected_exception, expected_regexp,
         try:
             callable_obj(*args, **kwargs)
         except expected_exception as exc_value:
-            if isinstance(expected_regexp, six.string_types):
+            if isinstance(expected_regexp, str):
                 expected_regexp = re.compile(expected_regexp)
             if not expected_regexp.search(str(exc_value)):
                 raise self.failureException(
@@ -1091,7 +1086,7 @@ def assertRaisesRegexp(self, expected_exception, expected_regexp,
 
     def assertRegexpMatches(self, text, expected_regexp, msg=None):
         """Fail the test unless the text matches the regular expression."""
-        if isinstance(expected_regexp, six.string_types):
+        if isinstance(expected_regexp, str):
             expected_regexp = re.compile(expected_regexp)
         if not expected_regexp.search(text):
             msg = msg or "Regexp didn't match"
@@ -1101,7 +1096,7 @@ def assertRegexpMatches(self, text, expected_regexp, msg=None):
 
     def assertNotRegexpMatches(self, text, unexpected_regexp, msg=None):
         """Fail the test if the text matches the regular expression."""
-        if isinstance(unexpected_regexp, six.string_types):
+        if isinstance(unexpected_regexp, str):
             unexpected_regexp = re.compile(unexpected_regexp)
         match = unexpected_regexp.search(text)
         if match:

diff  --git a/lldb/third_party/Python/module/unittest2/unittest2/main.py b/lldb/third_party/Python/module/unittest2/unittest2/main.py
index 76e3e7323a857..0d3c5b8bd6c4d 100644
--- a/lldb/third_party/Python/module/unittest2/unittest2/main.py
+++ b/lldb/third_party/Python/module/unittest2/unittest2/main.py
@@ -3,7 +3,6 @@
 import sys
 import os
 import types
-import six
 
 from unittest2 import loader, runner
 try:
@@ -77,7 +76,7 @@ def __init__(self, module='__main__', defaultTest=None,
                  argv=None, testRunner=None,
                  testLoader=loader.defaultTestLoader, exit=True,
                  verbosity=1, failfast=None, catchbreak=None, buffer=None):
-        if isinstance(module, six.string_types):
+        if isinstance(module, str):
             self.module = __import__(module)
             for part in module.split('.')[1:]:
                 self.module = getattr(self.module, part)

diff  --git a/lldb/third_party/Python/module/unittest2/unittest2/result.py b/lldb/third_party/Python/module/unittest2/unittest2/result.py
index 8f89816b772fb..97eb4fa851481 100644
--- a/lldb/third_party/Python/module/unittest2/unittest2/result.py
+++ b/lldb/third_party/Python/module/unittest2/unittest2/result.py
@@ -2,12 +2,11 @@
 
 import use_lldb_suite
 
+import io
 import sys
 import traceback
 import unittest
 
-from six import StringIO as SixStringIO
-
 from unittest2 import util
 from unittest2.compatibility import wraps
 
@@ -65,8 +64,8 @@ def startTest(self, test):
         self._mirrorOutput = False
         if self.buffer:
             if self._stderr_buffer is None:
-                self._stderr_buffer = SixStringIO()
-                self._stdout_buffer = SixStringIO()
+                self._stderr_buffer = io.StringIO()
+                self._stdout_buffer = io.StringIO()
             sys.stdout = self._stdout_buffer
             sys.stderr = self._stderr_buffer
 

diff  --git a/lldb/third_party/Python/module/unittest2/unittest2/suite.py b/lldb/third_party/Python/module/unittest2/unittest2/suite.py
index 6b50680ec0985..f2554447cc91a 100644
--- a/lldb/third_party/Python/module/unittest2/unittest2/suite.py
+++ b/lldb/third_party/Python/module/unittest2/unittest2/suite.py
@@ -3,7 +3,6 @@
 import sys
 import unittest
 from unittest2 import case, util
-import six
 
 __unittest = True
 
@@ -50,7 +49,7 @@ def addTest(self, test):
         self._tests.append(test)
 
     def addTests(self, tests):
-        if isinstance(tests, six.string_types):
+        if isinstance(tests, str):
             raise TypeError("tests must be an iterable of tests, not a string")
         for test in tests:
             self.addTest(test)

diff  --git a/lldb/third_party/Python/module/unittest2/unittest2/test/test_case.py b/lldb/third_party/Python/module/unittest2/unittest2/test/test_case.py
index acf7e4edc57bb..795fa39be7350 100644
--- a/lldb/third_party/Python/module/unittest2/unittest2/test/test_case.py
+++ b/lldb/third_party/Python/module/unittest2/unittest2/test/test_case.py
@@ -1,7 +1,6 @@
 import 
diff lib
 import pprint
 import re
-import six
 
 from copy import deepcopy
 
@@ -543,7 +542,7 @@ class Foo(unittest2.TestCase):
             def runTest(self):
                 pass
 
-        self.assertIsInstance(Foo().id(), six.string_types)
+        self.assertIsInstance(Foo().id(), str)
 
     # "If result is omitted or None, a temporary result object is created
     # and used, but is not made available to the caller. As TestCase owns the

diff  --git a/lldb/third_party/Python/module/unittest2/unittest2/test/test_functiontestcase.py b/lldb/third_party/Python/module/unittest2/unittest2/test/test_functiontestcase.py
index ccfadc97d3646..9bafb54be5a6e 100644
--- a/lldb/third_party/Python/module/unittest2/unittest2/test/test_functiontestcase.py
+++ b/lldb/third_party/Python/module/unittest2/unittest2/test/test_functiontestcase.py
@@ -1,5 +1,4 @@
 import unittest2
-import six
 
 from unittest2.test.support import LoggingResult
 
@@ -125,7 +124,7 @@ def tearDown():
     def test_id(self):
         test = unittest2.FunctionTestCase(lambda: None)
 
-        self.assertIsInstance(test.id(), six.string_types)
+        self.assertIsInstance(test.id(), str)
 
     # "Returns a one-line description of the test, or None if no description
     # has been provided. The default implementation of this method returns


        


More information about the lldb-commits mailing list