167de8962SJonas Devlieghere //===-- ScriptInterpreterLua.h ----------------------------------*- C++ -*-===// 267de8962SJonas Devlieghere // 367de8962SJonas Devlieghere // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 467de8962SJonas Devlieghere // See https://llvm.org/LICENSE.txt for license information. 567de8962SJonas Devlieghere // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 667de8962SJonas Devlieghere // 767de8962SJonas Devlieghere //===----------------------------------------------------------------------===// 867de8962SJonas Devlieghere 967de8962SJonas Devlieghere #ifndef liblldb_ScriptInterpreterLua_h_ 1067de8962SJonas Devlieghere #define liblldb_ScriptInterpreterLua_h_ 1167de8962SJonas Devlieghere 12cfb96d84SJim Ingham #include <vector> 13cfb96d84SJim Ingham 14e81ba283SSiger Yang #include "lldb/Breakpoint/WatchpointOptions.h" 15532e4203SPedro Tammela #include "lldb/Core/StructuredDataImpl.h" 1667de8962SJonas Devlieghere #include "lldb/Interpreter/ScriptInterpreter.h" 17a0d7406aSPedro Tammela #include "lldb/Utility/Status.h" 18a0d7406aSPedro Tammela #include "lldb/lldb-enumerations.h" 1967de8962SJonas Devlieghere 2067de8962SJonas Devlieghere namespace lldb_private { 214164be72SJonas Devlieghere class Lua; 2267de8962SJonas Devlieghere class ScriptInterpreterLua : public ScriptInterpreter { 2367de8962SJonas Devlieghere public: 24a0d7406aSPedro Tammela class CommandDataLua : public BreakpointOptions::CommandData { 25a0d7406aSPedro Tammela public: CommandDataLua()26a0d7406aSPedro Tammela CommandDataLua() : BreakpointOptions::CommandData() { 27a0d7406aSPedro Tammela interpreter = lldb::eScriptLanguageLua; 28a0d7406aSPedro Tammela } CommandDataLua(StructuredData::ObjectSP extra_args_sp)29532e4203SPedro Tammela CommandDataLua(StructuredData::ObjectSP extra_args_sp) 30532e4203SPedro Tammela : BreakpointOptions::CommandData(), m_extra_args_sp(extra_args_sp) { 31532e4203SPedro Tammela interpreter = lldb::eScriptLanguageLua; 32532e4203SPedro Tammela } 33532e4203SPedro Tammela StructuredData::ObjectSP m_extra_args_sp; 34a0d7406aSPedro Tammela }; 35a0d7406aSPedro Tammela 3667de8962SJonas Devlieghere ScriptInterpreterLua(Debugger &debugger); 3767de8962SJonas Devlieghere 3867de8962SJonas Devlieghere ~ScriptInterpreterLua() override; 3967de8962SJonas Devlieghere 4067de8962SJonas Devlieghere bool ExecuteOneLine( 4167de8962SJonas Devlieghere llvm::StringRef command, CommandReturnObject *result, 4267de8962SJonas Devlieghere const ExecuteScriptOptions &options = ExecuteScriptOptions()) override; 4367de8962SJonas Devlieghere 4467de8962SJonas Devlieghere void ExecuteInterpreterLoop() override; 4567de8962SJonas Devlieghere 46f9517353SJonas Devlieghere bool LoadScriptingModule(const char *filename, 47f9517353SJonas Devlieghere const LoadScriptOptions &options, 48572b9f46SJonas Devlieghere lldb_private::Status &error, 4900bb397bSJonas Devlieghere StructuredData::ObjectSP *module_sp = nullptr, 5000bb397bSJonas Devlieghere FileSpec extra_search_dir = {}) override; 51572b9f46SJonas Devlieghere 52bbef51ebSLawrence D'Anna StructuredData::DictionarySP GetInterpreterInfo() override; 53bbef51ebSLawrence D'Anna 5467de8962SJonas Devlieghere // Static Functions 5567de8962SJonas Devlieghere static void Initialize(); 5667de8962SJonas Devlieghere 5767de8962SJonas Devlieghere static void Terminate(); 5867de8962SJonas Devlieghere 5967de8962SJonas Devlieghere static lldb::ScriptInterpreterSP CreateInstance(Debugger &debugger); 6067de8962SJonas Devlieghere GetPluginNameStatic()615f4980f0SPavel Labath static llvm::StringRef GetPluginNameStatic() { return "script-lua"; } 6267de8962SJonas Devlieghere 635f4980f0SPavel Labath static llvm::StringRef GetPluginDescriptionStatic(); 6467de8962SJonas Devlieghere 65a0d7406aSPedro Tammela static bool BreakpointCallbackFunction(void *baton, 66a0d7406aSPedro Tammela StoppointCallbackContext *context, 67a0d7406aSPedro Tammela lldb::user_id_t break_id, 68a0d7406aSPedro Tammela lldb::user_id_t break_loc_id); 69a0d7406aSPedro Tammela 70e81ba283SSiger Yang static bool WatchpointCallbackFunction(void *baton, 71e81ba283SSiger Yang StoppointCallbackContext *context, 72e81ba283SSiger Yang lldb::user_id_t watch_id); 73e81ba283SSiger Yang 7467de8962SJonas Devlieghere // PluginInterface protocol GetPluginName()755f4980f0SPavel Labath llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 7667de8962SJonas Devlieghere 774164be72SJonas Devlieghere Lua &GetLua(); 784164be72SJonas Devlieghere 7945c971f7SJonas Devlieghere llvm::Error EnterSession(lldb::user_id_t debugger_id); 8045c971f7SJonas Devlieghere llvm::Error LeaveSession(); 8145c971f7SJonas Devlieghere 82d853bd7aSPedro Tammela void CollectDataForBreakpointCommandCallback( 83cfb96d84SJim Ingham std::vector<std::reference_wrapper<BreakpointOptions>> &bp_options_vec, 84d853bd7aSPedro Tammela CommandReturnObject &result) override; 85d853bd7aSPedro Tammela 86e81ba283SSiger Yang void 87e81ba283SSiger Yang CollectDataForWatchpointCommandCallback(WatchpointOptions *wp_options, 88e81ba283SSiger Yang CommandReturnObject &result) override; 89e81ba283SSiger Yang 90cfb96d84SJim Ingham Status SetBreakpointCommandCallback(BreakpointOptions &bp_options, 919a9fce1fSMed Ismail Bennani const char *command_body_text, 9235d17c17SMed Ismail Bennani bool is_callback) override; 93a0d7406aSPedro Tammela 94e81ba283SSiger Yang void SetWatchpointCommandCallback(WatchpointOptions *wp_options, 95*ab81fc29SMed Ismail Bennani const char *command_body_text, 96*ab81fc29SMed Ismail Bennani bool is_callback) override; 97e81ba283SSiger Yang 98532e4203SPedro Tammela Status SetBreakpointCommandCallbackFunction( 99cfb96d84SJim Ingham BreakpointOptions &bp_options, const char *function_name, 100532e4203SPedro Tammela StructuredData::ObjectSP extra_args_sp) override; 101532e4203SPedro Tammela 1024164be72SJonas Devlieghere private: 1034164be72SJonas Devlieghere std::unique_ptr<Lua> m_lua; 10445c971f7SJonas Devlieghere bool m_session_is_active = false; 105532e4203SPedro Tammela 106cfb96d84SJim Ingham Status RegisterBreakpointCallback(BreakpointOptions &bp_options, 107532e4203SPedro Tammela const char *command_body_text, 108532e4203SPedro Tammela StructuredData::ObjectSP extra_args_sp); 109e81ba283SSiger Yang 110e81ba283SSiger Yang Status RegisterWatchpointCallback(WatchpointOptions *wp_options, 111e81ba283SSiger Yang const char *command_body_text, 112e81ba283SSiger Yang StructuredData::ObjectSP extra_args_sp); 11367de8962SJonas Devlieghere }; 11467de8962SJonas Devlieghere 11567de8962SJonas Devlieghere } // namespace lldb_private 11667de8962SJonas Devlieghere 11767de8962SJonas Devlieghere #endif // liblldb_ScriptInterpreterLua_h_ 118