1706b4fc4SDimitry Andric //===-- ScriptInterpreterLua.h ----------------------------------*- C++ -*-===// 2706b4fc4SDimitry Andric // 3706b4fc4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4706b4fc4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5706b4fc4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6706b4fc4SDimitry Andric // 7706b4fc4SDimitry Andric //===----------------------------------------------------------------------===// 8706b4fc4SDimitry Andric 9706b4fc4SDimitry Andric #ifndef liblldb_ScriptInterpreterLua_h_ 10706b4fc4SDimitry Andric #define liblldb_ScriptInterpreterLua_h_ 11706b4fc4SDimitry Andric 12344a3780SDimitry Andric #include <vector> 13344a3780SDimitry Andric 14344a3780SDimitry Andric #include "lldb/Breakpoint/WatchpointOptions.h" 15b60736ecSDimitry Andric #include "lldb/Core/StructuredDataImpl.h" 16706b4fc4SDimitry Andric #include "lldb/Interpreter/ScriptInterpreter.h" 17b60736ecSDimitry Andric #include "lldb/Utility/Status.h" 18b60736ecSDimitry Andric #include "lldb/lldb-enumerations.h" 19706b4fc4SDimitry Andric 20706b4fc4SDimitry Andric namespace lldb_private { 21706b4fc4SDimitry Andric class Lua; 22706b4fc4SDimitry Andric class ScriptInterpreterLua : public ScriptInterpreter { 23706b4fc4SDimitry Andric public: 24b60736ecSDimitry Andric class CommandDataLua : public BreakpointOptions::CommandData { 25b60736ecSDimitry Andric public: CommandDataLua()26b60736ecSDimitry Andric CommandDataLua() : BreakpointOptions::CommandData() { 27b60736ecSDimitry Andric interpreter = lldb::eScriptLanguageLua; 28b60736ecSDimitry Andric } CommandDataLua(StructuredData::ObjectSP extra_args_sp)29b60736ecSDimitry Andric CommandDataLua(StructuredData::ObjectSP extra_args_sp) 30b60736ecSDimitry Andric : BreakpointOptions::CommandData(), m_extra_args_sp(extra_args_sp) { 31b60736ecSDimitry Andric interpreter = lldb::eScriptLanguageLua; 32b60736ecSDimitry Andric } 33b60736ecSDimitry Andric StructuredData::ObjectSP m_extra_args_sp; 34b60736ecSDimitry Andric }; 35b60736ecSDimitry Andric 36706b4fc4SDimitry Andric ScriptInterpreterLua(Debugger &debugger); 37706b4fc4SDimitry Andric 38706b4fc4SDimitry Andric ~ScriptInterpreterLua() override; 39706b4fc4SDimitry Andric 40706b4fc4SDimitry Andric bool ExecuteOneLine( 41706b4fc4SDimitry Andric llvm::StringRef command, CommandReturnObject *result, 42706b4fc4SDimitry Andric const ExecuteScriptOptions &options = ExecuteScriptOptions()) override; 43706b4fc4SDimitry Andric 44706b4fc4SDimitry Andric void ExecuteInterpreterLoop() override; 45706b4fc4SDimitry Andric 46344a3780SDimitry Andric bool LoadScriptingModule(const char *filename, 47344a3780SDimitry Andric const LoadScriptOptions &options, 48706b4fc4SDimitry Andric lldb_private::Status &error, 49b60736ecSDimitry Andric StructuredData::ObjectSP *module_sp = nullptr, 50b60736ecSDimitry Andric FileSpec extra_search_dir = {}) override; 51706b4fc4SDimitry Andric 52c0981da4SDimitry Andric StructuredData::DictionarySP GetInterpreterInfo() override; 53c0981da4SDimitry Andric 54706b4fc4SDimitry Andric // Static Functions 55706b4fc4SDimitry Andric static void Initialize(); 56706b4fc4SDimitry Andric 57706b4fc4SDimitry Andric static void Terminate(); 58706b4fc4SDimitry Andric 59706b4fc4SDimitry Andric static lldb::ScriptInterpreterSP CreateInstance(Debugger &debugger); 60706b4fc4SDimitry Andric GetPluginNameStatic()61c0981da4SDimitry Andric static llvm::StringRef GetPluginNameStatic() { return "script-lua"; } 62706b4fc4SDimitry Andric 63c0981da4SDimitry Andric static llvm::StringRef GetPluginDescriptionStatic(); 64706b4fc4SDimitry Andric 65b60736ecSDimitry Andric static bool BreakpointCallbackFunction(void *baton, 66b60736ecSDimitry Andric StoppointCallbackContext *context, 67b60736ecSDimitry Andric lldb::user_id_t break_id, 68b60736ecSDimitry Andric lldb::user_id_t break_loc_id); 69b60736ecSDimitry Andric 70344a3780SDimitry Andric static bool WatchpointCallbackFunction(void *baton, 71344a3780SDimitry Andric StoppointCallbackContext *context, 72344a3780SDimitry Andric lldb::user_id_t watch_id); 73344a3780SDimitry Andric 74706b4fc4SDimitry Andric // PluginInterface protocol GetPluginName()75c0981da4SDimitry Andric llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 76706b4fc4SDimitry Andric 77706b4fc4SDimitry Andric Lua &GetLua(); 78706b4fc4SDimitry Andric 79706b4fc4SDimitry Andric llvm::Error EnterSession(lldb::user_id_t debugger_id); 80706b4fc4SDimitry Andric llvm::Error LeaveSession(); 81706b4fc4SDimitry Andric 82b60736ecSDimitry Andric void CollectDataForBreakpointCommandCallback( 83344a3780SDimitry Andric std::vector<std::reference_wrapper<BreakpointOptions>> &bp_options_vec, 84b60736ecSDimitry Andric CommandReturnObject &result) override; 85b60736ecSDimitry Andric 86344a3780SDimitry Andric void 87344a3780SDimitry Andric CollectDataForWatchpointCommandCallback(WatchpointOptions *wp_options, 88344a3780SDimitry Andric CommandReturnObject &result) override; 89344a3780SDimitry Andric 90344a3780SDimitry Andric Status SetBreakpointCommandCallback(BreakpointOptions &bp_options, 917fa27ce4SDimitry Andric const char *command_body_text, 927fa27ce4SDimitry Andric bool is_callback) override; 93344a3780SDimitry Andric 94344a3780SDimitry Andric void SetWatchpointCommandCallback(WatchpointOptions *wp_options, 957fa27ce4SDimitry Andric const char *command_body_text, 967fa27ce4SDimitry Andric bool is_callback) override; 97b60736ecSDimitry Andric 98b60736ecSDimitry Andric Status SetBreakpointCommandCallbackFunction( 99344a3780SDimitry Andric BreakpointOptions &bp_options, const char *function_name, 100b60736ecSDimitry Andric StructuredData::ObjectSP extra_args_sp) override; 101b60736ecSDimitry Andric 102706b4fc4SDimitry Andric private: 103706b4fc4SDimitry Andric std::unique_ptr<Lua> m_lua; 104706b4fc4SDimitry Andric bool m_session_is_active = false; 105b60736ecSDimitry Andric 106344a3780SDimitry Andric Status RegisterBreakpointCallback(BreakpointOptions &bp_options, 107344a3780SDimitry Andric const char *command_body_text, 108344a3780SDimitry Andric StructuredData::ObjectSP extra_args_sp); 109344a3780SDimitry Andric 110344a3780SDimitry Andric Status RegisterWatchpointCallback(WatchpointOptions *wp_options, 111b60736ecSDimitry Andric const char *command_body_text, 112b60736ecSDimitry Andric StructuredData::ObjectSP extra_args_sp); 113706b4fc4SDimitry Andric }; 114706b4fc4SDimitry Andric 115706b4fc4SDimitry Andric } // namespace lldb_private 116706b4fc4SDimitry Andric 117706b4fc4SDimitry Andric #endif // liblldb_ScriptInterpreterLua_h_ 118