1*f732157aSMed Ismail Bennani //===-- ScriptedStopHookPythonInterface.h -----------------------*- C++ -*-===//
2*f732157aSMed Ismail Bennani //
3*f732157aSMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*f732157aSMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information.
5*f732157aSMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*f732157aSMed Ismail Bennani //
7*f732157aSMed Ismail Bennani //===----------------------------------------------------------------------===//
8*f732157aSMed Ismail Bennani 
9*f732157aSMed Ismail Bennani #ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDSTOPHOOKPYTHONINTERFACE_H
10*f732157aSMed Ismail Bennani #define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDSTOPHOOKPYTHONINTERFACE_H
11*f732157aSMed Ismail Bennani 
12*f732157aSMed Ismail Bennani #include "lldb/Host/Config.h"
13*f732157aSMed Ismail Bennani #include "lldb/Interpreter/Interfaces/ScriptedStopHookInterface.h"
14*f732157aSMed Ismail Bennani 
15*f732157aSMed Ismail Bennani #if LLDB_ENABLE_PYTHON
16*f732157aSMed Ismail Bennani 
17*f732157aSMed Ismail Bennani #include "ScriptedPythonInterface.h"
18*f732157aSMed Ismail Bennani 
19*f732157aSMed Ismail Bennani namespace lldb_private {
20*f732157aSMed Ismail Bennani class ScriptedStopHookPythonInterface : public ScriptedStopHookInterface,
21*f732157aSMed Ismail Bennani                                         public ScriptedPythonInterface,
22*f732157aSMed Ismail Bennani                                         public PluginInterface {
23*f732157aSMed Ismail Bennani public:
24*f732157aSMed Ismail Bennani   ScriptedStopHookPythonInterface(ScriptInterpreterPythonImpl &interpreter);
25*f732157aSMed Ismail Bennani 
26*f732157aSMed Ismail Bennani   llvm::Expected<StructuredData::GenericSP>
27*f732157aSMed Ismail Bennani   CreatePluginObject(llvm::StringRef class_name, lldb::TargetSP target_sp,
28*f732157aSMed Ismail Bennani                      const StructuredDataImpl &args_sp) override;
29*f732157aSMed Ismail Bennani 
30*f732157aSMed Ismail Bennani   llvm::SmallVector<AbstractMethodRequirement>
31*f732157aSMed Ismail Bennani   GetAbstractMethodRequirements() const override {
32*f732157aSMed Ismail Bennani     return llvm::SmallVector<AbstractMethodRequirement>({{"handle_stop", 2}});
33*f732157aSMed Ismail Bennani   }
34*f732157aSMed Ismail Bennani 
35*f732157aSMed Ismail Bennani   llvm::Expected<bool> HandleStop(ExecutionContext &exe_ctx,
36*f732157aSMed Ismail Bennani                                   lldb::StreamSP &output_sp) override;
37*f732157aSMed Ismail Bennani 
38*f732157aSMed Ismail Bennani   static void Initialize();
39*f732157aSMed Ismail Bennani 
40*f732157aSMed Ismail Bennani   static void Terminate();
41*f732157aSMed Ismail Bennani 
42*f732157aSMed Ismail Bennani   static llvm::StringRef GetPluginNameStatic() {
43*f732157aSMed Ismail Bennani     return "ScriptedStopHookPythonInterface";
44*f732157aSMed Ismail Bennani   }
45*f732157aSMed Ismail Bennani 
46*f732157aSMed Ismail Bennani   llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
47*f732157aSMed Ismail Bennani };
48*f732157aSMed Ismail Bennani } // namespace lldb_private
49*f732157aSMed Ismail Bennani 
50*f732157aSMed Ismail Bennani #endif // LLDB_ENABLE_PYTHON
51*f732157aSMed Ismail Bennani #endif // LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDSTOPHOOKPYTHONINTERFACE_H
52