Skip to content

Commit 161bdb3

Browse files
Change ValueObject::GetData to return llvm::Expected
1 parent a7d5b3f commit 161bdb3

File tree

4 files changed

+30
-17
lines changed

4 files changed

+30
-17
lines changed

lldb/include/lldb/ValueObject/ValueObject.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ class ValueObject {
757757
virtual size_t GetPointeeData(DataExtractor &data, uint32_t item_idx = 0,
758758
uint32_t item_count = 1);
759759

760-
virtual uint64_t GetData(DataExtractor &data, Status &error);
760+
virtual llvm::Expected<DataExtractor> GetData();
761761

762762
virtual bool SetData(DataExtractor &data, Status &error);
763763

lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,9 +551,8 @@ ThreadSP AppleObjCRuntime::GetBacktraceThreadFromException(
551551

552552
DataExtractor data;
553553
data.SetAddressByteSize(dict_entry->GetProcessSP()->GetAddressByteSize());
554-
Status error;
555-
dict_entry->GetData(data, error);
556-
if (error.Fail()) return ThreadSP();
554+
auto data_or_err = dict_entry->GetData();
555+
if (!data_or_err) return ThreadSP();
557556

558557
lldb::offset_t data_offset = 0;
559558
auto dict_entry_key = data.GetAddress(&data_offset);

lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,13 +247,15 @@ static lldb::addr_t GetVTableAddress(Process &process,
247247
// We have an object already read from process memory,
248248
// so just extract VTable pointer from it
249249

250-
DataExtractor data;
251-
Status err;
252-
auto size = valobj.GetData(data, err);
253-
if (err.Fail() || vbtable_ptr_offset + data.GetAddressByteSize() > size)
250+
auto data_or_err = valobj.GetData();
251+
if (!data_or_err)
252+
return LLDB_INVALID_ADDRESS;
253+
254+
auto size = data_or_err->GetByteSize();
255+
if (vbtable_ptr_offset + data_or_err->GetAddressByteSize() > size)
254256
return LLDB_INVALID_ADDRESS;
255257

256-
return data.GetAddress(&vbtable_ptr_offset);
258+
return data_or_err->GetAddress(&vbtable_ptr_offset);
257259
}
258260

259261
static int64_t ReadVBaseOffsetFromVTable(Process &process,

lldb/source/ValueObject/ValueObject.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -691,13 +691,20 @@ size_t ValueObject::GetPointeeData(DataExtractor &data, uint32_t item_idx,
691691
ValueObjectSP pointee_sp = Dereference(error);
692692
if (error.Fail() || pointee_sp.get() == nullptr)
693693
return 0;
694-
return pointee_sp->GetData(data, error);
694+
auto data_or_err = pointee_sp->GetData();
695+
if (!data_or_err)
696+
return 0;
697+
data = *data_or_err;
698+
return data.GetByteSize();
695699
} else {
696700
ValueObjectSP child_sp = GetChildAtIndex(0);
697701
if (child_sp.get() == nullptr)
698702
return 0;
699-
Status error;
700-
return child_sp->GetData(data, error);
703+
auto data_or_err = child_sp->GetData();
704+
if (!data_or_err)
705+
return 0;
706+
data = *data_or_err;
707+
return data.GetByteSize();
701708
}
702709
return true;
703710
} else /* (items > 1) */
@@ -764,22 +771,27 @@ size_t ValueObject::GetPointeeData(DataExtractor &data, uint32_t item_idx,
764771
return 0;
765772
}
766773

767-
uint64_t ValueObject::GetData(DataExtractor &data, Status &error) {
774+
llvm::Expected<DataExtractor> ValueObject::GetData() {
768775
UpdateValueIfNeeded(false);
769776
ExecutionContext exe_ctx(GetExecutionContextRef());
770-
error = m_value.GetValueAsData(&exe_ctx, data, GetModule().get());
777+
DataExtractor data;
778+
Status error = m_value.GetValueAsData(&exe_ctx, data, GetModule().get());
771779
if (error.Fail()) {
772780
if (m_data.GetByteSize()) {
773781
data = m_data;
774782
error.Clear();
775-
return data.GetByteSize();
783+
data.SetAddressByteSize(m_data.GetAddressByteSize());
784+
data.SetByteOrder(m_data.GetByteOrder());
785+
return data;
776786
} else {
777-
return 0;
787+
return llvm::createStringError(
788+
"GetData failed: %s",
789+
error.AsCString());
778790
}
779791
}
780792
data.SetAddressByteSize(m_data.GetAddressByteSize());
781793
data.SetByteOrder(m_data.GetByteOrder());
782-
return data.GetByteSize();
794+
return data;
783795
}
784796

785797
bool ValueObject::SetData(DataExtractor &data, Status &error) {

0 commit comments

Comments
 (0)