xref: /llvm-project/lldb/source/Plugins/ScriptInterpreter/Lua/ScriptInterpreterLua.h (revision ab81fc29d9f7a8f8807293fc987f68f9ccf42259)
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