177374d3bSMed Ismail Bennani //===-- ScriptedThreadPythonInterface.h ------------------------*- C++ -*-===//
277374d3bSMed Ismail Bennani //
377374d3bSMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
477374d3bSMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information.
577374d3bSMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
677374d3bSMed Ismail Bennani //
777374d3bSMed Ismail Bennani //===----------------------------------------------------------------------===//
877374d3bSMed Ismail Bennani 
977374d3bSMed Ismail Bennani #ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDTHREADPYTHONINTERFACE_H
1077374d3bSMed Ismail Bennani #define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDTHREADPYTHONINTERFACE_H
1177374d3bSMed Ismail Bennani 
1277374d3bSMed Ismail Bennani #include "lldb/Host/Config.h"
1377374d3bSMed Ismail Bennani 
1477374d3bSMed Ismail Bennani #if LLDB_ENABLE_PYTHON
1577374d3bSMed Ismail Bennani 
1677374d3bSMed Ismail Bennani #include "ScriptedPythonInterface.h"
1777374d3bSMed Ismail Bennani #include "lldb/Interpreter/Interfaces/ScriptedThreadInterface.h"
1877374d3bSMed Ismail Bennani #include <optional>
1977374d3bSMed Ismail Bennani 
2077374d3bSMed Ismail Bennani namespace lldb_private {
2177374d3bSMed Ismail Bennani class ScriptedThreadPythonInterface : public ScriptedThreadInterface,
2277374d3bSMed Ismail Bennani                                       public ScriptedPythonInterface {
2377374d3bSMed Ismail Bennani public:
2477374d3bSMed Ismail Bennani   ScriptedThreadPythonInterface(ScriptInterpreterPythonImpl &interpreter);
2577374d3bSMed Ismail Bennani 
26f22d82ceSMed Ismail Bennani   llvm::Expected<StructuredData::GenericSP>
2777374d3bSMed Ismail Bennani   CreatePluginObject(llvm::StringRef class_name, ExecutionContext &exe_ctx,
2877374d3bSMed Ismail Bennani                      StructuredData::DictionarySP args_sp,
2977374d3bSMed Ismail Bennani                      StructuredData::Generic *script_obj = nullptr) override;
3077374d3bSMed Ismail Bennani 
31*21026073SMed Ismail Bennani   llvm::SmallVector<AbstractMethodRequirement>
32*21026073SMed Ismail Bennani   GetAbstractMethodRequirements() const override {
33*21026073SMed Ismail Bennani     return llvm::SmallVector<AbstractMethodRequirement>(
34*21026073SMed Ismail Bennani         {{"get_stop_reason"}, {"get_register_context"}});
350a211446SMed Ismail Bennani   }
360a211446SMed Ismail Bennani 
3777374d3bSMed Ismail Bennani   lldb::tid_t GetThreadID() override;
3877374d3bSMed Ismail Bennani 
3977374d3bSMed Ismail Bennani   std::optional<std::string> GetName() override;
4077374d3bSMed Ismail Bennani 
4177374d3bSMed Ismail Bennani   lldb::StateType GetState() override;
4277374d3bSMed Ismail Bennani 
4377374d3bSMed Ismail Bennani   std::optional<std::string> GetQueue() override;
4477374d3bSMed Ismail Bennani 
4577374d3bSMed Ismail Bennani   StructuredData::DictionarySP GetStopReason() override;
4677374d3bSMed Ismail Bennani 
4777374d3bSMed Ismail Bennani   StructuredData::ArraySP GetStackFrames() override;
4877374d3bSMed Ismail Bennani 
4977374d3bSMed Ismail Bennani   StructuredData::DictionarySP GetRegisterInfo() override;
5077374d3bSMed Ismail Bennani 
5177374d3bSMed Ismail Bennani   std::optional<std::string> GetRegisterContext() override;
5277374d3bSMed Ismail Bennani 
5377374d3bSMed Ismail Bennani   StructuredData::ArraySP GetExtendedInfo() override;
5477374d3bSMed Ismail Bennani };
5577374d3bSMed Ismail Bennani } // namespace lldb_private
5677374d3bSMed Ismail Bennani 
5777374d3bSMed Ismail Bennani #endif // LLDB_ENABLE_PYTHON
5877374d3bSMed Ismail Bennani #endif // LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDTHREADPYTHONINTERFACE_H
59