|
13 | 13 | import re
|
14 | 14 | import sys
|
15 | 15 | import subprocess
|
| 16 | +from typing import Dict |
16 | 17 |
|
17 | 18 | # Third-party modules
|
18 | 19 | from six import StringIO as SixStringIO
|
@@ -208,144 +209,54 @@ def get_description(obj, option=None):
|
208 | 209 | # Convert some enum value to its string counterpart
|
209 | 210 | # =================================================
|
210 | 211 |
|
211 |
| -def state_type_to_str(enum): |
| 212 | +def _enum_names(prefix: str) -> Dict[int, str]: |
| 213 | + """Generate a mapping of enum value to name, for the enum prefix.""" |
| 214 | + suffix_start = len(prefix) |
| 215 | + return { |
| 216 | + getattr(lldb, attr): attr[suffix_start:].lower() |
| 217 | + for attr in dir(lldb) |
| 218 | + if attr.startswith(prefix) |
| 219 | + } |
| 220 | + |
| 221 | + |
| 222 | +_STATE_NAMES = _enum_names(prefix="eState") |
| 223 | + |
| 224 | +def state_type_to_str(enum: int) -> str: |
212 | 225 | """Returns the stateType string given an enum."""
|
213 |
| - if enum == lldb.eStateInvalid: |
214 |
| - return "invalid" |
215 |
| - elif enum == lldb.eStateUnloaded: |
216 |
| - return "unloaded" |
217 |
| - elif enum == lldb.eStateConnected: |
218 |
| - return "connected" |
219 |
| - elif enum == lldb.eStateAttaching: |
220 |
| - return "attaching" |
221 |
| - elif enum == lldb.eStateLaunching: |
222 |
| - return "launching" |
223 |
| - elif enum == lldb.eStateStopped: |
224 |
| - return "stopped" |
225 |
| - elif enum == lldb.eStateRunning: |
226 |
| - return "running" |
227 |
| - elif enum == lldb.eStateStepping: |
228 |
| - return "stepping" |
229 |
| - elif enum == lldb.eStateCrashed: |
230 |
| - return "crashed" |
231 |
| - elif enum == lldb.eStateDetached: |
232 |
| - return "detached" |
233 |
| - elif enum == lldb.eStateExited: |
234 |
| - return "exited" |
235 |
| - elif enum == lldb.eStateSuspended: |
236 |
| - return "suspended" |
237 |
| - else: |
238 |
| - raise Exception("Unknown StateType enum: " + str(enum)) |
| 226 | + name = _STATE_NAMES.get(enum) |
| 227 | + if name: |
| 228 | + return name |
| 229 | + raise Exception(f"Unknown StateType enum: {enum}") |
| 230 | + |
239 | 231 |
|
| 232 | +_STOP_REASON_NAMES = _enum_names(prefix="eStopReason") |
240 | 233 |
|
241 |
| -def stop_reason_to_str(enum): |
| 234 | +def stop_reason_to_str(enum: int) -> str: |
242 | 235 | """Returns the stopReason string given an enum."""
|
243 |
| - if enum == lldb.eStopReasonInvalid: |
244 |
| - return "invalid" |
245 |
| - elif enum == lldb.eStopReasonNone: |
246 |
| - return "none" |
247 |
| - elif enum == lldb.eStopReasonTrace: |
248 |
| - return "trace" |
249 |
| - elif enum == lldb.eStopReasonBreakpoint: |
250 |
| - return "breakpoint" |
251 |
| - elif enum == lldb.eStopReasonWatchpoint: |
252 |
| - return "watchpoint" |
253 |
| - elif enum == lldb.eStopReasonExec: |
254 |
| - return "exec" |
255 |
| - elif enum == lldb.eStopReasonFork: |
256 |
| - return "fork" |
257 |
| - elif enum == lldb.eStopReasonVFork: |
258 |
| - return "vfork" |
259 |
| - elif enum == lldb.eStopReasonVForkDone: |
260 |
| - return "vforkdone" |
261 |
| - elif enum == lldb.eStopReasonSignal: |
262 |
| - return "signal" |
263 |
| - elif enum == lldb.eStopReasonException: |
264 |
| - return "exception" |
265 |
| - elif enum == lldb.eStopReasonPlanComplete: |
266 |
| - return "plancomplete" |
267 |
| - elif enum == lldb.eStopReasonThreadExiting: |
268 |
| - return "threadexiting" |
269 |
| - elif enum == lldb.eStopReasonInstrumentation: |
270 |
| - return "instrumentation" |
271 |
| - elif enum == lldb.eStopReasonProcessorTrace: |
272 |
| - return "processortrace" |
273 |
| - else: |
274 |
| - raise Exception("Unknown StopReason enum") |
| 236 | + name = _STOP_REASON_NAMES.get(enum) |
| 237 | + if name: |
| 238 | + return name |
| 239 | + raise Exception(f"Unknown StopReason enum: {enum}") |
275 | 240 |
|
276 | 241 |
|
277 |
| -def symbol_type_to_str(enum): |
| 242 | +_SYMBOL_TYPE_NAMES = _enum_names(prefix="eSymbolType") |
| 243 | + |
| 244 | +def symbol_type_to_str(enum: int) -> str: |
278 | 245 | """Returns the symbolType string given an enum."""
|
279 |
| - if enum == lldb.eSymbolTypeInvalid: |
280 |
| - return "invalid" |
281 |
| - elif enum == lldb.eSymbolTypeAbsolute: |
282 |
| - return "absolute" |
283 |
| - elif enum == lldb.eSymbolTypeCode: |
284 |
| - return "code" |
285 |
| - elif enum == lldb.eSymbolTypeData: |
286 |
| - return "data" |
287 |
| - elif enum == lldb.eSymbolTypeTrampoline: |
288 |
| - return "trampoline" |
289 |
| - elif enum == lldb.eSymbolTypeRuntime: |
290 |
| - return "runtime" |
291 |
| - elif enum == lldb.eSymbolTypeException: |
292 |
| - return "exception" |
293 |
| - elif enum == lldb.eSymbolTypeSourceFile: |
294 |
| - return "sourcefile" |
295 |
| - elif enum == lldb.eSymbolTypeHeaderFile: |
296 |
| - return "headerfile" |
297 |
| - elif enum == lldb.eSymbolTypeObjectFile: |
298 |
| - return "objectfile" |
299 |
| - elif enum == lldb.eSymbolTypeCommonBlock: |
300 |
| - return "commonblock" |
301 |
| - elif enum == lldb.eSymbolTypeBlock: |
302 |
| - return "block" |
303 |
| - elif enum == lldb.eSymbolTypeLocal: |
304 |
| - return "local" |
305 |
| - elif enum == lldb.eSymbolTypeParam: |
306 |
| - return "param" |
307 |
| - elif enum == lldb.eSymbolTypeVariable: |
308 |
| - return "variable" |
309 |
| - elif enum == lldb.eSymbolTypeVariableType: |
310 |
| - return "variabletype" |
311 |
| - elif enum == lldb.eSymbolTypeLineEntry: |
312 |
| - return "lineentry" |
313 |
| - elif enum == lldb.eSymbolTypeLineHeader: |
314 |
| - return "lineheader" |
315 |
| - elif enum == lldb.eSymbolTypeScopeBegin: |
316 |
| - return "scopebegin" |
317 |
| - elif enum == lldb.eSymbolTypeScopeEnd: |
318 |
| - return "scopeend" |
319 |
| - elif enum == lldb.eSymbolTypeAdditional: |
320 |
| - return "additional" |
321 |
| - elif enum == lldb.eSymbolTypeCompiler: |
322 |
| - return "compiler" |
323 |
| - elif enum == lldb.eSymbolTypeInstrumentation: |
324 |
| - return "instrumentation" |
325 |
| - elif enum == lldb.eSymbolTypeUndefined: |
326 |
| - return "undefined" |
327 |
| - |
328 |
| - |
329 |
| -def value_type_to_str(enum): |
| 246 | + name = _SYMBOL_TYPE_NAMES.get(enum) |
| 247 | + if name: |
| 248 | + return name |
| 249 | + raise Exception(f"Unknown SymbolType enum: {enum}") |
| 250 | + |
| 251 | + |
| 252 | +_VALUE_TYPE_NAMES = _enum_names(prefix="eValueType") |
| 253 | + |
| 254 | +def value_type_to_str(enum: int) -> str: |
330 | 255 | """Returns the valueType string given an enum."""
|
331 |
| - if enum == lldb.eValueTypeInvalid: |
332 |
| - return "invalid" |
333 |
| - elif enum == lldb.eValueTypeVariableGlobal: |
334 |
| - return "global_variable" |
335 |
| - elif enum == lldb.eValueTypeVariableStatic: |
336 |
| - return "static_variable" |
337 |
| - elif enum == lldb.eValueTypeVariableArgument: |
338 |
| - return "argument_variable" |
339 |
| - elif enum == lldb.eValueTypeVariableLocal: |
340 |
| - return "local_variable" |
341 |
| - elif enum == lldb.eValueTypeRegister: |
342 |
| - return "register" |
343 |
| - elif enum == lldb.eValueTypeRegisterSet: |
344 |
| - return "register_set" |
345 |
| - elif enum == lldb.eValueTypeConstResult: |
346 |
| - return "constant_result" |
347 |
| - else: |
348 |
| - raise Exception("Unknown ValueType enum") |
| 256 | + name = _VALUE_TYPE_NAMES.get(enum) |
| 257 | + if name: |
| 258 | + return name |
| 259 | + raise Exception(f"Unknown ValueType enum: {enum}") |
349 | 260 |
|
350 | 261 |
|
351 | 262 | # ==================================================
|
|
0 commit comments