159d8dd79SMed Ismail Bennani //===-- ScriptedThread.h ----------------------------------------*- C++ -*-===//
259d8dd79SMed Ismail Bennani //
359d8dd79SMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
459d8dd79SMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information.
559d8dd79SMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
659d8dd79SMed Ismail Bennani //
759d8dd79SMed Ismail Bennani //===----------------------------------------------------------------------===//
859d8dd79SMed Ismail Bennani 
959d8dd79SMed Ismail Bennani #ifndef LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H
1059d8dd79SMed Ismail Bennani #define LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H
1159d8dd79SMed Ismail Bennani 
1259d8dd79SMed Ismail Bennani #include <string>
1359d8dd79SMed Ismail Bennani 
1459d8dd79SMed Ismail Bennani #include "ScriptedProcess.h"
1559d8dd79SMed Ismail Bennani 
1659d8dd79SMed Ismail Bennani #include "Plugins/Process/Utility/RegisterContextMemory.h"
1759d8dd79SMed Ismail Bennani #include "lldb/Interpreter/ScriptInterpreter.h"
1859d8dd79SMed Ismail Bennani #include "lldb/Target/DynamicRegisterInfo.h"
1959d8dd79SMed Ismail Bennani #include "lldb/Target/Thread.h"
2059d8dd79SMed Ismail Bennani 
2159d8dd79SMed Ismail Bennani namespace lldb_private {
2259d8dd79SMed Ismail Bennani class ScriptedProcess;
2359d8dd79SMed Ismail Bennani }
2459d8dd79SMed Ismail Bennani 
2559d8dd79SMed Ismail Bennani namespace lldb_private {
2659d8dd79SMed Ismail Bennani 
2759d8dd79SMed Ismail Bennani class ScriptedThread : public lldb_private::Thread {
28*45148bfeSMed Ismail Bennani 
2959d8dd79SMed Ismail Bennani public:
30*45148bfeSMed Ismail Bennani   ScriptedThread(ScriptedProcess &process,
31*45148bfeSMed Ismail Bennani                  lldb::ScriptedThreadInterfaceSP interface_sp, lldb::tid_t tid,
32*45148bfeSMed Ismail Bennani                  StructuredData::GenericSP script_object_sp = nullptr);
3359d8dd79SMed Ismail Bennani 
3459d8dd79SMed Ismail Bennani   ~ScriptedThread() override;
3559d8dd79SMed Ismail Bennani 
36*45148bfeSMed Ismail Bennani   static llvm::Expected<std::shared_ptr<ScriptedThread>>
37*45148bfeSMed Ismail Bennani   Create(ScriptedProcess &process,
38*45148bfeSMed Ismail Bennani          StructuredData::Generic *script_object = nullptr);
39*45148bfeSMed Ismail Bennani 
4059d8dd79SMed Ismail Bennani   lldb::RegisterContextSP GetRegisterContext() override;
4159d8dd79SMed Ismail Bennani 
4259d8dd79SMed Ismail Bennani   lldb::RegisterContextSP
4359d8dd79SMed Ismail Bennani   CreateRegisterContextForFrame(lldb_private::StackFrame *frame) override;
4459d8dd79SMed Ismail Bennani 
4559d8dd79SMed Ismail Bennani   bool CalculateStopInfo() override;
4659d8dd79SMed Ismail Bennani 
4759d8dd79SMed Ismail Bennani   const char *GetInfo() override { return nullptr; }
4859d8dd79SMed Ismail Bennani 
4959d8dd79SMed Ismail Bennani   const char *GetName() override;
5059d8dd79SMed Ismail Bennani 
5159d8dd79SMed Ismail Bennani   const char *GetQueueName() override;
5259d8dd79SMed Ismail Bennani 
5359d8dd79SMed Ismail Bennani   void WillResume(lldb::StateType resume_state) override;
5459d8dd79SMed Ismail Bennani 
5559d8dd79SMed Ismail Bennani   void RefreshStateAfterStop() override;
5659d8dd79SMed Ismail Bennani 
5759d8dd79SMed Ismail Bennani   void ClearStackFrames() override;
5859d8dd79SMed Ismail Bennani 
5959d8dd79SMed Ismail Bennani private:
6059d8dd79SMed Ismail Bennani   void CheckInterpreterAndScriptObject() const;
6159d8dd79SMed Ismail Bennani   lldb::ScriptedThreadInterfaceSP GetInterface() const;
6259d8dd79SMed Ismail Bennani 
6359d8dd79SMed Ismail Bennani   ScriptedThread(const ScriptedThread &) = delete;
6459d8dd79SMed Ismail Bennani   const ScriptedThread &operator=(const ScriptedThread &) = delete;
6559d8dd79SMed Ismail Bennani 
6659d8dd79SMed Ismail Bennani   std::shared_ptr<DynamicRegisterInfo> GetDynamicRegisterInfo();
6759d8dd79SMed Ismail Bennani 
6859d8dd79SMed Ismail Bennani   const ScriptedProcess &m_scripted_process;
691b86344fSMed Ismail Bennani   lldb::ScriptedThreadInterfaceSP m_scripted_thread_interface_sp = nullptr;
70*45148bfeSMed Ismail Bennani   lldb_private::StructuredData::GenericSP m_script_object_sp = nullptr;
7159d8dd79SMed Ismail Bennani   std::shared_ptr<DynamicRegisterInfo> m_register_info_sp = nullptr;
7259d8dd79SMed Ismail Bennani };
7359d8dd79SMed Ismail Bennani 
7459d8dd79SMed Ismail Bennani } // namespace lldb_private
7559d8dd79SMed Ismail Bennani 
7659d8dd79SMed Ismail Bennani #endif // LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H
77