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 12*cfb96d84SJim Ingham #include <vector> 13*cfb96d84SJim Ingham 14532e4203SPedro Tammela #include "lldb/Core/StructuredDataImpl.h" 1567de8962SJonas Devlieghere #include "lldb/Interpreter/ScriptInterpreter.h" 16a0d7406aSPedro Tammela #include "lldb/Utility/Status.h" 17a0d7406aSPedro Tammela #include "lldb/lldb-enumerations.h" 1867de8962SJonas Devlieghere 1967de8962SJonas Devlieghere namespace lldb_private { 204164be72SJonas Devlieghere class Lua; 2167de8962SJonas Devlieghere class ScriptInterpreterLua : public ScriptInterpreter { 2267de8962SJonas Devlieghere public: 23a0d7406aSPedro Tammela class CommandDataLua : public BreakpointOptions::CommandData { 24a0d7406aSPedro Tammela public: 25a0d7406aSPedro Tammela CommandDataLua() : BreakpointOptions::CommandData() { 26a0d7406aSPedro Tammela interpreter = lldb::eScriptLanguageLua; 27a0d7406aSPedro Tammela } 28532e4203SPedro Tammela CommandDataLua(StructuredData::ObjectSP extra_args_sp) 29532e4203SPedro Tammela : BreakpointOptions::CommandData(), m_extra_args_sp(extra_args_sp) { 30532e4203SPedro Tammela interpreter = lldb::eScriptLanguageLua; 31532e4203SPedro Tammela } 32532e4203SPedro Tammela StructuredData::ObjectSP m_extra_args_sp; 33a0d7406aSPedro Tammela }; 34a0d7406aSPedro Tammela 3567de8962SJonas Devlieghere ScriptInterpreterLua(Debugger &debugger); 3667de8962SJonas Devlieghere 3767de8962SJonas Devlieghere ~ScriptInterpreterLua() override; 3867de8962SJonas Devlieghere 3967de8962SJonas Devlieghere bool ExecuteOneLine( 4067de8962SJonas Devlieghere llvm::StringRef command, CommandReturnObject *result, 4167de8962SJonas Devlieghere const ExecuteScriptOptions &options = ExecuteScriptOptions()) override; 4267de8962SJonas Devlieghere 4367de8962SJonas Devlieghere void ExecuteInterpreterLoop() override; 4467de8962SJonas Devlieghere 4500bb397bSJonas Devlieghere bool LoadScriptingModule(const char *filename, bool init_session, 46572b9f46SJonas Devlieghere lldb_private::Status &error, 4700bb397bSJonas Devlieghere StructuredData::ObjectSP *module_sp = nullptr, 4800bb397bSJonas Devlieghere FileSpec extra_search_dir = {}) override; 49572b9f46SJonas Devlieghere 5067de8962SJonas Devlieghere // Static Functions 5167de8962SJonas Devlieghere static void Initialize(); 5267de8962SJonas Devlieghere 5367de8962SJonas Devlieghere static void Terminate(); 5467de8962SJonas Devlieghere 5567de8962SJonas Devlieghere static lldb::ScriptInterpreterSP CreateInstance(Debugger &debugger); 5667de8962SJonas Devlieghere 5767de8962SJonas Devlieghere static lldb_private::ConstString GetPluginNameStatic(); 5867de8962SJonas Devlieghere 5967de8962SJonas Devlieghere static const char *GetPluginDescriptionStatic(); 6067de8962SJonas Devlieghere 61a0d7406aSPedro Tammela static bool BreakpointCallbackFunction(void *baton, 62a0d7406aSPedro Tammela StoppointCallbackContext *context, 63a0d7406aSPedro Tammela lldb::user_id_t break_id, 64a0d7406aSPedro Tammela lldb::user_id_t break_loc_id); 65a0d7406aSPedro Tammela 6667de8962SJonas Devlieghere // PluginInterface protocol 6767de8962SJonas Devlieghere lldb_private::ConstString GetPluginName() override; 6867de8962SJonas Devlieghere 6967de8962SJonas Devlieghere uint32_t GetPluginVersion() override; 704164be72SJonas Devlieghere 714164be72SJonas Devlieghere Lua &GetLua(); 724164be72SJonas Devlieghere 7345c971f7SJonas Devlieghere llvm::Error EnterSession(lldb::user_id_t debugger_id); 7445c971f7SJonas Devlieghere llvm::Error LeaveSession(); 7545c971f7SJonas Devlieghere 76d853bd7aSPedro Tammela void CollectDataForBreakpointCommandCallback( 77*cfb96d84SJim Ingham std::vector<std::reference_wrapper<BreakpointOptions>> &bp_options_vec, 78d853bd7aSPedro Tammela CommandReturnObject &result) override; 79d853bd7aSPedro Tammela 80*cfb96d84SJim Ingham Status SetBreakpointCommandCallback(BreakpointOptions &bp_options, 81a0d7406aSPedro Tammela const char *command_body_text) override; 82a0d7406aSPedro Tammela 83532e4203SPedro Tammela Status SetBreakpointCommandCallbackFunction( 84*cfb96d84SJim Ingham BreakpointOptions &bp_options, const char *function_name, 85532e4203SPedro Tammela StructuredData::ObjectSP extra_args_sp) override; 86532e4203SPedro Tammela 874164be72SJonas Devlieghere private: 884164be72SJonas Devlieghere std::unique_ptr<Lua> m_lua; 8945c971f7SJonas Devlieghere bool m_session_is_active = false; 90532e4203SPedro Tammela 91*cfb96d84SJim Ingham Status RegisterBreakpointCallback(BreakpointOptions &bp_options, 92532e4203SPedro Tammela const char *command_body_text, 93532e4203SPedro Tammela StructuredData::ObjectSP extra_args_sp); 9467de8962SJonas Devlieghere }; 9567de8962SJonas Devlieghere 9667de8962SJonas Devlieghere } // namespace lldb_private 9767de8962SJonas Devlieghere 9867de8962SJonas Devlieghere #endif // liblldb_ScriptInterpreterLua_h_ 99