Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions lldb/bindings/interface/SBValueExtensions.i
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ STRING_EXTENSION_OUTSIDE(SBValue)
return self.GetDynamicValue (eDynamicCanRunTarget)

class children_access(object):
'''A helper object that will lazily hand out thread for a process when supplied an index.'''
'''A helper object that will lazily hand out child values when supplied an index or name.'''

def __init__(self, sbvalue):
self.sbvalue = sbvalue
Expand All @@ -23,6 +23,8 @@ STRING_EXTENSION_OUTSIDE(SBValue)
if -count <= key < count:
key %= count
return self.sbvalue.GetChildAtIndex(key)
elif isinstance(key, str):
return self.sbvalue.GetChildMemberWithName(key)
return None

def get_child_access_object(self):
Expand All @@ -49,7 +51,7 @@ STRING_EXTENSION_OUTSIDE(SBValue)
return self.GetNumChildren()

children = property(get_value_child_list, None, doc='''A read only property that returns a list() of lldb.SBValue objects for the children of the value.''')
child = property(get_child_access_object, None, doc='''A read only property that returns an object that can access children of a variable by index (child_value = value.children[12]).''')
child = property(get_child_access_object, None, doc='''A read only property that returns an object that can access children of a variable by index or by name.''')
name = property(GetName, None, doc='''A read only property that returns the name of this value as a string.''')
type = property(GetType, None, doc='''A read only property that returns a lldb.SBType object that represents the type for this value.''')
size = property(GetByteSize, None, doc='''A read only property that returns the size in bytes of this value.''')
Expand Down
8 changes: 3 additions & 5 deletions lldb/test/API/python_api/value/TestValueAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,10 +140,8 @@ def test(self):
val_i = target.EvaluateExpression("i")
val_s = target.EvaluateExpression("s")
val_a = target.EvaluateExpression("a")
self.assertTrue(
val_s.GetChildMemberWithName("a").GetAddress().IsValid(), VALID_VARIABLE
)
self.assertTrue(val_s.GetChildMemberWithName("a").AddressOf(), VALID_VARIABLE)
self.assertTrue(val_s.child["a"].GetAddress().IsValid(), VALID_VARIABLE)
self.assertTrue(val_s.child["a"].AddressOf(), VALID_VARIABLE)
self.assertTrue(val_a.Cast(val_i.GetType()).AddressOf(), VALID_VARIABLE)

# Test some other cases of the Cast API. We allow casts from one struct type
Expand Down Expand Up @@ -210,7 +208,7 @@ def test(self):
weird_cast = f_var.Cast(val_s.GetType())
self.assertSuccess(weird_cast.GetError(), "Can cast from a larger to a smaller")
self.assertEqual(
weird_cast.GetChildMemberWithName("a").GetValueAsSigned(0),
weird_cast.child["a"].GetValueAsSigned(0),
33,
"Got the right value",
)
Expand Down
Loading