We can do better when reporting the status of one-liner script execution.

Change the prototype of ScriptInterpreter::ExecuteOneLine() to return bool
instead of void and take one additional parameter as CommandReturnObject *.

Propagate the status of one-liner execution back appropriately.


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@109899 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Interpreter/CommandObjectScript.cpp b/source/Interpreter/CommandObjectScript.cpp
index 3a7362d..1494065 100644
--- a/source/Interpreter/CommandObjectScript.cpp
+++ b/source/Interpreter/CommandObjectScript.cpp
@@ -56,11 +56,18 @@
         result.SetStatus (eReturnStatusFailed);
     }
 
-    if (command == NULL || command[0] == '\0')
+    if (command == NULL || command[0] == '\0') {
         script_interpreter->ExecuteInterpreterLoop (interpreter);
+        result.SetStatus (eReturnStatusSuccessFinishNoResult);
+        return result.Succeeded();
+    }
+
+    // We can do better when reporting the status of one-liner script execution.
+    if (script_interpreter->ExecuteOneLine (interpreter, command, &result))
+        result.SetStatus(eReturnStatusSuccessFinishNoResult);
     else
-        script_interpreter->ExecuteOneLine (interpreter, command); 
-    result.SetStatus (eReturnStatusSuccessFinishNoResult);
+        result.SetStatus(eReturnStatusFailed);
+
     return result.Succeeded();
 }
 
diff --git a/source/Interpreter/ScriptInterpreterNone.cpp b/source/Interpreter/ScriptInterpreterNone.cpp
index c9bd282..dad70aa 100644
--- a/source/Interpreter/ScriptInterpreterNone.cpp
+++ b/source/Interpreter/ScriptInterpreterNone.cpp
@@ -25,10 +25,11 @@
 {
 }
 
-void
-ScriptInterpreterNone::ExecuteOneLine (CommandInterpreter &interpreter, const char *command)
+bool
+ScriptInterpreterNone::ExecuteOneLine (CommandInterpreter &interpreter, const char *command, CommandReturnObject *)
 {
     interpreter.GetDebugger().GetErrorStream().PutCString ("error: there is no embedded script interpreter in this mode.\n");
+    return false;
 }
 
 void
diff --git a/source/Interpreter/ScriptInterpreterPython.cpp b/source/Interpreter/ScriptInterpreterPython.cpp
index aac3dd8..3d0dafa 100644
--- a/source/Interpreter/ScriptInterpreterPython.cpp
+++ b/source/Interpreter/ScriptInterpreterPython.cpp
@@ -258,17 +258,28 @@
     Py_Finalize ();
 }
 
-void
-ScriptInterpreterPython::ExecuteOneLine (CommandInterpreter &interpreter, const char *command)
+bool
+ScriptInterpreterPython::ExecuteOneLine (CommandInterpreter &interpreter,
+                                         const char *command,
+                                         CommandReturnObject *result = 0)
 {
     if (command)
     {
         int success;
 
         success = PyRun_SimpleString (command);
-        if (success != 0)
-            interpreter.GetDebugger().GetErrorStream().Printf ("error: python failed attempting to evaluate '%s'\n", command);
+        if (success == 0)
+            return true;
+
+        // The one-liner failed.  Append the error message.
+        if (result)
+            result->AppendErrorWithFormat ("python failed attempting to evaluate '%s'\n", command);
+        return false;
     }
+
+    if (result)
+        result->AppendError ("empty command passed to python\n");
+    return false;
 }