aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Lee <davelee.com@gmail.com>2022-08-03 20:45:47 -0600
committerDave Lee <davelee.com@gmail.com>2022-08-07 12:15:51 -0600
commite49c1568b6160f9a02da3295ac0d5c684fb64201 (patch)
treeacfb15c88d9d680b96b775a28fd389507b10c59d
parentfc40804a5a1d30d336576956d2a84600872092a1 (diff)
[lldb] Dynamically generate enum names in lldbutil
Change the `<enum>_to_str` functions in lldbutil to be dynamic. Instead of a manually maintained if/elif switch, the functions now perform lookup in a dynamically generated dict. The names are determined by stripping the enum's prefix, and then lowercasing the remaining suffix, ex: eStateRunning -> "running" Differential Revision: https://reviews.llvm.org/D131138
-rw-r--r--lldb/packages/Python/lldbsuite/test/lldbutil.py171
1 files changed, 41 insertions, 130 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lldbutil.py b/lldb/packages/Python/lldbsuite/test/lldbutil.py
index f21f4928704c..eba05a46b495 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbutil.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbutil.py
@@ -13,6 +13,7 @@ import os
import re
import sys
import subprocess
+from typing import Dict
# Third-party modules
from six import StringIO as SixStringIO
@@ -208,144 +209,54 @@ def get_description(obj, option=None):
# Convert some enum value to its string counterpart
# =================================================
-def state_type_to_str(enum):
+def _enum_names(prefix: str) -> Dict[int, str]:
+ """Generate a mapping of enum value to name, for the enum prefix."""
+ suffix_start = len(prefix)
+ return {
+ getattr(lldb, attr): attr[suffix_start:].lower()
+ for attr in dir(lldb)
+ if attr.startswith(prefix)
+ }
+
+
+_STATE_NAMES = _enum_names(prefix="eState")
+
+def state_type_to_str(enum: int) -> str:
"""Returns the stateType string given an enum."""
- if enum == lldb.eStateInvalid:
- return "invalid"
- elif enum == lldb.eStateUnloaded:
- return "unloaded"
- elif enum == lldb.eStateConnected:
- return "connected"
- elif enum == lldb.eStateAttaching:
- return "attaching"
- elif enum == lldb.eStateLaunching:
- return "launching"
- elif enum == lldb.eStateStopped:
- return "stopped"
- elif enum == lldb.eStateRunning:
- return "running"
- elif enum == lldb.eStateStepping:
- return "stepping"
- elif enum == lldb.eStateCrashed:
- return "crashed"
- elif enum == lldb.eStateDetached:
- return "detached"
- elif enum == lldb.eStateExited:
- return "exited"
- elif enum == lldb.eStateSuspended:
- return "suspended"
- else:
- raise Exception("Unknown StateType enum: " + str(enum))
+ name = _STATE_NAMES.get(enum)
+ if name:
+ return name
+ raise Exception(f"Unknown StateType enum: {enum}")
+
+_STOP_REASON_NAMES = _enum_names(prefix="eStopReason")
-def stop_reason_to_str(enum):
+def stop_reason_to_str(enum: int) -> str:
"""Returns the stopReason string given an enum."""
- if enum == lldb.eStopReasonInvalid:
- return "invalid"
- elif enum == lldb.eStopReasonNone:
- return "none"
- elif enum == lldb.eStopReasonTrace:
- return "trace"
- elif enum == lldb.eStopReasonBreakpoint:
- return "breakpoint"
- elif enum == lldb.eStopReasonWatchpoint:
- return "watchpoint"
- elif enum == lldb.eStopReasonExec:
- return "exec"
- elif enum == lldb.eStopReasonFork:
- return "fork"
- elif enum == lldb.eStopReasonVFork:
- return "vfork"
- elif enum == lldb.eStopReasonVForkDone:
- return "vforkdone"
- elif enum == lldb.eStopReasonSignal:
- return "signal"
- elif enum == lldb.eStopReasonException:
- return "exception"
- elif enum == lldb.eStopReasonPlanComplete:
- return "plancomplete"
- elif enum == lldb.eStopReasonThreadExiting:
- return "threadexiting"
- elif enum == lldb.eStopReasonInstrumentation:
- return "instrumentation"
- elif enum == lldb.eStopReasonProcessorTrace:
- return "processortrace"
- else:
- raise Exception("Unknown StopReason enum")
+ name = _STOP_REASON_NAMES.get(enum)
+ if name:
+ return name
+ raise Exception(f"Unknown StopReason enum: {enum}")
-def symbol_type_to_str(enum):
+_SYMBOL_TYPE_NAMES = _enum_names(prefix="eSymbolType")
+
+def symbol_type_to_str(enum: int) -> str:
"""Returns the symbolType string given an enum."""
- if enum == lldb.eSymbolTypeInvalid:
- return "invalid"
- elif enum == lldb.eSymbolTypeAbsolute:
- return "absolute"
- elif enum == lldb.eSymbolTypeCode:
- return "code"
- elif enum == lldb.eSymbolTypeData:
- return "data"
- elif enum == lldb.eSymbolTypeTrampoline:
- return "trampoline"
- elif enum == lldb.eSymbolTypeRuntime:
- return "runtime"
- elif enum == lldb.eSymbolTypeException:
- return "exception"
- elif enum == lldb.eSymbolTypeSourceFile:
- return "sourcefile"
- elif enum == lldb.eSymbolTypeHeaderFile:
- return "headerfile"
- elif enum == lldb.eSymbolTypeObjectFile:
- return "objectfile"
- elif enum == lldb.eSymbolTypeCommonBlock:
- return "commonblock"
- elif enum == lldb.eSymbolTypeBlock:
- return "block"
- elif enum == lldb.eSymbolTypeLocal:
- return "local"
- elif enum == lldb.eSymbolTypeParam:
- return "param"
- elif enum == lldb.eSymbolTypeVariable:
- return "variable"
- elif enum == lldb.eSymbolTypeVariableType:
- return "variabletype"
- elif enum == lldb.eSymbolTypeLineEntry:
- return "lineentry"
- elif enum == lldb.eSymbolTypeLineHeader:
- return "lineheader"
- elif enum == lldb.eSymbolTypeScopeBegin:
- return "scopebegin"
- elif enum == lldb.eSymbolTypeScopeEnd:
- return "scopeend"
- elif enum == lldb.eSymbolTypeAdditional:
- return "additional"
- elif enum == lldb.eSymbolTypeCompiler:
- return "compiler"
- elif enum == lldb.eSymbolTypeInstrumentation:
- return "instrumentation"
- elif enum == lldb.eSymbolTypeUndefined:
- return "undefined"
-
-
-def value_type_to_str(enum):
+ name = _SYMBOL_TYPE_NAMES.get(enum)
+ if name:
+ return name
+ raise Exception(f"Unknown SymbolType enum: {enum}")
+
+
+_VALUE_TYPE_NAMES = _enum_names(prefix="eValueType")
+
+def value_type_to_str(enum: int) -> str:
"""Returns the valueType string given an enum."""
- if enum == lldb.eValueTypeInvalid:
- return "invalid"
- elif enum == lldb.eValueTypeVariableGlobal:
- return "global_variable"
- elif enum == lldb.eValueTypeVariableStatic:
- return "static_variable"
- elif enum == lldb.eValueTypeVariableArgument:
- return "argument_variable"
- elif enum == lldb.eValueTypeVariableLocal:
- return "local_variable"
- elif enum == lldb.eValueTypeRegister:
- return "register"
- elif enum == lldb.eValueTypeRegisterSet:
- return "register_set"
- elif enum == lldb.eValueTypeConstResult:
- return "constant_result"
- else:
- raise Exception("Unknown ValueType enum")
+ name = _VALUE_TYPE_NAMES.get(enum)
+ if name:
+ return name
+ raise Exception(f"Unknown ValueType enum: {enum}")
# ==================================================