1//===-- lldb-private-enumerations.h -----------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLDB_lldb_private_enumerations_h_
11#define LLDB_lldb_private_enumerations_h_
12
13namespace lldb_private {
14
15//----------------------------------------------------------------------
16// Thread Step Types
17//----------------------------------------------------------------------
18typedef enum StepType
19{
20    eStepTypeNone,
21    eStepTypeTrace,     ///< Single step one instruction.
22    eStepTypeTraceOver, ///< Single step one instruction, stepping over.
23    eStepTypeInto,      ///< Single step into a specified context.
24    eStepTypeOver,      ///< Single step over a specified context.
25    eStepTypeOut        ///< Single step out a specified context.
26} StepType;
27
28//----------------------------------------------------------------------
29// Address Types
30//----------------------------------------------------------------------
31typedef enum AddressType
32{
33    eAddressTypeInvalid = 0,
34    eAddressTypeFile, ///< Address is an address as found in an object or symbol file
35    eAddressTypeLoad, ///< Address is an address as in the current target inferior process
36    eAddressTypeHost  ///< Address is an address in the process that is running this code
37} AddressType;
38
39//----------------------------------------------------------------------
40// Votes - Need a tri-state, yes, no, no opinion...
41//----------------------------------------------------------------------
42typedef enum Vote
43{
44    eVoteNo         = -1,
45    eVoteNoOpinion  =  0,
46    eVoteYes        =  1
47} Vote;
48
49typedef enum ArchitectureType
50{
51    eArchTypeInvalid,
52    eArchTypeMachO,
53    eArchTypeELF,
54    kNumArchTypes
55} ArchitectureType;
56
57//----------------------------------------------------------------------
58/// Settable state variable types.
59///
60//----------------------------------------------------------------------
61
62//typedef enum SettableVariableType
63//{
64//    eSetVarTypeInt,
65//    eSetVarTypeBoolean,
66//    eSetVarTypeString,
67//    eSetVarTypeArray,
68//    eSetVarTypeDictionary,
69//    eSetVarTypeEnum,
70//    eSetVarTypeNone
71//} SettableVariableType;
72
73typedef enum VarSetOperationType
74{
75    eVarSetOperationReplace,
76    eVarSetOperationInsertBefore,
77    eVarSetOperationInsertAfter,
78    eVarSetOperationRemove,
79    eVarSetOperationAppend,
80    eVarSetOperationClear,
81    eVarSetOperationAssign,
82    eVarSetOperationInvalid
83} VarSetOperationType;
84
85typedef enum ArgumentRepetitionType
86{
87    eArgRepeatPlain,            // Exactly one occurrence
88    eArgRepeatOptional,         // At most one occurrence, but it's optional
89    eArgRepeatPlus,             // One or more occurrences
90    eArgRepeatStar,             // Zero or more occurrences
91    eArgRepeatRange,            // Repetition of same argument, from 1 to n
92    eArgRepeatPairPlain,        // A pair of arguments that must always go together ([arg-type arg-value]), occurs exactly once
93    eArgRepeatPairOptional,     // A pair that occurs at most once (optional)
94    eArgRepeatPairPlus,         // One or more occurrences of a pair
95    eArgRepeatPairStar,         // Zero or more occurrences of a pair
96    eArgRepeatPairRange,        // A pair that repeats from 1 to n
97    eArgRepeatPairRangeOptional // A pair that repeats from 1 to n, but is optional
98} ArgumentRepetitionType;
99
100typedef enum SortOrder
101{
102    eSortOrderNone,
103    eSortOrderByAddress,
104    eSortOrderByName
105} SortOrder;
106
107
108//----------------------------------------------------------------------
109// Used in conjunction with Host::GetLLDBPath () to find files that
110// are related to
111//----------------------------------------------------------------------
112typedef enum PathType
113{
114    ePathTypeLLDBShlibDir,          // The directory where the lldb.so (unix) or LLDB mach-o file in LLDB.framework (MacOSX) exists
115    ePathTypeSupportExecutableDir,  // Find LLDB support executable directory (debugserver, etc)
116    ePathTypeHeaderDir,             // Find LLDB header file directory
117    ePathTypePythonDir,             // Find Python modules (PYTHONPATH) directory
118    ePathTypeLLDBSystemPlugins,     // System plug-ins directory
119    ePathTypeLLDBUserPlugins        // User plug-ins directory
120} PathType;
121
122
123//----------------------------------------------------------------------
124// We can execute ThreadPlans on one thread with various fall-back modes
125// (try other threads after timeout, etc.) This enum gives the result of
126// thread plan executions.
127//----------------------------------------------------------------------
128typedef enum ExecutionResults
129{
130    eExecutionSetupError,
131    eExecutionCompleted,
132    eExecutionDiscarded,
133    eExecutionInterrupted,
134    eExecutionHitBreakpoint,
135    eExecutionTimedOut
136} ExecutionResults;
137
138typedef enum ObjCRuntimeVersions {
139    eObjC_VersionUnknown = 0,
140    eAppleObjC_V1 = 1,
141    eAppleObjC_V2 = 2
142} ObjCRuntimeVersions;
143
144
145//----------------------------------------------------------------------
146// LazyBool is for boolean values that need to be calculated lazily.
147// Values start off set to eLazyBoolCalculate, and then they can be
148// calculated once and set to eLazyBoolNo or eLazyBoolYes.
149//----------------------------------------------------------------------
150typedef enum LazyBool {
151    eLazyBoolCalculate  = -1,
152    eLazyBoolNo         = 0,
153    eLazyBoolYes        = 1
154} LazyBool;
155
156//------------------------------------------------------------------
157/// Name matching
158//------------------------------------------------------------------
159typedef enum NameMatchType
160{
161    eNameMatchIgnore,
162    eNameMatchEquals,
163    eNameMatchContains,
164    eNameMatchStartsWith,
165    eNameMatchEndsWith,
166    eNameMatchRegularExpression
167
168} NameMatchType;
169
170
171//------------------------------------------------------------------
172/// Instruction types
173//------------------------------------------------------------------
174typedef enum InstructionType
175{
176    eInstructionTypeAny,                // Support for any instructions at all (at least one)
177    eInstructionTypePrologueEpilogue,   // All prologue and epilogue instructons that push and pop register values and modify sp/fp
178    eInstructionTypePCModifying,        // Any instruction that modifies the program counter/instruction pointer
179    eInstructionTypeAll                 // All instructions of any kind
180
181}  InstructionType;
182
183
184//------------------------------------------------------------------
185/// Format category entry types
186//------------------------------------------------------------------
187typedef enum FormatCategoryItem
188{
189    eFormatCategoryItemSummary =         0x0001,
190    eFormatCategoryItemRegexSummary =    0x0002,
191    eFormatCategoryItemFilter =          0x0004,
192    eFormatCategoryItemRegexFilter =     0x0008,
193    eFormatCategoryItemSynth =           0x0010,
194    eFormatCategoryItemRegexSynth =      0x0020
195} FormatCategoryItem;
196
197//------------------------------------------------------------------
198/// Expression execution policies
199//------------------------------------------------------------------
200typedef enum {
201    eExecutionPolicyOnlyWhenNeeded,
202    eExecutionPolicyNever,
203    eExecutionPolicyAlways
204} ExecutionPolicy;
205
206//----------------------------------------------------------------------
207// Ways that the FormatManager picks a particular format for a type
208//----------------------------------------------------------------------
209typedef enum FormatterChoiceCriterion
210{
211    eFormatterChoiceCriterionDirectChoice =                  0x00000000,
212    eFormatterChoiceCriterionStrippedPointerReference =      0x00000001,
213    eFormatterChoiceCriterionNavigatedTypedefs =             0x00000002,
214    eFormatterChoiceCriterionRegularExpressionSummary =      0x00000004,
215    eFormatterChoiceCriterionRegularExpressionFilter =       0x00000004,
216    eFormatterChoiceCriterionDynamicObjCDiscovery =          0x00000008,
217    eFormatterChoiceCriterionStrippedBitField =              0x00000010,
218    eFormatterChoiceCriterionWentToStaticValue =             0x00000020
219} FormatterChoiceCriterion;
220
221//----------------------------------------------------------------------
222// Synchronicity behavior of scripted commands
223//----------------------------------------------------------------------
224typedef enum ScriptedCommandSynchronicity
225{
226    eScriptedCommandSynchronicitySynchronous,
227    eScriptedCommandSynchronicityAsynchronous,
228    eScriptedCommandSynchronicityCurrentValue // use whatever the current synchronicity is
229} ScriptedCommandSynchronicity;
230
231} // namespace lldb_private
232
233
234#endif  // LLDB_lldb_private_enumerations_h_
235