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 248d1fb843SJonas Devlieghere ScriptInterpreter::ScriptInterpreter(Debugger &debugger, 25b9c1b51eSKate Stone lldb::ScriptLanguage script_lang) 268d1fb843SJonas 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( 35ba0eb7b6SJonas Devlieghere "This script interpreter does not support breakpoint callbacks."); 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( 42ba0eb7b6SJonas Devlieghere "This script interpreter does not support watchpoint callbacks."); 43e9a5627eSJohnny Chen } 44e9a5627eSJohnny Chen 45*bd5c8d16SJonas Devlieghere bool ScriptInterpreter::LoadScriptingModule( 46*bd5c8d16SJonas Devlieghere const char *filename, bool can_reload, bool init_session, 47*bd5c8d16SJonas Devlieghere lldb_private::Status &error, StructuredData::ObjectSP *module_sp) { 48*bd5c8d16SJonas Devlieghere error.SetErrorString( 49*bd5c8d16SJonas Devlieghere "This script interpreter does not support importing modules."); 50*bd5c8d16SJonas Devlieghere return false; 51*bd5c8d16SJonas Devlieghere } 52*bd5c8d16SJonas Devlieghere 53b9c1b51eSKate Stone std::string ScriptInterpreter::LanguageToString(lldb::ScriptLanguage language) { 54b9c1b51eSKate Stone switch (language) { 553df9a8dfSCaroline Tice case eScriptLanguageNone: 56acdda134SJonas Devlieghere return "None"; 573df9a8dfSCaroline Tice case eScriptLanguagePython: 58acdda134SJonas Devlieghere return "Python"; 59acdda134SJonas Devlieghere case eScriptLanguageLua: 60acdda134SJonas Devlieghere return "Lua"; 61f7e07256SJim Ingham case eScriptLanguageUnknown: 62acdda134SJonas Devlieghere return "Unknown"; 633df9a8dfSCaroline Tice } 643df9a8dfSCaroline Tice } 652f88aadfSCaroline Tice 66f7e07256SJim Ingham lldb::ScriptLanguage 67f7e07256SJim Ingham ScriptInterpreter::StringToLanguage(const llvm::StringRef &language) { 68f7e07256SJim Ingham if (language.equals_lower(LanguageToString(eScriptLanguageNone))) 69f7e07256SJim Ingham return eScriptLanguageNone; 7045188dd9SDavide Italiano if (language.equals_lower(LanguageToString(eScriptLanguagePython))) 71f7e07256SJim Ingham return eScriptLanguagePython; 72acdda134SJonas Devlieghere if (language.equals_lower(LanguageToString(eScriptLanguageLua))) 73acdda134SJonas Devlieghere return eScriptLanguageLua; 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 89738af7a6SJim Ingham Status ScriptInterpreter::SetBreakpointCommandCallbackFunction( 90acdda134SJonas Devlieghere std::vector<BreakpointOptions *> &bp_options_vec, const char *function_name, 91738af7a6SJim Ingham StructuredData::ObjectSP extra_args_sp) { 92738af7a6SJim Ingham Status error; 93b9c1b51eSKate Stone for (BreakpointOptions *bp_options : bp_options_vec) { 94738af7a6SJim Ingham error = SetBreakpointCommandCallbackFunction(bp_options, function_name, 95738af7a6SJim Ingham extra_args_sp); 96738af7a6SJim Ingham if (!error.Success()) 97738af7a6SJim Ingham return error; 98b5796cb4SJim Ingham } 99738af7a6SJim Ingham return error; 100b5796cb4SJim Ingham } 101b5796cb4SJim Ingham 1027b0992d9SGreg Clayton std::unique_ptr<ScriptInterpreterLocker> 103b9c1b51eSKate Stone ScriptInterpreter::AcquireInterpreterLock() { 104b9c1b51eSKate Stone return std::unique_ptr<ScriptInterpreterLocker>( 105b9c1b51eSKate Stone new ScriptInterpreterLocker()); 106360cc318SEnrico Granata } 107