diff --git a/lldb/source/Interpreter/CommandObjectScript.cpp b/lldb/source/Interpreter/CommandObjectScript.cpp
index e7de490..0891298 100644
--- a/lldb/source/Interpreter/CommandObjectScript.cpp
+++ b/lldb/source/Interpreter/CommandObjectScript.cpp
@@ -30,61 +30,57 @@
 // CommandObjectScript
 //-------------------------------------------------------------------------
 
-CommandObjectScript::CommandObjectScript(CommandInterpreter &interpreter, ScriptLanguage script_lang)
-    : CommandObjectRaw(interpreter, "script", "Invoke the script interpreter with provided code and display any "
-                                              "results.  Start the interactive interpreter if no code is supplied.",
-                       "script [<script-code>]")
-{
-}
+CommandObjectScript::CommandObjectScript(CommandInterpreter &interpreter,
+                                         ScriptLanguage script_lang)
+    : CommandObjectRaw(
+          interpreter, "script",
+          "Invoke the script interpreter with provided code and display any "
+          "results.  Start the interactive interpreter if no code is supplied.",
+          "script [<script-code>]") {}
 
-CommandObjectScript::~CommandObjectScript ()
-{
-}
+CommandObjectScript::~CommandObjectScript() {}
 
-bool
-CommandObjectScript::DoExecute
-(
-    const char *command,
-    CommandReturnObject &result
-)
-{
+bool CommandObjectScript::DoExecute(const char *command,
+                                    CommandReturnObject &result) {
 #ifdef LLDB_DISABLE_PYTHON
-    // if we ever support languages other than Python this simple #ifdef won't work
-    result.AppendError("your copy of LLDB does not support scripting.");
-    result.SetStatus (eReturnStatusFailed);
-    return false;
+  // if we ever support languages other than Python this simple #ifdef won't
+  // work
+  result.AppendError("your copy of LLDB does not support scripting.");
+  result.SetStatus(eReturnStatusFailed);
+  return false;
 #else
-    if (m_interpreter.GetDebugger().GetScriptLanguage() == lldb::eScriptLanguageNone)
-    {
-        result.AppendError("the script-lang setting is set to none - scripting not available");
-        result.SetStatus (eReturnStatusFailed);
-        return false;
-    }
-    
-    ScriptInterpreter *script_interpreter = m_interpreter.GetScriptInterpreter ();
+  if (m_interpreter.GetDebugger().GetScriptLanguage() ==
+      lldb::eScriptLanguageNone) {
+    result.AppendError(
+        "the script-lang setting is set to none - scripting not available");
+    result.SetStatus(eReturnStatusFailed);
+    return false;
+  }
 
-    if (script_interpreter == nullptr)
-    {
-        result.AppendError("no script interpreter");
-        result.SetStatus (eReturnStatusFailed);
-        return false;
-    }
+  ScriptInterpreter *script_interpreter = m_interpreter.GetScriptInterpreter();
 
-    DataVisualization::ForceUpdate(); // script might change Python code we use for formatting.. make sure we keep up to date with it
-    
-    if (command == nullptr || command[0] == '\0')
-    {
-        script_interpreter->ExecuteInterpreterLoop ();
-        result.SetStatus (eReturnStatusSuccessFinishNoResult);
-        return result.Succeeded();
-    }
+  if (script_interpreter == nullptr) {
+    result.AppendError("no script interpreter");
+    result.SetStatus(eReturnStatusFailed);
+    return false;
+  }
 
-    // We can do better when reporting the status of one-liner script execution.
-    if (script_interpreter->ExecuteOneLine (command, &result))
-        result.SetStatus(eReturnStatusSuccessFinishNoResult);
-    else
-        result.SetStatus(eReturnStatusFailed);
+  DataVisualization::ForceUpdate(); // script might change Python code we use
+                                    // for formatting.. make sure we keep up to
+                                    // date with it
 
+  if (command == nullptr || command[0] == '\0') {
+    script_interpreter->ExecuteInterpreterLoop();
+    result.SetStatus(eReturnStatusSuccessFinishNoResult);
     return result.Succeeded();
+  }
+
+  // We can do better when reporting the status of one-liner script execution.
+  if (script_interpreter->ExecuteOneLine(command, &result))
+    result.SetStatus(eReturnStatusSuccessFinishNoResult);
+  else
+    result.SetStatus(eReturnStatusFailed);
+
+  return result.Succeeded();
 #endif
 }
