174462Salfred//===-- ThreadPlanStepInRange.h ---------------------------------*- C++ -*-===//
274462Salfred//
3261046Smav//                     The LLVM Compiler Infrastructure
4261046Smav//
5261046Smav// This file is distributed under the University of Illinois Open Source
6261046Smav// License. See LICENSE.TXT for details.
7261046Smav//
8261046Smav//===----------------------------------------------------------------------===//
9261046Smav
10261046Smav#ifndef liblldb_ThreadPlanStepInRange_h_
11261046Smav#define liblldb_ThreadPlanStepInRange_h_
12261046Smav
13261046Smav// C Includes
14261046Smav// C++ Includes
15261046Smav// Other libraries and framework includes
16261046Smav// Project includes
1774462Salfred#include "lldb/Core/AddressRange.h"
18261046Smav#include "lldb/Target/StackID.h"
19261046Smav#include "lldb/Target/Thread.h"
20261046Smav#include "lldb/Target/ThreadPlanStepRange.h"
21261046Smav#include "lldb/Target/ThreadPlanShouldStopHere.h"
22261046Smav
23261046Smavnamespace lldb_private {
24261046Smav
25261046Smavclass ThreadPlanStepInRange :
26261046Smav    public ThreadPlanStepRange,
27261046Smav    public ThreadPlanShouldStopHere
28261046Smav{
2974462Salfredpublic:
3074462Salfred    ThreadPlanStepInRange (Thread &thread,
3174462Salfred                           const AddressRange &range,
3274462Salfred                           const SymbolContext &addr_context,
3374462Salfred                           lldb::RunMode stop_others);
3474462Salfred
3574462Salfred    ThreadPlanStepInRange (Thread &thread,
3674462Salfred                           const AddressRange &range,
3774462Salfred                           const SymbolContext &addr_context,
3874462Salfred                           const char *step_into_function_name,
3974462Salfred                           lldb::RunMode stop_others);
40136581Sobrien
4174462Salfred    virtual
4274462Salfred    ~ThreadPlanStepInRange ();
4392990Sobrien
4492990Sobrien    virtual void
4574462Salfred    GetDescription (Stream *s, lldb::DescriptionLevel level);
4674462Salfred
4774462Salfred    virtual bool
4874462Salfred    ShouldStop (Event *event_ptr);
4974462Salfred
5074462Salfred    void SetAvoidRegexp(const char *name);
5174462Salfred
5274462Salfred    void SetStepInTarget (const char *target)
5374462Salfred    {
5474462Salfred        m_step_into_target.SetCString(target);
5574462Salfred    }
5675094Siedowse
5774462Salfred    static lldb::ThreadPlanSP
5874462Salfred    DefaultShouldStopHereCallback (ThreadPlan *current_plan, Flags &flags, void *baton);
5974462Salfred
6074462Salfred    static void
6174462Salfred    SetDefaultFlagValue (uint32_t new_value);
6274462Salfred
6374462Salfred    bool
6474462Salfred    IsVirtualStep();
6574462Salfred
6674462Salfredprotected:
6774462Salfred    virtual bool DoWillResume (lldb::StateType resume_state, bool current_plan);
6874462Salfred
6974462Salfred    virtual bool
7074462Salfred    DoPlanExplainsStop (Event *event_ptr);
7174462Salfred
7274462Salfred    virtual void
7374462Salfred    SetFlagsToDefault ();
7474462Salfred
7574462Salfred    bool
76156090Sdeischen    FrameMatchesAvoidCriteria ();
7774462Salfred
7892941Sobrienprivate:
7992941Sobrien
8092905Sobrien    friend lldb::ThreadPlanSP
8192905Sobrien    Thread::QueueThreadPlanForStepOverRange (bool abort_other_plans,
8274462Salfred                                         const AddressRange &range,
8374462Salfred                                         const SymbolContext &addr_context,
8474462Salfred                                         lldb::RunMode stop_others);
8574462Salfred    friend lldb::ThreadPlanSP
8674462Salfred    Thread::QueueThreadPlanForStepInRange (bool abort_other_plans,
8774462Salfred                                         const AddressRange &range,
8874462Salfred                                         const SymbolContext &addr_context,
8974462Salfred                                         const char *step_in_target,
9074462Salfred                                         lldb::RunMode stop_others,
91309489Sngie                                         bool avoid_code_without_debug_info);
92309489Sngie
9374462Salfred
9474462Salfred    // Need an appropriate marker for the current stack so we can tell step out
9574462Salfred    // from step in.
9674462Salfred
9774462Salfred    static uint32_t s_default_flag_values;
9874462Salfred    lldb::ThreadPlanSP m_sub_plan_sp;  // Keep track of the last plan we were running.  If it fails, we should stop.
9974462Salfred    std::unique_ptr<RegularExpression> m_avoid_regexp_ap;
10074462Salfred    bool m_step_past_prologue;  // FIXME: For now hard-coded to true, we could put a switch in for this if there's
10174462Salfred                                // demand for that.
10274462Salfred    bool m_virtual_step;        // true if we've just done a "virtual step", i.e. just moved the inline stack depth.
10374462Salfred    ConstString m_step_into_target;
10474462Salfred    DISALLOW_COPY_AND_ASSIGN (ThreadPlanStepInRange);
10574462Salfred
10674462Salfred};
10774462Salfred
10874462Salfred} // namespace lldb_private
10974462Salfred
11074462Salfred#endif  // liblldb_ThreadPlanStepInRange_h_
11174462Salfred