[llvm] cbc2ef0 - [llvm][utils] Add synthetic provider for llvm::DenseSet (#143631)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 12 10:13:33 PDT 2025
Author: Dave Lee
Date: 2025-06-12T10:13:30-07:00
New Revision: cbc2ef0e890e6c700023fe00c7166554f2f5ad14
URL: https://github.com/llvm/llvm-project/commit/cbc2ef0e890e6c700023fe00c7166554f2f5ad14
DIFF: https://github.com/llvm/llvm-project/commit/cbc2ef0e890e6c700023fe00c7166554f2f5ad14.diff
LOG: [llvm][utils] Add synthetic provider for llvm::DenseSet (#143631)
Add a synthetic child provider for `DenseSet`, which is a wrapper around
`DenseMap`. This provider leverages the existing `DenseMap` provider,
reshaping its dictionary structured children into a set.
Added:
Modified:
llvm/utils/lldbDataFormatters.py
Removed:
################################################################################
diff --git a/llvm/utils/lldbDataFormatters.py b/llvm/utils/lldbDataFormatters.py
index 988827ab4aa50..c5cd627c53149 100644
--- a/llvm/utils/lldbDataFormatters.py
+++ b/llvm/utils/lldbDataFormatters.py
@@ -3,6 +3,7 @@
Load into LLDB with 'command script import /path/to/lldbDataFormatters.py'
"""
+
from __future__ import annotations
import collections
@@ -82,6 +83,11 @@ def __lldb_init_module(debugger, internal_dict):
f"-l {__name__}.DenseMapSynthetic "
'-x "^llvm::DenseMap<.+>$"'
)
+ debugger.HandleCommand(
+ "type synthetic add -w llvm "
+ f"-l {__name__}.DenseSetSynthetic "
+ '-x "^llvm::DenseSet<.+>$"'
+ )
debugger.HandleCommand(
"type synthetic add -w llvm "
@@ -372,7 +378,8 @@ def update(self):
# For each key, collect a list of buckets it appears in.
key_buckets: dict[str, list[int]] = collections.defaultdict(list)
for index in range(num_buckets):
- key = buckets.GetValueForExpressionPath(f"[{index}].first")
+ bucket = buckets.GetValueForExpressionPath(f"[{index}]")
+ key = bucket.GetChildAtIndex(0)
key_buckets[str(key.data)].append(index)
# Heuristic: This is not a multi-map, any repeated (non-unique) keys are
@@ -383,6 +390,26 @@ def update(self):
self.child_buckets.append(indexes[0])
+class DenseSetSynthetic:
+ valobj: lldb.SBValue
+ map: lldb.SBValue
+
+ def __init__(self, valobj: lldb.SBValue, _) -> None:
+ self.valobj = valobj
+
+ def num_children(self) -> int:
+ return self.map.num_children
+
+ def get_child_at_index(self, idx: int) -> lldb.SBValue:
+ map_entry = self.map.child[idx]
+ set_entry = map_entry.GetChildAtIndex(0)
+ return set_entry.Clone(f"[{idx}]")
+
+ def update(self):
+ raw_map = self.valobj.GetChildMemberWithName("TheMap")
+ self.map = raw_map.GetSyntheticValue()
+
+
class ExpectedSynthetic:
# The llvm::Expected<T> value.
expected: lldb.SBValue
More information about the llvm-commits
mailing list