From 5dcb891c5946df44623122d190a62d7f76e2eb52 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Thu, 5 Jul 2018 20:32:29 +0300 Subject: [PATCH] Improve synthetic field accessors. --- llvmDebugInfoC/src/scripts/konan_lldb.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/llvmDebugInfoC/src/scripts/konan_lldb.py b/llvmDebugInfoC/src/scripts/konan_lldb.py index e25695a899d..0bffe8dfb75 100644 --- a/llvmDebugInfoC/src/scripts/konan_lldb.py +++ b/llvmDebugInfoC/src/scripts/konan_lldb.py @@ -101,17 +101,18 @@ class KonanHelperProvider(lldb.SBSyntheticValueProvider): 6: lambda address, error: self.__read_memory(address, " 0 def get_child_index(self, name): + if not name in self._children: + return -1 return self._children.index(name) def get_child_at_index(self, index): - return evaluate("(void *)Konan_DebugGetFieldAddress({}, {})".format(self._ptr, index)).GetValue() + if index < 0 or index >= self._children_count: + return None + error = lldb.SBError() + value = self._read_value(index, error) + return value if error.Success() else None + # TODO: fix cyclic structures stringification. def to_string(self): error = lldb.SBError() return dict([(self._children[i], self._read_value(i, error)) for i in range(0, self._children_count)]) - class KonanArraySyntheticProvider(KonanHelperProvider): def __init__(self, valobj): super(KonanArraySyntheticProvider, self).__init__(valobj) @@ -197,6 +204,7 @@ class KonanArraySyntheticProvider(KonanHelperProvider): def update(self): super(KonanArraySyntheticProvider, self).update() self._children = [x for x in range(0, self.num_children())] + return True def num_children(self): return self._children_count @@ -206,9 +214,11 @@ class KonanArraySyntheticProvider(KonanHelperProvider): def get_child_index(self, name): index = int(name) - return index if (0 <= index < self._num_children) else None + return index if (0 <= index < self._children_count) else -1 def get_child_at_index(self, index): + if index < 0 or index >= self._children_count: + return None error = lldb.SBError() return self._read_value(index, error) if error.Success() else None