130fdc8d8SChris Lattner //===-- ScriptInterpreter.cpp -----------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 1030fdc8d8SChris Lattner #include "lldb/Interpreter/ScriptInterpreter.h" 1130fdc8d8SChris Lattner 1230fdc8d8SChris Lattner #include <stdio.h> 13b9c1b51eSKate Stone #include <stdlib.h> 14b9c1b51eSKate Stone #include <string> 1530fdc8d8SChris Lattner 1624ae6294SZachary Turner #include "lldb/Host/PseudoTerminal.h" 1730fdc8d8SChris Lattner #include "lldb/Interpreter/CommandReturnObject.h" 1897206d57SZachary Turner #include "lldb/Utility/Status.h" 19bf9a7730SZachary Turner #include "lldb/Utility/Stream.h" 20573ab909SZachary Turner #include "lldb/Utility/StringList.h" 2130fdc8d8SChris Lattner 2230fdc8d8SChris Lattner using namespace lldb; 2330fdc8d8SChris Lattner using namespace lldb_private; 2430fdc8d8SChris Lattner 25b9c1b51eSKate Stone ScriptInterpreter::ScriptInterpreter(CommandInterpreter &interpreter, 26b9c1b51eSKate Stone lldb::ScriptLanguage script_lang) 27b9c1b51eSKate Stone : m_interpreter(interpreter), m_script_lang(script_lang) {} 2830fdc8d8SChris Lattner 29b9c1b51eSKate Stone ScriptInterpreter::~ScriptInterpreter() {} 3030fdc8d8SChris Lattner 31b9c1b51eSKate Stone CommandInterpreter &ScriptInterpreter::GetCommandInterpreter() { 322f88aadfSCaroline Tice return m_interpreter; 332f88aadfSCaroline Tice } 342f88aadfSCaroline Tice 35b9c1b51eSKate Stone void ScriptInterpreter::CollectDataForBreakpointCommandCallback( 36b5796cb4SJim Ingham std::vector<BreakpointOptions *> &bp_options_vec, 37b9c1b51eSKate Stone CommandReturnObject &result) { 3830fdc8d8SChris Lattner result.SetStatus(eReturnStatusFailed); 39b9c1b51eSKate Stone result.AppendError( 40b9c1b51eSKate Stone "ScriptInterpreter::GetScriptCommands(StringList &) is not implemented."); 4130fdc8d8SChris Lattner } 4230fdc8d8SChris Lattner 43b9c1b51eSKate Stone void ScriptInterpreter::CollectDataForWatchpointCommandCallback( 44b9c1b51eSKate Stone WatchpointOptions *bp_options, CommandReturnObject &result) { 45e9a5627eSJohnny Chen result.SetStatus(eReturnStatusFailed); 46b9c1b51eSKate Stone result.AppendError( 47b9c1b51eSKate Stone "ScriptInterpreter::GetScriptCommands(StringList &) is not implemented."); 48e9a5627eSJohnny Chen } 49e9a5627eSJohnny Chen 50b9c1b51eSKate Stone std::string ScriptInterpreter::LanguageToString(lldb::ScriptLanguage language) { 513df9a8dfSCaroline Tice std::string return_value; 5230fdc8d8SChris Lattner 53b9c1b51eSKate Stone switch (language) { 543df9a8dfSCaroline Tice case eScriptLanguageNone: 553df9a8dfSCaroline Tice return_value = "None"; 563df9a8dfSCaroline Tice break; 573df9a8dfSCaroline Tice case eScriptLanguagePython: 583df9a8dfSCaroline Tice return_value = "Python"; 593df9a8dfSCaroline Tice break; 60f7e07256SJim Ingham case eScriptLanguageUnknown: 61f7e07256SJim Ingham return_value = "Unknown"; 62f7e07256SJim Ingham break; 633df9a8dfSCaroline Tice } 643df9a8dfSCaroline Tice 653df9a8dfSCaroline Tice return return_value; 663df9a8dfSCaroline Tice } 672f88aadfSCaroline Tice 68f7e07256SJim Ingham lldb::ScriptLanguage 69f7e07256SJim Ingham ScriptInterpreter::StringToLanguage(const llvm::StringRef &language) { 70f7e07256SJim Ingham if (language.equals_lower(LanguageToString(eScriptLanguageNone))) 71f7e07256SJim Ingham return eScriptLanguageNone; 72*45188dd9SDavide Italiano if (language.equals_lower(LanguageToString(eScriptLanguagePython))) 73f7e07256SJim Ingham return eScriptLanguagePython; 74f7e07256SJim Ingham return eScriptLanguageUnknown; 75f7e07256SJim Ingham } 76f7e07256SJim Ingham 7797206d57SZachary Turner Status ScriptInterpreter::SetBreakpointCommandCallback( 78b9c1b51eSKate Stone std::vector<BreakpointOptions *> &bp_options_vec, 79b9c1b51eSKate Stone const char *callback_text) { 8097206d57SZachary Turner Status return_error; 81b9c1b51eSKate Stone for (BreakpointOptions *bp_options : bp_options_vec) { 82b5796cb4SJim Ingham return_error = SetBreakpointCommandCallback(bp_options, callback_text); 83b5796cb4SJim Ingham if (return_error.Success()) 84b5796cb4SJim Ingham break; 85b5796cb4SJim Ingham } 86b5796cb4SJim Ingham return return_error; 87b5796cb4SJim Ingham } 88b5796cb4SJim Ingham 89b9c1b51eSKate Stone void ScriptInterpreter::SetBreakpointCommandCallbackFunction( 90b9c1b51eSKate Stone std::vector<BreakpointOptions *> &bp_options_vec, 91b9c1b51eSKate Stone const char *function_name) { 92b9c1b51eSKate Stone for (BreakpointOptions *bp_options : bp_options_vec) { 93b5796cb4SJim Ingham SetBreakpointCommandCallbackFunction(bp_options, function_name); 94b5796cb4SJim Ingham } 95b5796cb4SJim Ingham } 96b5796cb4SJim Ingham 977b0992d9SGreg Clayton std::unique_ptr<ScriptInterpreterLocker> 98b9c1b51eSKate Stone ScriptInterpreter::AcquireInterpreterLock() { 99b9c1b51eSKate Stone return std::unique_ptr<ScriptInterpreterLocker>( 100b9c1b51eSKate Stone new ScriptInterpreterLocker()); 101360cc318SEnrico Granata } 102