diff --git a/lldb/source/API/SystemInitializerFull.cpp b/lldb/source/API/SystemInitializerFull.cpp
index 00cbb5d..a297a7c 100644
--- a/lldb/source/API/SystemInitializerFull.cpp
+++ b/lldb/source/API/SystemInitializerFull.cpp
@@ -43,8 +43,8 @@
 #include "Plugins/ABI/SysV-s390x/ABISysV_s390x.h"
 #include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h"
 #include "Plugins/Disassembler/llvm/DisassemblerLLVMC.h"
-#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h"
 #include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h"
+#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h"
 #include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h"
 #include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
 #include "Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h"
@@ -55,9 +55,9 @@
 #include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
 #include "Plugins/Language/Go/GoLanguage.h"
 #include "Plugins/Language/Java/JavaLanguage.h"
+#include "Plugins/Language/OCaml/OCamlLanguage.h"
 #include "Plugins/Language/ObjC/ObjCLanguage.h"
 #include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"
-#include "Plugins/Language/OCaml/OCamlLanguage.h"
 #include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
 #include "Plugins/LanguageRuntime/Go/GoLanguageRuntime.h"
 #include "Plugins/LanguageRuntime/Java/JavaLanguageRuntime.h"
@@ -107,9 +107,9 @@
 #endif
 
 #if defined(_MSC_VER)
-#include "lldb/Host/windows/windows.h"
 #include "Plugins/Process/Windows/Live/ProcessWindowsLive.h"
 #include "Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h"
+#include "lldb/Host/windows/windows.h"
 #endif
 
 #include "llvm/Support/TargetSelect.h"
@@ -122,14 +122,12 @@
 
 // Defined in the SWIG source file
 #if PY_MAJOR_VERSION >= 3
-extern "C" PyObject*
-PyInit__lldb(void);
+extern "C" PyObject *PyInit__lldb(void);
 
 #define LLDBSwigPyInit PyInit__lldb
 
 #else
-extern "C" void
-init_lldb(void);
+extern "C" void init_lldb(void);
 
 #define LLDBSwigPyInit init_lldb
 #endif
@@ -139,412 +137,370 @@
 // we still need to use function pointers to them instead of relying
 // on linkage-time resolution because the SWIG stuff and this file
 // get built at different times
-extern "C" bool
-LLDBSwigPythonBreakpointCallbackFunction (const char *python_function_name,
-                                          const char *session_dictionary_name,
-                                          const lldb::StackFrameSP& sb_frame,
-                                          const lldb::BreakpointLocationSP& sb_bp_loc);
+extern "C" bool LLDBSwigPythonBreakpointCallbackFunction(
+    const char *python_function_name, const char *session_dictionary_name,
+    const lldb::StackFrameSP &sb_frame,
+    const lldb::BreakpointLocationSP &sb_bp_loc);
 
-extern "C" bool
-LLDBSwigPythonWatchpointCallbackFunction (const char *python_function_name,
-                                          const char *session_dictionary_name,
-                                          const lldb::StackFrameSP& sb_frame,
-                                          const lldb::WatchpointSP& sb_wp);
+extern "C" bool LLDBSwigPythonWatchpointCallbackFunction(
+    const char *python_function_name, const char *session_dictionary_name,
+    const lldb::StackFrameSP &sb_frame, const lldb::WatchpointSP &sb_wp);
 
-extern "C" bool
-LLDBSwigPythonCallTypeScript (const char *python_function_name,
-                              void *session_dictionary,
-                              const lldb::ValueObjectSP& valobj_sp,
-                              void** pyfunct_wrapper,
-                              const lldb::TypeSummaryOptionsSP& options_sp,
-                              std::string& retval);
-
-extern "C" void*
-LLDBSwigPythonCreateSyntheticProvider (const char *python_class_name,
-                                       const char *session_dictionary_name,
-                                       const lldb::ValueObjectSP& valobj_sp);
-
-extern "C" void*
-LLDBSwigPythonCreateCommandObject (const char *python_class_name,
-                                   const char *session_dictionary_name,
-                                   const lldb::DebuggerSP debugger_sp);
-
-extern "C" void*
-LLDBSwigPythonCreateScriptedThreadPlan (const char *python_class_name,
-                                        const char *session_dictionary_name,
-                                        const lldb::ThreadPlanSP& thread_plan_sp);
-
-extern "C" bool
-LLDBSWIGPythonCallThreadPlan (void *implementor,
-                              const char *method_name,
-                              Event *event_sp,
-                              bool &got_error);
-
-extern "C" size_t
-LLDBSwigPython_CalculateNumChildren (void *implementor, uint32_t max);
+extern "C" bool LLDBSwigPythonCallTypeScript(
+    const char *python_function_name, void *session_dictionary,
+    const lldb::ValueObjectSP &valobj_sp, void **pyfunct_wrapper,
+    const lldb::TypeSummaryOptionsSP &options_sp, std::string &retval);
 
 extern "C" void *
-LLDBSwigPython_GetChildAtIndex (void *implementor, uint32_t idx);
-
-extern "C" int
-LLDBSwigPython_GetIndexOfChildWithName (void *implementor, const char* child_name);
+LLDBSwigPythonCreateSyntheticProvider(const char *python_class_name,
+                                      const char *session_dictionary_name,
+                                      const lldb::ValueObjectSP &valobj_sp);
 
 extern "C" void *
-LLDBSWIGPython_CastPyObjectToSBValue (void* data);
+LLDBSwigPythonCreateCommandObject(const char *python_class_name,
+                                  const char *session_dictionary_name,
+                                  const lldb::DebuggerSP debugger_sp);
+
+extern "C" void *LLDBSwigPythonCreateScriptedThreadPlan(
+    const char *python_class_name, const char *session_dictionary_name,
+    const lldb::ThreadPlanSP &thread_plan_sp);
+
+extern "C" bool LLDBSWIGPythonCallThreadPlan(void *implementor,
+                                             const char *method_name,
+                                             Event *event_sp, bool &got_error);
+
+extern "C" size_t LLDBSwigPython_CalculateNumChildren(void *implementor,
+                                                      uint32_t max);
+
+extern "C" void *LLDBSwigPython_GetChildAtIndex(void *implementor,
+                                                uint32_t idx);
+
+extern "C" int LLDBSwigPython_GetIndexOfChildWithName(void *implementor,
+                                                      const char *child_name);
+
+extern "C" void *LLDBSWIGPython_CastPyObjectToSBValue(void *data);
 
 extern lldb::ValueObjectSP
-LLDBSWIGPython_GetValueObjectSPFromSBValue (void* data);
+LLDBSWIGPython_GetValueObjectSPFromSBValue(void *data);
+
+extern "C" bool LLDBSwigPython_UpdateSynthProviderInstance(void *implementor);
 
 extern "C" bool
-LLDBSwigPython_UpdateSynthProviderInstance (void* implementor);
-
-extern "C" bool
-LLDBSwigPython_MightHaveChildrenSynthProviderInstance (void* implementor);
+LLDBSwigPython_MightHaveChildrenSynthProviderInstance(void *implementor);
 
 extern "C" void *
-LLDBSwigPython_GetValueSynthProviderInstance (void* implementor);
+LLDBSwigPython_GetValueSynthProviderInstance(void *implementor);
 
 extern "C" bool
-LLDBSwigPythonCallCommand (const char *python_function_name,
-                           const char *session_dictionary_name,
-                           lldb::DebuggerSP& debugger,
-                           const char* args,
-                           lldb_private::CommandReturnObject &cmd_retobj,
-                           lldb::ExecutionContextRefSP exe_ctx_ref_sp);
+LLDBSwigPythonCallCommand(const char *python_function_name,
+                          const char *session_dictionary_name,
+                          lldb::DebuggerSP &debugger, const char *args,
+                          lldb_private::CommandReturnObject &cmd_retobj,
+                          lldb::ExecutionContextRefSP exe_ctx_ref_sp);
 
 extern "C" bool
-LLDBSwigPythonCallCommandObject (void *implementor,
-                                 lldb::DebuggerSP& debugger,
-                                 const char* args,
-                                 lldb_private::CommandReturnObject& cmd_retobj,
-                                 lldb::ExecutionContextRefSP exe_ctx_ref_sp);
+LLDBSwigPythonCallCommandObject(void *implementor, lldb::DebuggerSP &debugger,
+                                const char *args,
+                                lldb_private::CommandReturnObject &cmd_retobj,
+                                lldb::ExecutionContextRefSP exe_ctx_ref_sp);
 
 extern "C" bool
-LLDBSwigPythonCallModuleInit (const char *python_module_name,
-                              const char *session_dictionary_name,
-                              lldb::DebuggerSP& debugger);
+LLDBSwigPythonCallModuleInit(const char *python_module_name,
+                             const char *session_dictionary_name,
+                             lldb::DebuggerSP &debugger);
 
-extern "C" void*
-LLDBSWIGPythonCreateOSPlugin (const char *python_class_name,
-                              const char *session_dictionary_name,
-                              const lldb::ProcessSP& process_sp);
+extern "C" void *
+LLDBSWIGPythonCreateOSPlugin(const char *python_class_name,
+                             const char *session_dictionary_name,
+                             const lldb::ProcessSP &process_sp);
 
-extern "C" bool
-LLDBSWIGPythonRunScriptKeywordProcess (const char* python_function_name,
-                                       const char* session_dictionary_name,
-                                       lldb::ProcessSP& process,
-                                       std::string& output);
+extern "C" bool LLDBSWIGPythonRunScriptKeywordProcess(
+    const char *python_function_name, const char *session_dictionary_name,
+    lldb::ProcessSP &process, std::string &output);
 
-extern "C" bool
-LLDBSWIGPythonRunScriptKeywordThread (const char* python_function_name,
-                                      const char* session_dictionary_name,
-                                      lldb::ThreadSP& thread,
-                                      std::string& output);
+extern "C" bool LLDBSWIGPythonRunScriptKeywordThread(
+    const char *python_function_name, const char *session_dictionary_name,
+    lldb::ThreadSP &thread, std::string &output);
 
-extern "C" bool
-LLDBSWIGPythonRunScriptKeywordTarget (const char* python_function_name,
-                                      const char* session_dictionary_name,
-                                      lldb::TargetSP& target,
-                                      std::string& output);
+extern "C" bool LLDBSWIGPythonRunScriptKeywordTarget(
+    const char *python_function_name, const char *session_dictionary_name,
+    lldb::TargetSP &target, std::string &output);
 
-extern "C" bool
-LLDBSWIGPythonRunScriptKeywordFrame (const char* python_function_name,
-                                     const char* session_dictionary_name,
-                                     lldb::StackFrameSP& frame,
-                                     std::string& output);
+extern "C" bool LLDBSWIGPythonRunScriptKeywordFrame(
+    const char *python_function_name, const char *session_dictionary_name,
+    lldb::StackFrameSP &frame, std::string &output);
 
-extern "C" bool
-LLDBSWIGPythonRunScriptKeywordValue (const char* python_function_name,
-                                     const char* session_dictionary_name,
-                                     lldb::ValueObjectSP& value,
-                                     std::string& output);
+extern "C" bool LLDBSWIGPythonRunScriptKeywordValue(
+    const char *python_function_name, const char *session_dictionary_name,
+    lldb::ValueObjectSP &value, std::string &output);
 
-extern "C" void*
-LLDBSWIGPython_GetDynamicSetting (void* module,
-                                  const char* setting,
-                                  const lldb::TargetSP& target_sp);
-
+extern "C" void *
+LLDBSWIGPython_GetDynamicSetting(void *module, const char *setting,
+                                 const lldb::TargetSP &target_sp);
 
 #endif
 
-SystemInitializerFull::SystemInitializerFull()
-{
-}
+SystemInitializerFull::SystemInitializerFull() {}
 
-SystemInitializerFull::~SystemInitializerFull()
-{
-}
+SystemInitializerFull::~SystemInitializerFull() {}
 
-void
-SystemInitializerFull::Initialize()
-{
-    SystemInitializerCommon::Initialize();
-    ScriptInterpreterNone::Initialize();
+void SystemInitializerFull::Initialize() {
+  SystemInitializerCommon::Initialize();
+  ScriptInterpreterNone::Initialize();
 
 #ifndef LLDB_DISABLE_PYTHON
-    OperatingSystemPython::Initialize();
+  OperatingSystemPython::Initialize();
 #endif
-    OperatingSystemGo::Initialize();
+  OperatingSystemGo::Initialize();
 
 #if !defined(LLDB_DISABLE_PYTHON)
-    InitializeSWIG();
+  InitializeSWIG();
 
-    // ScriptInterpreterPython::Initialize() depends on things like HostInfo being initialized
-    // so it can compute the python directory etc, so we need to do this after
-    // SystemInitializerCommon::Initialize().
-    ScriptInterpreterPython::Initialize();
+  // ScriptInterpreterPython::Initialize() depends on things like HostInfo being
+  // initialized
+  // so it can compute the python directory etc, so we need to do this after
+  // SystemInitializerCommon::Initialize().
+  ScriptInterpreterPython::Initialize();
 #endif
 
-    platform_freebsd::PlatformFreeBSD::Initialize();
-    platform_linux::PlatformLinux::Initialize();
-    platform_netbsd::PlatformNetBSD::Initialize();
-    PlatformWindows::Initialize();
-    PlatformKalimba::Initialize();
-    platform_android::PlatformAndroid::Initialize();
-    PlatformRemoteiOS::Initialize();
-    PlatformMacOSX::Initialize();
+  platform_freebsd::PlatformFreeBSD::Initialize();
+  platform_linux::PlatformLinux::Initialize();
+  platform_netbsd::PlatformNetBSD::Initialize();
+  PlatformWindows::Initialize();
+  PlatformKalimba::Initialize();
+  platform_android::PlatformAndroid::Initialize();
+  PlatformRemoteiOS::Initialize();
+  PlatformMacOSX::Initialize();
 #if defined(__APPLE__)
-    PlatformiOSSimulator::Initialize();
-    PlatformDarwinKernel::Initialize();
+  PlatformiOSSimulator::Initialize();
+  PlatformDarwinKernel::Initialize();
 #endif
 
-    // Initialize LLVM and Clang
-    llvm::InitializeAllTargets();
-    llvm::InitializeAllAsmPrinters();
-    llvm::InitializeAllTargetMCs();
-    llvm::InitializeAllDisassemblers();
+  // Initialize LLVM and Clang
+  llvm::InitializeAllTargets();
+  llvm::InitializeAllAsmPrinters();
+  llvm::InitializeAllTargetMCs();
+  llvm::InitializeAllDisassemblers();
 
-    ClangASTContext::Initialize();
-    GoASTContext::Initialize();
-    JavaASTContext::Initialize();
-    OCamlASTContext::Initialize();
+  ClangASTContext::Initialize();
+  GoASTContext::Initialize();
+  JavaASTContext::Initialize();
+  OCamlASTContext::Initialize();
 
-    ABIMacOSX_i386::Initialize();
-    ABIMacOSX_arm::Initialize();
-    ABIMacOSX_arm64::Initialize();
-    ABISysV_arm::Initialize();
-    ABISysV_arm64::Initialize();
-    ABISysV_hexagon::Initialize();
-    ABISysV_i386::Initialize();
-    ABISysV_x86_64::Initialize();
-    ABISysV_ppc::Initialize();
-    ABISysV_ppc64::Initialize();
-    ABISysV_mips::Initialize();
-    ABISysV_mips64::Initialize();
-    ABISysV_s390x::Initialize();
-    DisassemblerLLVMC::Initialize();
+  ABIMacOSX_i386::Initialize();
+  ABIMacOSX_arm::Initialize();
+  ABIMacOSX_arm64::Initialize();
+  ABISysV_arm::Initialize();
+  ABISysV_arm64::Initialize();
+  ABISysV_hexagon::Initialize();
+  ABISysV_i386::Initialize();
+  ABISysV_x86_64::Initialize();
+  ABISysV_ppc::Initialize();
+  ABISysV_ppc64::Initialize();
+  ABISysV_mips::Initialize();
+  ABISysV_mips64::Initialize();
+  ABISysV_s390x::Initialize();
+  DisassemblerLLVMC::Initialize();
 
-    JITLoaderGDB::Initialize();
-    ProcessElfCore::Initialize();
+  JITLoaderGDB::Initialize();
+  ProcessElfCore::Initialize();
 #if defined(_MSC_VER)
-    ProcessWinMiniDump::Initialize();
+  ProcessWinMiniDump::Initialize();
 #endif
-    MemoryHistoryASan::Initialize();
-    AddressSanitizerRuntime::Initialize();
-    ThreadSanitizerRuntime::Initialize();
+  MemoryHistoryASan::Initialize();
+  AddressSanitizerRuntime::Initialize();
+  ThreadSanitizerRuntime::Initialize();
 
-    SymbolVendorELF::Initialize();
-    SymbolFileDWARF::Initialize();
-    SymbolFilePDB::Initialize();
-    SymbolFileSymtab::Initialize();
-    UnwindAssemblyInstEmulation::Initialize();
-    UnwindAssembly_x86::Initialize();
-    EmulateInstructionARM64::Initialize();
-    SymbolFileDWARFDebugMap::Initialize();
-    ItaniumABILanguageRuntime::Initialize();
-    AppleObjCRuntimeV2::Initialize();
-    AppleObjCRuntimeV1::Initialize();
-    SystemRuntimeMacOSX::Initialize();
-    RenderScriptRuntime::Initialize();
-    GoLanguageRuntime::Initialize();
-    JavaLanguageRuntime::Initialize();
+  SymbolVendorELF::Initialize();
+  SymbolFileDWARF::Initialize();
+  SymbolFilePDB::Initialize();
+  SymbolFileSymtab::Initialize();
+  UnwindAssemblyInstEmulation::Initialize();
+  UnwindAssembly_x86::Initialize();
+  EmulateInstructionARM64::Initialize();
+  SymbolFileDWARFDebugMap::Initialize();
+  ItaniumABILanguageRuntime::Initialize();
+  AppleObjCRuntimeV2::Initialize();
+  AppleObjCRuntimeV1::Initialize();
+  SystemRuntimeMacOSX::Initialize();
+  RenderScriptRuntime::Initialize();
+  GoLanguageRuntime::Initialize();
+  JavaLanguageRuntime::Initialize();
 
-    CPlusPlusLanguage::Initialize();
-    GoLanguage::Initialize();
-    JavaLanguage::Initialize();
-    ObjCLanguage::Initialize();
-    ObjCPlusPlusLanguage::Initialize();
-    OCamlLanguage::Initialize();
+  CPlusPlusLanguage::Initialize();
+  GoLanguage::Initialize();
+  JavaLanguage::Initialize();
+  ObjCLanguage::Initialize();
+  ObjCPlusPlusLanguage::Initialize();
+  OCamlLanguage::Initialize();
 
 #if defined(_MSC_VER)
-    ProcessWindowsLive::Initialize();
+  ProcessWindowsLive::Initialize();
 #endif
 #if defined(__FreeBSD__)
-    ProcessFreeBSD::Initialize();
+  ProcessFreeBSD::Initialize();
 #endif
 #if defined(__APPLE__)
-    SymbolVendorMacOSX::Initialize();
-    ProcessKDP::Initialize();
-    ProcessMachCore::Initialize();
-    PlatformAppleTVSimulator::Initialize();
-    PlatformAppleWatchSimulator::Initialize();
-    PlatformRemoteAppleTV::Initialize();
-    PlatformRemoteAppleWatch::Initialize();
-    DynamicLoaderDarwinKernel::Initialize();
+  SymbolVendorMacOSX::Initialize();
+  ProcessKDP::Initialize();
+  ProcessMachCore::Initialize();
+  PlatformAppleTVSimulator::Initialize();
+  PlatformAppleWatchSimulator::Initialize();
+  PlatformRemoteAppleTV::Initialize();
+  PlatformRemoteAppleWatch::Initialize();
+  DynamicLoaderDarwinKernel::Initialize();
 #endif
 
-    // This plugin is valid on any host that talks to a Darwin remote.
-    // It shouldn't be limited to __APPLE__.
-    StructuredDataDarwinLog::Initialize();
+  // This plugin is valid on any host that talks to a Darwin remote.
+  // It shouldn't be limited to __APPLE__.
+  StructuredDataDarwinLog::Initialize();
 
-    //----------------------------------------------------------------------
-    // Platform agnostic plugins
-    //----------------------------------------------------------------------
-    platform_gdb_server::PlatformRemoteGDBServer::Initialize();
+  //----------------------------------------------------------------------
+  // Platform agnostic plugins
+  //----------------------------------------------------------------------
+  platform_gdb_server::PlatformRemoteGDBServer::Initialize();
 
-    process_gdb_remote::ProcessGDBRemote::Initialize();
-    DynamicLoaderMacOSXDYLD::Initialize();
-    DynamicLoaderMacOS::Initialize();
-    DynamicLoaderPOSIXDYLD::Initialize();
-    DynamicLoaderStatic::Initialize();
-    DynamicLoaderWindowsDYLD::Initialize();
+  process_gdb_remote::ProcessGDBRemote::Initialize();
+  DynamicLoaderMacOSXDYLD::Initialize();
+  DynamicLoaderMacOS::Initialize();
+  DynamicLoaderPOSIXDYLD::Initialize();
+  DynamicLoaderStatic::Initialize();
+  DynamicLoaderWindowsDYLD::Initialize();
 
-    // Scan for any system or user LLDB plug-ins
-    PluginManager::Initialize();
+  // Scan for any system or user LLDB plug-ins
+  PluginManager::Initialize();
 
-    // The process settings need to know about installed plug-ins, so the Settings must be initialized
-    // AFTER PluginManager::Initialize is called.
+  // The process settings need to know about installed plug-ins, so the Settings
+  // must be initialized
+  // AFTER PluginManager::Initialize is called.
 
-    Debugger::SettingsInitialize();
+  Debugger::SettingsInitialize();
 }
 
-void SystemInitializerFull::InitializeSWIG()
-{
+void SystemInitializerFull::InitializeSWIG() {
 #if !defined(LLDB_DISABLE_PYTHON)
-    ScriptInterpreterPython::InitializeInterpreter(
-        LLDBSwigPyInit,
-        LLDBSwigPythonBreakpointCallbackFunction,
-        LLDBSwigPythonWatchpointCallbackFunction,
-        LLDBSwigPythonCallTypeScript,
-        LLDBSwigPythonCreateSyntheticProvider,
-        LLDBSwigPythonCreateCommandObject,
-        LLDBSwigPython_CalculateNumChildren,
-        LLDBSwigPython_GetChildAtIndex,
-        LLDBSwigPython_GetIndexOfChildWithName,
-        LLDBSWIGPython_CastPyObjectToSBValue,
-        LLDBSWIGPython_GetValueObjectSPFromSBValue,
-        LLDBSwigPython_UpdateSynthProviderInstance,
-        LLDBSwigPython_MightHaveChildrenSynthProviderInstance,
-        LLDBSwigPython_GetValueSynthProviderInstance,
-        LLDBSwigPythonCallCommand,
-        LLDBSwigPythonCallCommandObject,
-        LLDBSwigPythonCallModuleInit,
-        LLDBSWIGPythonCreateOSPlugin,
-        LLDBSWIGPythonRunScriptKeywordProcess,
-        LLDBSWIGPythonRunScriptKeywordThread,
-        LLDBSWIGPythonRunScriptKeywordTarget,
-        LLDBSWIGPythonRunScriptKeywordFrame,
-        LLDBSWIGPythonRunScriptKeywordValue,
-        LLDBSWIGPython_GetDynamicSetting,
-        LLDBSwigPythonCreateScriptedThreadPlan,
-        LLDBSWIGPythonCallThreadPlan);
+  ScriptInterpreterPython::InitializeInterpreter(
+      LLDBSwigPyInit, LLDBSwigPythonBreakpointCallbackFunction,
+      LLDBSwigPythonWatchpointCallbackFunction, LLDBSwigPythonCallTypeScript,
+      LLDBSwigPythonCreateSyntheticProvider, LLDBSwigPythonCreateCommandObject,
+      LLDBSwigPython_CalculateNumChildren, LLDBSwigPython_GetChildAtIndex,
+      LLDBSwigPython_GetIndexOfChildWithName,
+      LLDBSWIGPython_CastPyObjectToSBValue,
+      LLDBSWIGPython_GetValueObjectSPFromSBValue,
+      LLDBSwigPython_UpdateSynthProviderInstance,
+      LLDBSwigPython_MightHaveChildrenSynthProviderInstance,
+      LLDBSwigPython_GetValueSynthProviderInstance, LLDBSwigPythonCallCommand,
+      LLDBSwigPythonCallCommandObject, LLDBSwigPythonCallModuleInit,
+      LLDBSWIGPythonCreateOSPlugin, LLDBSWIGPythonRunScriptKeywordProcess,
+      LLDBSWIGPythonRunScriptKeywordThread,
+      LLDBSWIGPythonRunScriptKeywordTarget, LLDBSWIGPythonRunScriptKeywordFrame,
+      LLDBSWIGPythonRunScriptKeywordValue, LLDBSWIGPython_GetDynamicSetting,
+      LLDBSwigPythonCreateScriptedThreadPlan, LLDBSWIGPythonCallThreadPlan);
 #endif
 }
 
-void
-SystemInitializerFull::Terminate()
-{
-    Timer scoped_timer(LLVM_PRETTY_FUNCTION, LLVM_PRETTY_FUNCTION);
+void SystemInitializerFull::Terminate() {
+  Timer scoped_timer(LLVM_PRETTY_FUNCTION, LLVM_PRETTY_FUNCTION);
 
-    Debugger::SettingsTerminate();
+  Debugger::SettingsTerminate();
 
-    // Terminate and unload and loaded system or user LLDB plug-ins
-    PluginManager::Terminate();
+  // Terminate and unload and loaded system or user LLDB plug-ins
+  PluginManager::Terminate();
 
-    ClangASTContext::Terminate();
-    GoASTContext::Terminate();
-    JavaASTContext::Terminate();
-    OCamlASTContext::Terminate();
+  ClangASTContext::Terminate();
+  GoASTContext::Terminate();
+  JavaASTContext::Terminate();
+  OCamlASTContext::Terminate();
 
-    ABIMacOSX_i386::Terminate();
-    ABIMacOSX_arm::Terminate();
-    ABIMacOSX_arm64::Terminate();
-    ABISysV_arm::Terminate();
-    ABISysV_arm64::Terminate();
-    ABISysV_hexagon::Terminate();
-    ABISysV_i386::Terminate();
-    ABISysV_x86_64::Terminate();
-    ABISysV_ppc::Terminate();
-    ABISysV_ppc64::Terminate();
-    ABISysV_mips::Terminate();
-    ABISysV_mips64::Terminate();
-    ABISysV_s390x::Terminate();
-    DisassemblerLLVMC::Terminate();
+  ABIMacOSX_i386::Terminate();
+  ABIMacOSX_arm::Terminate();
+  ABIMacOSX_arm64::Terminate();
+  ABISysV_arm::Terminate();
+  ABISysV_arm64::Terminate();
+  ABISysV_hexagon::Terminate();
+  ABISysV_i386::Terminate();
+  ABISysV_x86_64::Terminate();
+  ABISysV_ppc::Terminate();
+  ABISysV_ppc64::Terminate();
+  ABISysV_mips::Terminate();
+  ABISysV_mips64::Terminate();
+  ABISysV_s390x::Terminate();
+  DisassemblerLLVMC::Terminate();
 
-    JITLoaderGDB::Terminate();
-    ProcessElfCore::Terminate();
+  JITLoaderGDB::Terminate();
+  ProcessElfCore::Terminate();
 #if defined(_MSC_VER)
-    ProcessWinMiniDump::Terminate();
+  ProcessWinMiniDump::Terminate();
 #endif
-    MemoryHistoryASan::Terminate();
-    AddressSanitizerRuntime::Terminate();
-    ThreadSanitizerRuntime::Terminate();
-    SymbolVendorELF::Terminate();
-    SymbolFileDWARF::Terminate();
-    SymbolFilePDB::Terminate();
-    SymbolFileSymtab::Terminate();
-    UnwindAssembly_x86::Terminate();
-    UnwindAssemblyInstEmulation::Terminate();
-    EmulateInstructionARM64::Terminate();
-    SymbolFileDWARFDebugMap::Terminate();
-    ItaniumABILanguageRuntime::Terminate();
-    AppleObjCRuntimeV2::Terminate();
-    AppleObjCRuntimeV1::Terminate();
-    SystemRuntimeMacOSX::Terminate();
-    RenderScriptRuntime::Terminate();
-    JavaLanguageRuntime::Terminate();
+  MemoryHistoryASan::Terminate();
+  AddressSanitizerRuntime::Terminate();
+  ThreadSanitizerRuntime::Terminate();
+  SymbolVendorELF::Terminate();
+  SymbolFileDWARF::Terminate();
+  SymbolFilePDB::Terminate();
+  SymbolFileSymtab::Terminate();
+  UnwindAssembly_x86::Terminate();
+  UnwindAssemblyInstEmulation::Terminate();
+  EmulateInstructionARM64::Terminate();
+  SymbolFileDWARFDebugMap::Terminate();
+  ItaniumABILanguageRuntime::Terminate();
+  AppleObjCRuntimeV2::Terminate();
+  AppleObjCRuntimeV1::Terminate();
+  SystemRuntimeMacOSX::Terminate();
+  RenderScriptRuntime::Terminate();
+  JavaLanguageRuntime::Terminate();
 
-    CPlusPlusLanguage::Terminate();
-    GoLanguage::Terminate();
-    JavaLanguage::Terminate();
-    ObjCLanguage::Terminate();
-    ObjCPlusPlusLanguage::Terminate();
-    OCamlLanguage::Terminate();
+  CPlusPlusLanguage::Terminate();
+  GoLanguage::Terminate();
+  JavaLanguage::Terminate();
+  ObjCLanguage::Terminate();
+  ObjCPlusPlusLanguage::Terminate();
+  OCamlLanguage::Terminate();
 
 #if defined(__APPLE__)
-    DynamicLoaderDarwinKernel::Terminate();
-    ProcessMachCore::Terminate();
-    ProcessKDP::Terminate();
-    SymbolVendorMacOSX::Terminate();
-    PlatformAppleTVSimulator::Terminate();
-    PlatformAppleWatchSimulator::Terminate();
-    PlatformRemoteAppleTV::Terminate();
-    PlatformRemoteAppleWatch::Terminate();
+  DynamicLoaderDarwinKernel::Terminate();
+  ProcessMachCore::Terminate();
+  ProcessKDP::Terminate();
+  SymbolVendorMacOSX::Terminate();
+  PlatformAppleTVSimulator::Terminate();
+  PlatformAppleWatchSimulator::Terminate();
+  PlatformRemoteAppleTV::Terminate();
+  PlatformRemoteAppleWatch::Terminate();
 #endif
 
 #if defined(__FreeBSD__)
-    ProcessFreeBSD::Terminate();
+  ProcessFreeBSD::Terminate();
 #endif
-    Debugger::SettingsTerminate();
+  Debugger::SettingsTerminate();
 
-    platform_gdb_server::PlatformRemoteGDBServer::Terminate();
-    process_gdb_remote::ProcessGDBRemote::Terminate();
-    StructuredDataDarwinLog::Terminate();
+  platform_gdb_server::PlatformRemoteGDBServer::Terminate();
+  process_gdb_remote::ProcessGDBRemote::Terminate();
+  StructuredDataDarwinLog::Terminate();
 
-    DynamicLoaderMacOSXDYLD::Terminate();
-    DynamicLoaderMacOS::Terminate();
-    DynamicLoaderPOSIXDYLD::Terminate();
-    DynamicLoaderStatic::Terminate();
-    DynamicLoaderWindowsDYLD::Terminate();
+  DynamicLoaderMacOSXDYLD::Terminate();
+  DynamicLoaderMacOS::Terminate();
+  DynamicLoaderPOSIXDYLD::Terminate();
+  DynamicLoaderStatic::Terminate();
+  DynamicLoaderWindowsDYLD::Terminate();
 
 #ifndef LLDB_DISABLE_PYTHON
-    OperatingSystemPython::Terminate();
+  OperatingSystemPython::Terminate();
 #endif
-    OperatingSystemGo::Terminate();
+  OperatingSystemGo::Terminate();
 
-    platform_freebsd::PlatformFreeBSD::Terminate();
-    platform_linux::PlatformLinux::Terminate();
-    platform_netbsd::PlatformNetBSD::Terminate();
-    PlatformWindows::Terminate();
-    PlatformKalimba::Terminate();
-    platform_android::PlatformAndroid::Terminate();
-    PlatformMacOSX::Terminate();
-    PlatformRemoteiOS::Terminate();
+  platform_freebsd::PlatformFreeBSD::Terminate();
+  platform_linux::PlatformLinux::Terminate();
+  platform_netbsd::PlatformNetBSD::Terminate();
+  PlatformWindows::Terminate();
+  PlatformKalimba::Terminate();
+  platform_android::PlatformAndroid::Terminate();
+  PlatformMacOSX::Terminate();
+  PlatformRemoteiOS::Terminate();
 #if defined(__APPLE__)
-    PlatformiOSSimulator::Terminate();
-    PlatformDarwinKernel::Terminate();
+  PlatformiOSSimulator::Terminate();
+  PlatformDarwinKernel::Terminate();
 #endif
 
-    // Now shutdown the common parts, in reverse order.
-    SystemInitializerCommon::Terminate();
+  // Now shutdown the common parts, in reverse order.
+  SystemInitializerCommon::Terminate();
 }
