CommandObjectScript.cpp revision 254721
1254721Semaste//===-- CommandObjectScript.cpp ---------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#include "lldb/lldb-python.h"
11254721Semaste
12254721Semaste#include "CommandObjectScript.h"
13254721Semaste
14254721Semaste// C Includes
15254721Semaste// C++ Includes
16254721Semaste// Other libraries and framework includes
17254721Semaste// Project includes
18254721Semaste
19254721Semaste#include "lldb/Core/Debugger.h"
20254721Semaste
21254721Semaste#include "lldb/DataFormatters/DataVisualization.h"
22254721Semaste
23254721Semaste#include "lldb/Interpreter/Args.h"
24254721Semaste#include "lldb/Interpreter/CommandInterpreter.h"
25254721Semaste#include "lldb/Interpreter/CommandReturnObject.h"
26254721Semaste#include "lldb/Interpreter/ScriptInterpreter.h"
27254721Semaste
28254721Semasteusing namespace lldb;
29254721Semasteusing namespace lldb_private;
30254721Semaste
31254721Semaste//-------------------------------------------------------------------------
32254721Semaste// CommandObjectScript
33254721Semaste//-------------------------------------------------------------------------
34254721Semaste
35254721SemasteCommandObjectScript::CommandObjectScript (CommandInterpreter &interpreter, ScriptLanguage script_lang) :
36254721Semaste    CommandObjectRaw (interpreter,
37254721Semaste                      "script",
38254721Semaste                      "Pass an expression to the script interpreter for evaluation and return the results. Drop into the interactive interpreter if no expression is given.",
39254721Semaste                      "script [<script-expression-for-evaluation>]")
40254721Semaste{
41254721Semaste}
42254721Semaste
43254721SemasteCommandObjectScript::~CommandObjectScript ()
44254721Semaste{
45254721Semaste}
46254721Semaste
47254721Semastebool
48254721SemasteCommandObjectScript::DoExecute
49254721Semaste(
50254721Semaste    const char *command,
51254721Semaste    CommandReturnObject &result
52254721Semaste)
53254721Semaste{
54254721Semaste#ifdef LLDB_DISABLE_PYTHON
55254721Semaste    // if we ever support languages other than Python this simple #ifdef won't work
56254721Semaste    result.AppendError("your copy of LLDB does not support scripting.");
57254721Semaste    result.SetStatus (eReturnStatusFailed);
58254721Semaste    return false;
59254721Semaste#else
60254721Semaste    if (m_interpreter.GetDebugger().GetScriptLanguage() == lldb::eScriptLanguageNone)
61254721Semaste    {
62254721Semaste        result.AppendError("the script-lang setting is set to none - scripting not available");
63254721Semaste        result.SetStatus (eReturnStatusFailed);
64254721Semaste        return false;
65254721Semaste    }
66254721Semaste
67254721Semaste    ScriptInterpreter *script_interpreter = m_interpreter.GetScriptInterpreter ();
68254721Semaste
69254721Semaste    if (script_interpreter == NULL)
70254721Semaste    {
71254721Semaste        result.AppendError("no script interpreter");
72254721Semaste        result.SetStatus (eReturnStatusFailed);
73254721Semaste        return false;
74254721Semaste    }
75254721Semaste
76254721Semaste    DataVisualization::ForceUpdate(); // script might change Python code we use for formatting.. make sure we keep up to date with it
77254721Semaste
78254721Semaste    if (command == NULL || command[0] == '\0')
79254721Semaste    {
80254721Semaste        script_interpreter->ExecuteInterpreterLoop ();
81254721Semaste        result.SetStatus (eReturnStatusSuccessFinishNoResult);
82254721Semaste        return result.Succeeded();
83254721Semaste    }
84254721Semaste
85254721Semaste    // We can do better when reporting the status of one-liner script execution.
86254721Semaste    if (script_interpreter->ExecuteOneLine (command, &result))
87254721Semaste        result.SetStatus(eReturnStatusSuccessFinishNoResult);
88254721Semaste    else
89254721Semaste        result.SetStatus(eReturnStatusFailed);
90254721Semaste
91254721Semaste    return result.Succeeded();
92254721Semaste#endif
93254721Semaste}
94