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