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