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