blob: 76bfe6e99283a4a7051c170b8fb2bcdfddcd8dc0 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- CommandObjectScript.cpp ---------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "CommandObjectScript.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
Enrico Granata9ae7cef2011-07-24 00:14:56 +000016
Enrico Granata0be2e9b2011-08-22 22:03:47 +000017#include "lldb/Core/DataVisualization.h"
Enrico Granata9ae7cef2011-07-24 00:14:56 +000018#include "lldb/Core/Debugger.h"
Jim Ingham84cdc152010-06-15 19:49:27 +000019#include "lldb/Interpreter/Args.h"
Chris Lattner24943d22010-06-08 16:52:24 +000020
21#include "lldb/Interpreter/CommandReturnObject.h"
22#include "lldb/Interpreter/ScriptInterpreter.h"
Caroline Tice0aa2e552011-01-14 00:29:16 +000023#include "lldb/Interpreter/CommandInterpreter.h"
Chris Lattner24943d22010-06-08 16:52:24 +000024
25using namespace lldb;
26using namespace lldb_private;
27
28//-------------------------------------------------------------------------
29// CommandObjectScript
30//-------------------------------------------------------------------------
31
Greg Clayton238c0a12010-09-18 01:14:36 +000032CommandObjectScript::CommandObjectScript (CommandInterpreter &interpreter, ScriptLanguage script_lang) :
Jim Inghamda26bd22012-06-08 21:56:10 +000033 CommandObjectRaw (interpreter,
34 "script",
35 "Pass an expression to the script interpreter for evaluation and return the results. Drop into the interactive interpreter if no expression is given.",
36 "script [<script-expression-for-evaluation>]"),
Caroline Tice0aa2e552011-01-14 00:29:16 +000037 m_script_lang (script_lang)
Chris Lattner24943d22010-06-08 16:52:24 +000038{
39}
40
41CommandObjectScript::~CommandObjectScript ()
42{
43}
44
45bool
Jim Inghamda26bd22012-06-08 21:56:10 +000046CommandObjectScript::DoExecute
Chris Lattner24943d22010-06-08 16:52:24 +000047(
48 const char *command,
Chris Lattner24943d22010-06-08 16:52:24 +000049 CommandReturnObject &result
50)
51{
Caroline Tice0aa2e552011-01-14 00:29:16 +000052 ScriptInterpreter *script_interpreter = m_interpreter.GetScriptInterpreter ();
Chris Lattner24943d22010-06-08 16:52:24 +000053
54 if (script_interpreter == NULL)
55 {
Greg Clayton5d187e52011-01-08 20:28:42 +000056 result.AppendError("no script interpreter");
Chris Lattner24943d22010-06-08 16:52:24 +000057 result.SetStatus (eReturnStatusFailed);
58 }
59
Enrico Granataf501c592011-08-17 22:13:59 +000060 DataVisualization::ForceUpdate(); // script might change Python code we use for formatting.. make sure we keep up to date with it
Enrico Granata9ae7cef2011-07-24 00:14:56 +000061
Enrico Granata1c617432011-08-18 16:38:26 +000062 if (command == NULL || command[0] == '\0')
63 {
Greg Clayton238c0a12010-09-18 01:14:36 +000064 script_interpreter->ExecuteInterpreterLoop ();
Johnny Chen60dde642010-07-30 22:33:14 +000065 result.SetStatus (eReturnStatusSuccessFinishNoResult);
66 return result.Succeeded();
67 }
68
69 // We can do better when reporting the status of one-liner script execution.
Enrico Granataa1ba3142012-06-07 00:17:18 +000070 if (script_interpreter->ExecuteOneLine (command, &result, true))
Johnny Chen60dde642010-07-30 22:33:14 +000071 result.SetStatus(eReturnStatusSuccessFinishNoResult);
Chris Lattner24943d22010-06-08 16:52:24 +000072 else
Johnny Chen60dde642010-07-30 22:33:14 +000073 result.SetStatus(eReturnStatusFailed);
74
Chris Lattner24943d22010-06-08 16:52:24 +000075 return result.Succeeded();
76}