10b57cec5SDimitry Andric //===-- ThreadPlanPython.h --------------------------------------------*- C++ 20b57cec5SDimitry Andric //-*-===// 30b57cec5SDimitry Andric // 40b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 50b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 60b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 70b57cec5SDimitry Andric // 80b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 90b57cec5SDimitry Andric 105ffd83dbSDimitry Andric #ifndef LLDB_TARGET_THREADPLANPYTHON_H 115ffd83dbSDimitry Andric #define LLDB_TARGET_THREADPLANPYTHON_H 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #include <string> 140b57cec5SDimitry Andric 150eae32dcSDimitry Andric #include "lldb/Core/StructuredDataImpl.h" 160b57cec5SDimitry Andric #include "lldb/Target/Process.h" 170b57cec5SDimitry Andric #include "lldb/Target/StopInfo.h" 180b57cec5SDimitry Andric #include "lldb/Target/Target.h" 190b57cec5SDimitry Andric #include "lldb/Target/Thread.h" 200b57cec5SDimitry Andric #include "lldb/Target/ThreadPlan.h" 210b57cec5SDimitry Andric #include "lldb/Target/ThreadPlanTracer.h" 220b57cec5SDimitry Andric #include "lldb/Utility/StructuredData.h" 230b57cec5SDimitry Andric #include "lldb/Utility/UserID.h" 240eae32dcSDimitry Andric #include "lldb/lldb-forward.h" 250b57cec5SDimitry Andric #include "lldb/lldb-private.h" 260b57cec5SDimitry Andric 270b57cec5SDimitry Andric namespace lldb_private { 280b57cec5SDimitry Andric 290b57cec5SDimitry Andric // ThreadPlanPython: 300b57cec5SDimitry Andric // 310b57cec5SDimitry Andric 320b57cec5SDimitry Andric class ThreadPlanPython : public ThreadPlan { 330b57cec5SDimitry Andric public: 349dba64beSDimitry Andric ThreadPlanPython(Thread &thread, const char *class_name, 350eae32dcSDimitry Andric const StructuredDataImpl &args_data); 360b57cec5SDimitry Andric 370b57cec5SDimitry Andric void GetDescription(Stream *s, lldb::DescriptionLevel level) override; 380b57cec5SDimitry Andric 390b57cec5SDimitry Andric bool ValidatePlan(Stream *error) override; 400b57cec5SDimitry Andric 410b57cec5SDimitry Andric bool ShouldStop(Event *event_ptr) override; 420b57cec5SDimitry Andric 430b57cec5SDimitry Andric bool MischiefManaged() override; 440b57cec5SDimitry Andric 450b57cec5SDimitry Andric bool WillStop() override; 460b57cec5SDimitry Andric StopOthers()47e8d8bef9SDimitry Andric bool StopOthers() override { return m_stop_others; } 48e8d8bef9SDimitry Andric SetStopOthers(bool new_value)49e8d8bef9SDimitry Andric void SetStopOthers(bool new_value) override { m_stop_others = new_value; } 500b57cec5SDimitry Andric 510b57cec5SDimitry Andric void DidPush() override; 520b57cec5SDimitry Andric 530b57cec5SDimitry Andric bool IsPlanStale() override; 540b57cec5SDimitry Andric 5506c3fb27SDimitry Andric bool DoWillResume(lldb::StateType resume_state, bool current_plan) override; 5606c3fb27SDimitry Andric 5706c3fb27SDimitry Andric 580b57cec5SDimitry Andric protected: 590b57cec5SDimitry Andric bool DoPlanExplainsStop(Event *event_ptr) override; 600b57cec5SDimitry Andric 610b57cec5SDimitry Andric lldb::StateType GetPlanRunState() override; 620b57cec5SDimitry Andric 635ffd83dbSDimitry Andric ScriptInterpreter *GetScriptInterpreter(); 645ffd83dbSDimitry Andric 650b57cec5SDimitry Andric private: 660b57cec5SDimitry Andric std::string m_class_name; 670eae32dcSDimitry Andric StructuredDataImpl m_args_data; 689dba64beSDimitry Andric std::string m_error_str; 690b57cec5SDimitry Andric StructuredData::ObjectSP m_implementation_sp; 7006c3fb27SDimitry Andric StreamString m_stop_description; // Cache the stop description here 710b57cec5SDimitry Andric bool m_did_push; 72e8d8bef9SDimitry Andric bool m_stop_others; 730b57cec5SDimitry Andric 745ffd83dbSDimitry Andric ThreadPlanPython(const ThreadPlanPython &) = delete; 755ffd83dbSDimitry Andric const ThreadPlanPython &operator=(const ThreadPlanPython &) = delete; 760b57cec5SDimitry Andric }; 770b57cec5SDimitry Andric 780b57cec5SDimitry Andric } // namespace lldb_private 790b57cec5SDimitry Andric 805ffd83dbSDimitry Andric #endif // LLDB_TARGET_THREADPLANPYTHON_H 81