130fdc8d8SChris Lattner //===-- ScriptInterpreter.cpp -----------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 630fdc8d8SChris Lattner // 730fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 830fdc8d8SChris Lattner 930fdc8d8SChris Lattner #include "lldb/Interpreter/ScriptInterpreter.h" 1030fdc8d8SChris Lattner 1130fdc8d8SChris Lattner #include <stdio.h> 12b9c1b51eSKate Stone #include <stdlib.h> 13b9c1b51eSKate Stone #include <string> 1430fdc8d8SChris Lattner 1524ae6294SZachary Turner #include "lldb/Host/PseudoTerminal.h" 1630fdc8d8SChris Lattner #include "lldb/Interpreter/CommandReturnObject.h" 1797206d57SZachary Turner #include "lldb/Utility/Status.h" 18bf9a7730SZachary Turner #include "lldb/Utility/Stream.h" 19573ab909SZachary Turner #include "lldb/Utility/StringList.h" 2030fdc8d8SChris Lattner 2130fdc8d8SChris Lattner using namespace lldb; 2230fdc8d8SChris Lattner using namespace lldb_private; 2330fdc8d8SChris Lattner 24*8d1fb843SJonas Devlieghere ScriptInterpreter::ScriptInterpreter(Debugger &debugger, 25b9c1b51eSKate Stone lldb::ScriptLanguage script_lang) 26*8d1fb843SJonas Devlieghere : m_debugger(debugger), m_script_lang(script_lang) {} 2730fdc8d8SChris Lattner 28b9c1b51eSKate Stone ScriptInterpreter::~ScriptInterpreter() {} 2930fdc8d8SChris Lattner 30b9c1b51eSKate Stone void ScriptInterpreter::CollectDataForBreakpointCommandCallback( 31b5796cb4SJim Ingham std::vector<BreakpointOptions *> &bp_options_vec, 32b9c1b51eSKate Stone CommandReturnObject &result) { 3330fdc8d8SChris Lattner result.SetStatus(eReturnStatusFailed); 34b9c1b51eSKate Stone result.AppendError( 35b9c1b51eSKate Stone "ScriptInterpreter::GetScriptCommands(StringList &) is not implemented."); 3630fdc8d8SChris Lattner } 3730fdc8d8SChris Lattner 38b9c1b51eSKate Stone void ScriptInterpreter::CollectDataForWatchpointCommandCallback( 39b9c1b51eSKate Stone WatchpointOptions *bp_options, CommandReturnObject &result) { 40e9a5627eSJohnny Chen result.SetStatus(eReturnStatusFailed); 41b9c1b51eSKate Stone result.AppendError( 42b9c1b51eSKate Stone "ScriptInterpreter::GetScriptCommands(StringList &) is not implemented."); 43e9a5627eSJohnny Chen } 44e9a5627eSJohnny Chen 45b9c1b51eSKate Stone std::string ScriptInterpreter::LanguageToString(lldb::ScriptLanguage language) { 463df9a8dfSCaroline Tice std::string return_value; 4730fdc8d8SChris Lattner 48b9c1b51eSKate Stone switch (language) { 493df9a8dfSCaroline Tice case eScriptLanguageNone: 503df9a8dfSCaroline Tice return_value = "None"; 513df9a8dfSCaroline Tice break; 523df9a8dfSCaroline Tice case eScriptLanguagePython: 533df9a8dfSCaroline Tice return_value = "Python"; 543df9a8dfSCaroline Tice break; 55f7e07256SJim Ingham case eScriptLanguageUnknown: 56f7e07256SJim Ingham return_value = "Unknown"; 57f7e07256SJim Ingham break; 583df9a8dfSCaroline Tice } 593df9a8dfSCaroline Tice 603df9a8dfSCaroline Tice return return_value; 613df9a8dfSCaroline Tice } 622f88aadfSCaroline Tice 63f7e07256SJim Ingham lldb::ScriptLanguage 64f7e07256SJim Ingham ScriptInterpreter::StringToLanguage(const llvm::StringRef &language) { 65f7e07256SJim Ingham if (language.equals_lower(LanguageToString(eScriptLanguageNone))) 66f7e07256SJim Ingham return eScriptLanguageNone; 6745188dd9SDavide Italiano if (language.equals_lower(LanguageToString(eScriptLanguagePython))) 68f7e07256SJim Ingham return eScriptLanguagePython; 69f7e07256SJim Ingham return eScriptLanguageUnknown; 70f7e07256SJim Ingham } 71f7e07256SJim Ingham 7297206d57SZachary Turner Status ScriptInterpreter::SetBreakpointCommandCallback( 73b9c1b51eSKate Stone std::vector<BreakpointOptions *> &bp_options_vec, 74b9c1b51eSKate Stone const char *callback_text) { 7597206d57SZachary Turner Status return_error; 76b9c1b51eSKate Stone for (BreakpointOptions *bp_options : bp_options_vec) { 77b5796cb4SJim Ingham return_error = SetBreakpointCommandCallback(bp_options, callback_text); 78b5796cb4SJim Ingham if (return_error.Success()) 79b5796cb4SJim Ingham break; 80b5796cb4SJim Ingham } 81b5796cb4SJim Ingham return return_error; 82b5796cb4SJim Ingham } 83b5796cb4SJim Ingham 84b9c1b51eSKate Stone void ScriptInterpreter::SetBreakpointCommandCallbackFunction( 85b9c1b51eSKate Stone std::vector<BreakpointOptions *> &bp_options_vec, 86b9c1b51eSKate Stone const char *function_name) { 87b9c1b51eSKate Stone for (BreakpointOptions *bp_options : bp_options_vec) { 88b5796cb4SJim Ingham SetBreakpointCommandCallbackFunction(bp_options, function_name); 89b5796cb4SJim Ingham } 90b5796cb4SJim Ingham } 91b5796cb4SJim Ingham 927b0992d9SGreg Clayton std::unique_ptr<ScriptInterpreterLocker> 93b9c1b51eSKate Stone ScriptInterpreter::AcquireInterpreterLock() { 94b9c1b51eSKate Stone return std::unique_ptr<ScriptInterpreterLocker>( 95b9c1b51eSKate Stone new ScriptInterpreterLocker()); 96360cc318SEnrico Granata } 97