//===-- ThreadPlanCallUserExpression.h --------------------------------*- C++ //-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef liblldb_ThreadPlanCallUserExpression_h_ #define liblldb_ThreadPlanCallUserExpression_h_ #include "lldb/Target/Thread.h" #include "lldb/Target/ThreadPlan.h" #include "lldb/Target/ThreadPlanCallFunction.h" #include "lldb/lldb-private.h" #include "llvm/ADT/ArrayRef.h" namespace lldb_private { class ThreadPlanCallUserExpression : public ThreadPlanCallFunction { public: ThreadPlanCallUserExpression(Thread &thread, Address &function, llvm::ArrayRef args, const EvaluateExpressionOptions &options, lldb::UserExpressionSP &user_expression_sp); ~ThreadPlanCallUserExpression() override; void GetDescription(Stream *s, lldb::DescriptionLevel level) override; void DidPush() override; void WillPop() override; lldb::StopInfoSP GetRealStopInfo() override; bool MischiefManaged() override; void TransferExpressionOwnership() { m_manage_materialization = true; } lldb::ExpressionVariableSP GetExpressionVariable() override { return m_result_var_sp; } protected: void DoTakedown(bool success) override; private: lldb::UserExpressionSP m_user_expression_sp; // This is currently just used to ensure the // User expression the initiated this ThreadPlan // lives as long as the thread plan does. bool m_manage_materialization = false; lldb::ExpressionVariableSP m_result_var_sp; // If we are left to manage the materialization, // then stuff the result expression variable here. DISALLOW_COPY_AND_ASSIGN(ThreadPlanCallUserExpression); }; } // namespace lldb_private #endif // liblldb_ThreadPlanCallUserExpression_h_