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 1267de8962SJonas Devlieghere #include "lldb/Interpreter/ScriptInterpreter.h" 13a0d7406aSPedro Tammela #include "lldb/Utility/Status.h" 14a0d7406aSPedro Tammela #include "lldb/lldb-enumerations.h" 1567de8962SJonas Devlieghere 1667de8962SJonas Devlieghere namespace lldb_private { 174164be72SJonas Devlieghere class Lua; 1867de8962SJonas Devlieghere class ScriptInterpreterLua : public ScriptInterpreter { 1967de8962SJonas Devlieghere public: 20a0d7406aSPedro Tammela class CommandDataLua : public BreakpointOptions::CommandData { 21a0d7406aSPedro Tammela public: 22a0d7406aSPedro Tammela CommandDataLua() : BreakpointOptions::CommandData() { 23a0d7406aSPedro Tammela interpreter = lldb::eScriptLanguageLua; 24a0d7406aSPedro Tammela } 25a0d7406aSPedro Tammela }; 26a0d7406aSPedro Tammela 2767de8962SJonas Devlieghere ScriptInterpreterLua(Debugger &debugger); 2867de8962SJonas Devlieghere 2967de8962SJonas Devlieghere ~ScriptInterpreterLua() override; 3067de8962SJonas Devlieghere 3167de8962SJonas Devlieghere bool ExecuteOneLine( 3267de8962SJonas Devlieghere llvm::StringRef command, CommandReturnObject *result, 3367de8962SJonas Devlieghere const ExecuteScriptOptions &options = ExecuteScriptOptions()) override; 3467de8962SJonas Devlieghere 3567de8962SJonas Devlieghere void ExecuteInterpreterLoop() override; 3667de8962SJonas Devlieghere 3700bb397bSJonas Devlieghere bool LoadScriptingModule(const char *filename, bool init_session, 38572b9f46SJonas Devlieghere lldb_private::Status &error, 3900bb397bSJonas Devlieghere StructuredData::ObjectSP *module_sp = nullptr, 4000bb397bSJonas Devlieghere FileSpec extra_search_dir = {}) override; 41572b9f46SJonas Devlieghere 4267de8962SJonas Devlieghere // Static Functions 4367de8962SJonas Devlieghere static void Initialize(); 4467de8962SJonas Devlieghere 4567de8962SJonas Devlieghere static void Terminate(); 4667de8962SJonas Devlieghere 4767de8962SJonas Devlieghere static lldb::ScriptInterpreterSP CreateInstance(Debugger &debugger); 4867de8962SJonas Devlieghere 4967de8962SJonas Devlieghere static lldb_private::ConstString GetPluginNameStatic(); 5067de8962SJonas Devlieghere 5167de8962SJonas Devlieghere static const char *GetPluginDescriptionStatic(); 5267de8962SJonas Devlieghere 53a0d7406aSPedro Tammela static bool BreakpointCallbackFunction(void *baton, 54a0d7406aSPedro Tammela StoppointCallbackContext *context, 55a0d7406aSPedro Tammela lldb::user_id_t break_id, 56a0d7406aSPedro Tammela lldb::user_id_t break_loc_id); 57a0d7406aSPedro Tammela 5867de8962SJonas Devlieghere // PluginInterface protocol 5967de8962SJonas Devlieghere lldb_private::ConstString GetPluginName() override; 6067de8962SJonas Devlieghere 6167de8962SJonas Devlieghere uint32_t GetPluginVersion() override; 624164be72SJonas Devlieghere 634164be72SJonas Devlieghere Lua &GetLua(); 644164be72SJonas Devlieghere 6545c971f7SJonas Devlieghere llvm::Error EnterSession(lldb::user_id_t debugger_id); 6645c971f7SJonas Devlieghere llvm::Error LeaveSession(); 6745c971f7SJonas Devlieghere 68*d853bd7aSPedro Tammela void CollectDataForBreakpointCommandCallback( 69*d853bd7aSPedro Tammela std::vector<BreakpointOptions *> &bp_options_vec, 70*d853bd7aSPedro Tammela CommandReturnObject &result) override; 71*d853bd7aSPedro Tammela 72a0d7406aSPedro Tammela Status SetBreakpointCommandCallback(BreakpointOptions *bp_options, 73a0d7406aSPedro Tammela const char *command_body_text) override; 74a0d7406aSPedro Tammela 754164be72SJonas Devlieghere private: 764164be72SJonas Devlieghere std::unique_ptr<Lua> m_lua; 7745c971f7SJonas Devlieghere bool m_session_is_active = false; 7867de8962SJonas Devlieghere }; 7967de8962SJonas Devlieghere 8067de8962SJonas Devlieghere } // namespace lldb_private 8167de8962SJonas Devlieghere 8267de8962SJonas Devlieghere #endif // liblldb_ScriptInterpreterLua_h_ 83