[PATCH] D97525: [llvm][utils] Support dereferencing llvm::Optional lldb formatter
Dave Lee via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 26 07:42:25 PST 2021
kastiglione updated this revision to Diff 326695.
kastiglione added a comment.
back out `dict` renames
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D97525/new/
https://reviews.llvm.org/D97525
Files:
llvm/utils/lldbDataFormatters.py
Index: llvm/utils/lldbDataFormatters.py
===================================================================
--- llvm/utils/lldbDataFormatters.py
+++ llvm/utils/lldbDataFormatters.py
@@ -4,6 +4,8 @@
Load into LLDB with 'command script import /path/to/lldbDataFormatters.py'
"""
+import lldb
+
def __lldb_init_module(debugger, internal_dict):
debugger.HandleCommand('type category define -e llvm -l c++')
debugger.HandleCommand('type synthetic add -w llvm '
@@ -15,6 +17,9 @@
debugger.HandleCommand('type synthetic add -w llvm '
'-l lldbDataFormatters.ArrayRefSynthProvider '
'-x "^llvm::ArrayRef<.+>$"')
+ debugger.HandleCommand('type synthetic add -w llvm '
+ '-l lldbDataFormatters.OptionalSynthProvider '
+ '-x "^llvm::Optional<.+>$"')
debugger.HandleCommand('type summary add -w llvm '
'-F lldbDataFormatters.OptionalSummaryProvider '
'-x "^llvm::Optional<.+>$"')
@@ -97,7 +102,7 @@
self.type_size = self.data_type.GetByteSize()
assert self.type_size != 0
-def OptionalSummaryProvider(valobj, internal_dict):
+def GetOptionalValue(valobj):
storage = valobj.GetChildMemberWithName('Storage')
if not storage:
storage = valobj
@@ -108,11 +113,32 @@
return '<could not read llvm::Optional>'
if hasVal == 0:
- return 'None'
+ return None
underlying_type = storage.GetType().GetTemplateArgumentType(0)
storage = storage.GetChildMemberWithName('value')
- return str(storage.Cast(underlying_type))
+ return storage.Cast(underlying_type)
+
+def OptionalSummaryProvider(valobj, internal_dict):
+ return GetOptionalValue(valobj).summary
+
+class OptionalSynthProvider:
+ """Provides deref support to llvm::Optional<T>"""
+ def __init__(self, valobj, internal_dict):
+ self.valobj = valobj
+
+ def num_children(self):
+ return self.valobj.num_children
+
+ def get_child_index(self, name):
+ if name == '$$dereference$$':
+ return self.valobj.num_children + 1
+ return self.valobj.GetIndexOfChildWithName(name)
+
+ def get_child_at_index(self, index):
+ if index < self.valobj.num_children:
+ return self.valobj.GetChildAtIndex(index)
+ return GetOptionalValue(self.valobj) or lldb.SBValue()
def SmallStringSummaryProvider(valobj, internal_dict):
num_elements = valobj.GetNumChildren()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D97525.326695.patch
Type: text/x-patch
Size: 2545 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210226/5f66314d/attachment.bin>
More information about the llvm-commits
mailing list