124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ScriptInterpreter.cpp -----------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h"
11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/ScriptInterpreter.h"
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <string>
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <stdlib.h>
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <stdio.h>
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Error.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StringList.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandReturnObject.h"
220aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice#include "lldb/Interpreter/ScriptInterpreterPython.h"
23dea5ea78ef9bf371a0d19590c6b7c6989cba9a89Jason Molenda#include "lldb/Utility/PseudoTerminal.h"
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
280aa2e55f0e9422405ad33675adc1e35044537adbCaroline TiceScriptInterpreter::ScriptInterpreter (CommandInterpreter &interpreter, lldb::ScriptLanguage script_lang) :
29238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    m_interpreter (interpreter),
30177bc682e2b45354e8b0753e705dc84255c42173Greg Clayton    m_script_lang (script_lang)
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScriptInterpreter::~ScriptInterpreter ()
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
380aa2e55f0e9422405ad33675adc1e35044537adbCaroline TiceCommandInterpreter &
390aa2e55f0e9422405ad33675adc1e35044537adbCaroline TiceScriptInterpreter::GetCommandInterpreter ()
400aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice{
410aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice    return m_interpreter;
420aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice}
430aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerScriptInterpreter::CollectDataForBreakpointCommandCallback
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner(
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    BreakpointOptions *bp_options,
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CommandReturnObject &result
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner)
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    result.SetStatus (eReturnStatusFailed);
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    result.AppendError ("ScriptInterpreter::GetScriptCommands(StringList &) is not implemented.");
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
55f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chenvoid
56f3ec4617297810223deb545cb68214ca4dd8009cJohnny ChenScriptInterpreter::CollectDataForWatchpointCommandCallback
57f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen(
58f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen    WatchpointOptions *bp_options,
59f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen    CommandReturnObject &result
60f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen)
61f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen{
62f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen    result.SetStatus (eReturnStatusFailed);
63f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen    result.AppendError ("ScriptInterpreter::GetScriptCommands(StringList &) is not implemented.");
64f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen}
65f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen
666e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Ticestd::string
676e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline TiceScriptInterpreter::LanguageToString (lldb::ScriptLanguage language)
686e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice{
696e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    std::string return_value;
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
716e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    switch (language)
726e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    {
736e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice        case eScriptLanguageNone:
746e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice            return_value = "None";
756e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice            break;
766e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice        case eScriptLanguagePython:
776e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice            return_value = "Python";
786e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice            break;
796e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    }
806e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice
816e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    return return_value;
826e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice}
830aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice
84102b2c2681c9a830afe25bfea35557421905e42cGreg Claytonstd::unique_ptr<ScriptInterpreterLocker>
851414aba4ae30f89c2513bdbbb56c281cec014902Enrico GranataScriptInterpreter::AcquireInterpreterLock ()
861414aba4ae30f89c2513bdbbb56c281cec014902Enrico Granata{
87102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    return std::unique_ptr<ScriptInterpreterLocker>(new ScriptInterpreterLocker());
881414aba4ae30f89c2513bdbbb56c281cec014902Enrico Granata}
891414aba4ae30f89c2513bdbbb56c281cec014902Enrico Granata
900aa2e55f0e9422405ad33675adc1e35044537adbCaroline Ticevoid
911328b1410eb0f5e03c3b3ee302e9adca3e1b0361Enrico GranataScriptInterpreter::InitializeInterpreter (SWIGInitCallback python_swig_init_callback)
920aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice{
933e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton#ifndef LLDB_DISABLE_PYTHON
941328b1410eb0f5e03c3b3ee302e9adca3e1b0361Enrico Granata    ScriptInterpreterPython::InitializeInterpreter (python_swig_init_callback);
953e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton#endif // #ifndef LLDB_DISABLE_PYTHON
960aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice}
970aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice
980aa2e55f0e9422405ad33675adc1e35044537adbCaroline Ticevoid
99e86cbb9ef128db87cf904e330b2edfc15566bacdGreg ClaytonScriptInterpreter::TerminateInterpreter ()
1000aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice{
1013e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton#ifndef LLDB_DISABLE_PYTHON
102e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Clayton    ScriptInterpreterPython::TerminateInterpreter ();
1033e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton#endif // #ifndef LLDB_DISABLE_PYTHON
1040aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice}
1050aa2e55f0e9422405ad33675adc1e35044537adbCaroline Tice
106